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
// 控制器成员记住界面上的头像按钮
@property (weak, nonatomic) IBOutlet UIButton *headBtn;
// 按钮控制 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




效果图















郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。