• 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
    




    效果图















  • 相关阅读:
    虚拟化技术KVM
    Rsync+Inotify实现文件自动同步
    第一次使用博客园
    kmp算法分析
    程序可移植性分析(一)数据类型
    strings用法小记
    size用法小记
    readelf用法小记
    nm用法小记
    ar用法小记
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6686287.html
Copyright © 2020-2023  润新知