iOS_2_button控制物体形变

终于效果图:

BeyondViewController.h

//
//  BeyondViewController.h
//  02_button控制物体形变
//
//  Created by beyond on 14-7-21.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface BeyondViewController : UIViewController
// 控制器成员记住界面上的头像button
@property (weak, nonatomic) IBOutlet UIButton *headBtn;
// button控制 head button 上 下 左 右 移动
- (IBAction)btnClick:(UIButton *)sender;
- (IBAction)AffineTransform:(UIButton *)sender;
- (IBAction)reset:(UIButton *)sender;

@end

BeyondViewController.m

//
//  BeyondViewController.m
//  02_按钮控制物体形变
//
//  Created by beyond on 14-7-21.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondViewController.h"

#define kDelta 20
const int DELTA = 50;

@interface BeyondViewController ()
{
    // 左旋转 最笨方法 成员变量 记住弧度 可累计
    CGFloat _angel;

    // 成员记住 headBtn默认的frame
    CGRect _headBtnFrame;
}
@end

@implementation BeyondViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // view一载入 就用 成员 记住 headBtn的初始位置
    _headBtnFrame = _headBtn.frame;

    // 调用自己定义方法,代码创建 buttuon
    [self addButtionByCoding];
    [self addTextFieldByCoding];

}

# pragma mark - 按钮控制 head button 上 下 左 右 移动
- (void)moveByFrame:(UIButton *)sender
{
    // UIView的类方法 实现动画效果(開始动画)
    [UIView beginAnimations:nil context:nil];
    // 默认动画持续时间是 0.2
    [UIView setAnimationDuration:1];

    // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量
    CGRect frame = self.headBtn.frame;
    // 一般数字是一样的话就能够抽取为: 1,变量; 2,宏; 3,const int
    // CGFloat delta = 50;
    // #define kDelta 50
    // const int DELTA = 50;

    int tag = [sender tag];
    switch (tag) {
        case 1:
            frame.origin.y -= kDelta;
            break;
        case 2:
            frame.origin.x += kDelta;
            break;
        case 3:
            frame.origin.y += kDelta;
            break;
        case 4:
            frame.origin.x -= kDelta;
            break;

        default:
            break;
    }

    self.headBtn.frame=frame;

    // UIView的类方法 实现动画效果(结束动画)
    [UIView commitAnimations];
}
- (IBAction)btnClick:(UIButton *)sender {

    [self animateWithBlock:^{

        // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量
        CGPoint center = self.headBtn.center;
        // 一般数字是一样的话就能够抽取为: 1,变量; 2,宏; 3,const int
        // CGFloat delta = 50;
        // #define kDelta 50
        // const int DELTA = 50;

        int tag = [sender tag];
        switch (tag) {
            case 1:
                center.y -= kDelta;
                break;
            case 2:
                center.x += kDelta;
                break;
            case 3:
                center.y += kDelta;
                break;
            case 4:
                center.x -= kDelta;
                break;

            default:
                break;
        }

        self.headBtn.center = center;

    }];

}

#pragma mark - 按钮控制 head button 左右旋转 放大 缩小
- (IBAction)AffineTransform:(UIButton *)sender {

    // UIView的类方法 实现动画效果(開始动画)
    [UIView beginAnimations:nil context:nil];
    // 默认动画持续时间是 0.2
    [UIView setAnimationDuration:1];
    int tag = [sender tag];
    switch (tag) {
        case 11:
            // _angel -= M_PI_4;
            // 旋转 顺时针为正方向,使用弧度 M_PI_4 就是顺时针旋转45度
            //_headBtn.transform = CGAffineTransformMakeRotation(_angel);

            // CGAffineTransformRotate方法:返回一个新的结构体,是一个在原来 的结构体基础上进行一定弧度旋转的新的结构体
            _headBtn.transform = CGAffineTransformRotate(_headBtn.transform, - M_PI_4);
            break;
        case 12:
            // _angel += M_PI_4;
            // 旋转 顺时针为正方向,使用弧度 M_PI_4 就是顺时针旋转45度
            //_headBtn.transform = CGAffineTransformMakeRotation(_angel);

            // CGAffineTransformRotate方法:返回一个新的结构体,是一个在原来 的结构体基础上进行一定弧度旋转的新的结构体
            _headBtn.transform = CGAffineTransformRotate(_headBtn.transform,  M_PI_4);
            break;
        case 13:
            // 缩小
            // _headBtn.transform = CGAffineTransformMakeScale(0.5, 0.5);
            _headBtn.transform = CGAffineTransformScale(_headBtn.transform, 0.8, 0.8);
            break;
        case 14:
            // 放大
            // _headBtn.transform = CGAffineTransformMakeScale(1.5, 1.5);
            _headBtn.transform = CGAffineTransformScale(_headBtn.transform, 1.2, 1.2);
            break;
        case 0:
            // 点击headBtn的时候,清空并还原为默认状态
            _headBtn.transform = CGAffineTransformIdentity;
            _headBtn.frame = _headBtnFrame;
            break;
        default:
            break;
    }

    // UIView的类方法 实现动画效果(结束动画)
    [UIView commitAnimations];
}

#pragma mark - 通过block封装代码
// void (^myBlock)();
void (^myBlock)() = ^{
    NSLog(@"beyond");
};
// 手动调用block()时有点问题

- (void)animateWithBlock:(void(^)())block
{
    // UIView的类方法 实现动画效果(開始动画)
    [UIView beginAnimations:nil context:nil];
    // 默认动画持续时间是 0.2
    [UIView setAnimationDuration:1];

    block();

    // UIView的类方法 实现动画效果(结束动画)
    [UIView commitAnimations];
}
- (IBAction)reset:(UIButton *)sender {
    [self animateWithBlock:^{
        // 点击的时候,清空并还原为默认状态
        _headBtn.transform = CGAffineTransformIdentity;
        _headBtn.frame = _headBtnFrame;
    }];
}

- (void) addButtionByCoding
{
    // 1,用类方法创建 button实例
    UIButton *button = [[UIButton alloc] init];
    // 2,设置button的细节
    button.frame = CGRectMake(0, 0, 100, 100);

    // 正常状态
    [button setTitle:@"normal" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    // [button setImage:[UIImage imageNamed:@"btn_01.png"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"btn_01.png"] forState:UIControlStateNormal];
    // 点击时高亮状态
    [button setTitle:@"highlighted" forState:UIControlStateHighlighted];
    [button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    // [button setImage:[UIImage imageNamed:@"btn_02.png"] forState:UIControlStateHighlighted];
    [button setBackgroundImage:[UIImage imageNamed:@"btn_02.png"] forState:UIControlStateHighlighted];
    // 为按钮加入点击事件
    [button addTarget:self action:@selector(codeBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    // 3,加入button到当前控制器的view里面
    [self.view addSubview:button];
}
// 代码创建的按钮的点击事件
- (void) codeBtnClick:(UIButton *)sender
{
    NSLog(@"%@",sender);
    NSLog(@"%p",sender);
}
// 代码创建文本输入框
- (void) addTextFieldByCoding
{
    // 1,类方法创建控件
    UITextField *textField = [[UITextField alloc]init];
    // 2,控件细节
    textField.frame = CGRectMake(100, 0, 100, 100);
    textField.backgroundColor = [UIColor grayColor];
    // 系统字体大小
    textField.font = [UIFont systemFontOfSize:20];
    textField.font = [UIFont boldSystemFontOfSize:30];
    // 居中显示
    CGFloat x = self.view.frame.size.width*0.5;
    CGFloat y = self.view.frame.size.height*0.5;
    // textField.center = CGPointMake(x, y);
    // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量
    CGPoint center = textField.center;
    center.x = x;
    center.y = y;
    textField.center = center;

    // 3,将控件加入到当前控制器的view
    [self.view addSubview:textField];
}
@end

效果图

时间: 2024-10-13 18:30:59

iOS_2_button控制物体形变的相关文章

iOS_2_按钮控制物体形变

BeyondViewController.h // // BeyondViewController.h // 02_按钮控制物体形变 // // Created by beyond on 14-7-21. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> @interface BeyondViewController : UIViewController // 控制器成员记住界面

Unity游戏开发的数学与物理 2 ( 通过键盘控制物体的运动 )

通过键盘控制物体的运动 实现需注意: 获取键盘相应的方法 边界检测 合力方向的速度处理 勾股定理 using UnityEngine; using System.Collections; //通过键盘控制物体的运动 public class KeyControlMotionTest : MonoBehaviour { //物体的X位置 float posX = 0; //物体的Y位置 float posY = 0; //物体在x方向上的速度 float speedX = 1; //物体在y方向上

Maya 脚本控制物体自转

在Maya中,我们可以用脚本来控制物体的自转方向,速度等等,步骤如下: 选择需要操作的物体object,打开通道盒Channel Box,点击编辑Edit,打开表达式Expressions面板 选择需要转动轴rotateX, rotateY, 或者rotateZ 然后在下面输入: object.rotateX = time * -64; 上面的代码表示物体每秒绕x轴逆时针旋转64度.延伸阅读请参见Maya表达式制作时钟转动效果.

Unity之一天一个技术点(二)---全局控制物体是否显示

全局控制物体是否显示 public static void ShowObj(GameObject obj,bool show) { UnityEngine.Renderer[] allObj = obj.GetComponentsInChildren<UnityEngine.Renderer>(); foreach (Renderer a in allObj) { a.renderer.enabled = show; } //两种方法 for (int i = 0; i < allObj

unity3d小小白之代码控制物体通过键盘输入移动

我通过键盘wsad来控制物体运动,代码如下: 这里说明一下我的代码. 这里面的back,forward,right,left 都是以你要控制移动的物体的自身坐标移动的. 我的代码是左右移动是在Z轴上,上下移动是X轴上,按理来讲,按下a,物体应该是Vector.left 而不是Vector.right.这是因为我在放物体的时候将物体绕Y轴旋转了180° ,如果我还按照按下a对应left,那么我按下a会向右走.因此我就调成按下a向右走了. 至于判断条件里的数字,是这样得到的:把你要移动的物体移到Ga

Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化

通过把不同的游戏物体放在不同的Layer里面能对不同类的游戏物体进行很方便的控制,如果某些游戏物体创建后你不想再改动,如地面 装饰 什么的, 你可以通过点击Layer下拉菜单把它们锁定了 也可以通过控制Layer下拉菜单中的眼睛图标来设置是否 显示 或 隐藏 layer里的物体 这里需要注意的是,Unity中 Layer 最多有25个,不过对我们来说已经非常够用了.

Unity3D 控制物体移动、旋转、缩放

Transform基本移动函数: transform.Translate(Vector3.forward *TranslateSpeed); transform.Translate(xSpeed,0,zSpeed); transform.position = Vector3(xPostion,0,zPostion); 1.输入指定按键: if(Input.GetKey ("up")) print("Up!"); if(Input.GetKey(KeyCode.W);

控制物体的移动与碰撞检测

using UnityEngine; using System.Collections; public class move : MonoBehaviour { GameObject go; // Use this for initialization void Start () { go= GameObject.Find("c4"); //命名为c4的Cube go.renderer.material.color = Color.red; //将其材质设为红色 } // Update

unity发布安卓 手指控制物体缩放和旋转

直接帮到物体的身上就可以了 using UnityEngine; using System.Collections;using System.IO;public class hehe : MonoBehaviour{    private Touch oldTouch1;  //上次触摸点1(手指1)      private Touch oldTouch2;  //上次触摸点2(手指2) void Start()    { } void Update()    {        //没有触摸