IOS中手势操做通常是 UIGestureRecognizer 类的几个手势子类去实现,通常咱们用到的手势就这么5种:ui
一、点击 UITapGestureRecognizeratom
二、平移 UIPanGestureRecognizerspa
三、缩放 UIPinchGestureRecognizer3d
四、旋转 UIRotationGestureRecognizer日志
五、轻扫 UISwipeGestureRecognizercode
咱们上面这个实例中就用到了上面这5种手势,不过其中 点击与轻扫没有体现出来,只是输出了下日志而已,一会看代码orm
下面咱们来分别介绍下这几种手势对象
UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)]; // 点击次数,默认为1,1为单击,2为双击 tapGes.numberOfTapsRequired = 2;
这个点击手势类有一个属性 numberOfTapsRequired 用于设置点击数,就是点击几回才触发这个事件blog
// 平移手势 - (void)initPanGes{ UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)]; [self.imgView addGestureRecognizer:panGes]; } - (void)panGes:(UIPanGestureRecognizer*)ges{ // 获取平移的坐标点 CGPoint transPoint = [ges translationInView:self.imgView]; }
平移手势自己没太多可设置的属性,在平移事件触发手,能够用 translationInView 方法获取当前平移坐标点事件
// 缩放手势 - (void)initPinGes{ UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)]; [self.imgView addGestureRecognizer:pinGes]; } - (void)pinGes:(UIPinchGestureRecognizer*)ges{ // 缩放 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale); }
缩放手势在事件里面能够获取 scale 属性,表示当前缩放值
// 旋转手势 - (void)initRotation{ UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)]; [self.imgView addGestureRecognizer:rotationGes]; } - (void)rotationGes:(UIRotationGestureRecognizer*)ges{ // 旋转图片 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation); }
旋转手势在事件里面能够经过获取 rotation 属性获取当前旋转的角度
// 轻扫手势 - (void)initSwipeGes{ // 建立 从右向左 轻扫的手势 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默认是从左往右 // 最多只能开启一个手势,若是要开启多个就得建立多个手势 // 监遵从右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; [self.imgView addGestureRecognizer:swipeLeftGes]; } - (void)swipeGes:(UISwipeGestureRecognizer*)ges{ // ges.direction方向值 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction); }
轻扫手势对象须要设置 direction 属性,默认是只监遵从左向右,这是一个枚举值 UISwipeGestureRecognizerDirection
UISwipeGestureRecognizerDirectionRight 从左向右(默认值)
UISwipeGestureRecognizerDirectionLeft 从右向左
UISwipeGestureRecognizerDirectionUp 从下向上
UISwipeGestureRecognizerDirectionDown 从上向下
下面看一下咱们上面那个效果图实现代码吧
// // ViewController.m // 各类手势操做 // // Created by xgao on 16/3/24. // Copyright © 2016年 xgao. All rights reserved. // #import "ViewController.h" @interface ViewController ()<UIGestureRecognizerDelegate> @property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self initTapGes]; [self initPanGes]; [self initPinGes]; [self initRotation]; [self initSwipeGes]; } // 点击手势 - (void)initTapGes{ UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)]; // 点击次数,默认为1,1为单击,2为双击 tapGes.numberOfTapsRequired = 2; tapGes.delegate = self; [self.imgView addGestureRecognizer:tapGes]; } - (void)tapGes:(UITapGestureRecognizer*)ges{ NSLog(@"%s",__func__); } // 平移手势 - (void)initPanGes{ UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)]; panGes.delegate = self; [self.imgView addGestureRecognizer:panGes]; } - (void)panGes:(UIPanGestureRecognizer*)ges{ // 获取平移的坐标点 CGPoint transPoint = [ges translationInView:self.imgView]; // 在以前的基础上移动图片 self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transPoint.x, transPoint.y); // 复原,必需复原 // 每次都清空一下消除坐标叠加 [ges setTranslation:CGPointZero inView:self.imgView]; NSLog(@"%s",__func__); } // 缩放手势 - (void)initPinGes{ UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)]; pinGes.delegate = self; [self.imgView addGestureRecognizer:pinGes]; } - (void)pinGes:(UIPinchGestureRecognizer*)ges{ // 缩放 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale); // 复原 // 每次都清空一下消除叠加 ges.scale = 1; } // 旋转手势 - (void)initRotation{ UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)]; rotationGes.delegate = self; [self.imgView addGestureRecognizer:rotationGes]; } - (void)rotationGes:(UIRotationGestureRecognizer*)ges{ // 旋转图片 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation); // 复原 // 每次都清空一下消除叠加 ges.rotation = 0; NSLog(@"%s",__func__); } // 轻扫手势 - (void)initSwipeGes{ // 建立 从右向左 轻扫的手势 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默认是从左往右 // 最多只能开启一个手势,若是要开启多个就得建立多个手势 // 监遵从右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; swipeLeftGes.delegate = self; [self.imgView addGestureRecognizer:swipeLeftGes]; // 建立 从下向上 轻扫的手势 UISwipeGestureRecognizer* swipeUpGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 监遵从下向上的方向 swipeUpGes.direction = UISwipeGestureRecognizerDirectionUp; swipeUpGes.delegate = self; [self.imgView addGestureRecognizer:swipeUpGes]; } - (void)swipeGes:(UISwipeGestureRecognizer*)ges{ // ges.direction方向值 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction); } #pragma mark - UIGestureRecognizerDelegate // 判断是否能触发手势 - (BOOL)gestureRecognizerShouldBegin:(UITapGestureRecognizer *)gestureRecognizer{ return YES; } // 是否容许多手势操做,不是多触摸点 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; } @end
这里须要注意的有两点:
一、对于 平移、缩放、旋转 这3个手势,咱们若是要用它的值去处理的话,要记得复原!复原!复原!这点很重要!重要的事说3遍~~
平移手势里面咱们须要设置 setTranslation:CGPointZero 来复原它的坐标值,否则下一次事件触发这个坐标值会叠加
缩放手势里面设置 ges.scale = 1 来复原它的缩放值
旋转手势里面设置 ges.rotation = 0 来复原它的角度值
二、假如咱们须要多手势一块儿用的时候就须要设置下delegate 里面的一个返回参数的方法了
// 是否容许多手势操做,不是多触摸点 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; }
此次分享就到这里~~有什么不清楚的,就留言吧 ^_^