利用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
工程下载地址:
https://files.cnblogs.com/iOSCain/%E6%8C%89%E9%92%AE%E7%9A%84%E7%8A%B6%E6%80%81.zip