• 利用Button实现移动, 缩放, 旋转, 重置等功能.


    在UIView里面有一个叫做Button的View, 这个控件简单来说就是点击, 就是手机上我们一切可以点击的东西都是Button, 现在我们利用这一个控件来实现上面等更能.

    PS: 方法和注释都在文件工程里面, 你们可以下载下来运行一下试试, 这里我就只写代码了.

    关于怎么使用UIButton, 各位可以去百度一下, 有专门视频讲解, 这里贴图比较麻烦, 不好操作, 请谅解.

    ViewController.h声明所有的方法.

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    //声明被控制的UIButton的属性.
    @property (weak, nonatomic) IBOutlet UIButton *btn;
    
    //声明上下左右的移动方法.
    - (IBAction)button:(id)sender;
    
    //声明缩放方法.
    - (IBAction)scale:(id)sender;
    
    //声明旋转的方法.
    - (IBAction)rotate:(id)sender;
    
    //初始化Button.
    - (IBAction)initialize:(id)sender;
    @end

    ViewController.m文件, 实现所有的方法.

    #import "ViewController.h"
    
    //也可以创建一个宏, 这样子更加方便一些, 不用浪费内存空间.
    #define kDelta 10
    
    @interface ViewController ()
    @end
    
    @implementation ViewController
    
    - (void)btnCilickWithblock:(void (^)())block
    {
        //动画准备开始
        [UIView beginAnimations:nil context:nil];
        //动画运行的时间
        [UIView setAnimationDuration:1.0f];
        //实现方法.
        block();
        //运行动画.
        [UIView commitAnimations];
    }
    
    #pragma mark 控制按钮走动 (上下左右)
    - (IBAction)button:(id)sender
    {
        [self btnCilickWithblock:^{
            //这里除了用frame, 还可以使用center
            CGRect frame = _btn.frame;
    //        CGPoint tmpcenter = _btn.center;
            //为什么使用CGFloat呢, 因为origin是继承与CGRect, CGRect又是浮点类型, 所以要使用CGFloat.
            //    CGFloat dale = 50;
            //可以使用switch方法, 也可以使用if判断方法, 按照个人喜欢.
            //由于sender是id类型, 不能使用.操作符, 所以只能用get方法.
            switch ([sender tag]) {
                case 1:
                    frame.origin.y -= kDelta;
                    if(frame.origin.y <= 10)
                    {
                        frame.origin.y = 0;
                    }
    //                tmpcenter.y -= kDelta;
                    break;
                case 2:
                    frame.origin.x += kDelta;
                    if(frame.origin.x >= 210)
                    {
                        frame.origin.x = 220;
                    }
    //                tmpcenter.x += kDelta;
                    break;
                case 3:
                    frame.origin.y += kDelta;
                    if(frame.origin.y >= 458)
                    {
                        frame.origin.y = 468;
                    }
    //                tmpcenter.y += kDelta;
                    break;
                case 4:
                    frame.origin.x -= kDelta;
                    if(frame.origin.x <= 10)
                    {
                        frame.origin.x = 0;
                    }
    //                tmpcenter.x -= kDelta;
                    break;
                default:
                    break;
            }
            _btn.frame = frame;
    //        _btn.center = tmpcenter;
        }];
    }
    #pragma mark 旋转
    - (IBAction)rotate:(id)sender {
        //弧度 3.14 - π
        //角度 180
        //这里系统已经给我们定义好了一个宏.
        //逆时针旋转在宏的前面加上-操作符, 否则就是+操作符.
        //这里的M_PI_4意思就是旋转45°.
        //    _btn.transform = CGAffineTransformMakeRotation(-M_PI_4);
        [self btnCilickWithblock:^{
            if (5 == [sender tag])
            {
                _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_2 * - 1);
            }
            else if(6 == [sender tag])
            {
                _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_2 * 1);
            }
    
        }];
    }
    #pragma mark 缩放
    - (IBAction)scale:(id)sender
    {
        [self btnCilickWithblock:^{
            //使用三目运算符来判断是哪个按钮.
            CGFloat scale = [sender tag] == 7? 1.2: 0.8;
            //判断按钮标签.
            if([sender tag] == 7)
            {
                _btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
            }
            else if ([sender tag] == 8)
            {
                _btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
            }
        }];
    }
    #pragma mark 初始化
    - (IBAction)initialize:(id)sender {
        [self btnCilickWithblock:^{
            //初始化之前所有的形变属性.
            _btn.transform = CGAffineTransformIdentity;
        }];
    }
    @end

    工程下载地址:

    http://files.cnblogs.com/iOSCain/%E6%8C%89%E9%92%AE%E7%9A%84%E7%8A%B6%E6%80%81.zip

  • 相关阅读:
    [Leetcode]设计链表
    [Leetcode]最小栈
    复杂JSON反序列化为类对象
    Big Data Solution in Azure: Azure Data Lake
    EF vs ADO.NET
    EF5.0默认不支持DB First了?
    WebService/WCF/WebAPI区别
    AugularJS1.X不升级到2.X
    数据库中锁的问题
    MVC中路由匹配的规则
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4048626.html
Copyright © 2020-2023  润新知