博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - UIGestureRecognizer
阅读量:5986 次
发布时间:2019-06-20

本文共 10473 字,大约阅读时间需要 34 分钟。

前言

NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIGestureRecognizer : NSObject    @available(iOS 3.2, *)       public class UIGestureRecognizer : NSObject    // 点击(轻点)    NS_CLASS_AVAILABLE_IOS(3_2)  @interface UITapGestureRecognizer : UIGestureRecognizer    @available(iOS 3.2, *)       public class UITapGestureRecognizer : UIGestureRecognizer    // 长按(按住不放)    NS_CLASS_AVAILABLE_IOS(3_2)  @interface UILongPressGestureRecognizer : UIGestureRecognizer    @available(iOS 3.2, *)       public class UILongPressGestureRecognizer : UIGestureRecognizer    // 旋转(两个手指进行旋转)    NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIRotationGestureRecognizer : UIGestureRecognizer    @available(iOS 3.2, *)      public class UIRotationGestureRecognizer : UIGestureRecognizer    // 捏合(两个手指,缩放手势)    NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIPinchGestureRecognizer : UIGestureRecognizer    @available(iOS 3.2, *)      public class UIPinchGestureRecognizer : UIGestureRecognizer    // 拖动(移动速度较慢)    NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIPanGestureRecognizer : UIGestureRecognizer    @available(iOS 3.2, *)       public class UIPanGestureRecognizer : UIGestureRecognizer    // 滑动(快速移动)    NS_CLASS_AVAILABLE_IOS(3_2)  @interface UISwipeGestureRecognizer : UIGestureRecognizer     @available(iOS 3.2, *)       public class UISwipeGestureRecognizer : UIGestureRecognizer

1、tapGesture 点击手势

1.1 tapGesture 的创建

  • Objective-C

    // 实例化点击手势对象    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self                                                                                  action:@selector(tapClick:)];    // 向 imageView 添加点击手势    [imageView addGestureRecognizer:tapGesture];
  • Swift

    // 实例化点击手势对象    let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self,                                                                    action: #selector(UiGestureRecognizer.tapClick(_:)))       // 向 imageView 添加点击手势    imageView?.addGestureRecognizer(tapGesture)

1.2 tapGesture 的设置

  • Objective-C

    // 设置点击次数    /*        默认为 1:单击,为 2 时为双击    */    singleTapGesture.numberOfTapsRequired = 1;    // 设置触摸点数    /*        默认为 1,单个手指触摸    */    singleTapGesture.numberOfTouchesRequired = 1;    // 单双击共存    /*        设置单击手势与双击手势共存,当没有检测到双击手势或检测双击手势失败时单击手势才有效    */    [singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];    // 获取点击的视图    /*        剪取点击的视图,附带点击手势一起剪取    */    UIView *tapView = tapGesture.view;    // 获取点击的图片    /*        复制点击的图片,附带点击手势一起复制    */    UIImage *tapImage = ((UIImageView *)tapGesture.view).image;
  • Swift

    // 设置点击次数    /*        默认为 1:单击,为 2 时为双击    */    singleTapGesture.numberOfTapsRequired = 1    // 设置触摸点数    /*        默认为 1,单个手指触摸    */    singleTapGesture.numberOfTouchesRequired = 1    // 单双击共存    /*        设置单击手势与双击手势共存,当没有检测到双击手势或检测双击手势失败时单击手势才有效    */    singleTapGesture.requireGestureRecognizerToFail(doubleTapGesture)    // 获取点击的视图    /*        剪取点击的视图,附带点击手势一起剪取    */    let tapView:UIView = tapGesture.view!    // 获取点击的图片    /*        复制点击的图片,附带点击手势一起复制    */    let tapImage:UIImage = (tapGesture.view! as! UIImageView).image!

1.3 自定义触摸响应事件处理

  • Objective-C

    - (void)tapClick:(UITapGestureRecognizer *)tapGesture {    }
  • Swift

    func tapClick(tapGesture:UITapGestureRecognizer) {    }

2、longPressGesture 长按手势

2.1 longPressGesture 的创建

  • Objective-C

    // 实例化长按手势对象    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self                                                                                                    action:@selector(longPressClick:)];    // 向 imageView 添加长按手势    [imageView addGestureRecognizer:longPressGesture];
  • Swift

    // 实例化长按手势对象    let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self,                                                                                      action: #selector(UiGestureRecognizer.longPressClick(_:)))    // 向 imageView 添加长按手势    imageView?.addGestureRecognizer(longPressGesture)

2.2 longPressGesture 的设置

  • Objective-C

    // 获取手势状态    UIGestureRecognizerState state = longPressGesture.state;    // 长按手势开始    if (longPressGesture.state == UIGestureRecognizerStateBegan) {    }    // 长按手势触发结束    if (longPressGesture.state == UIGestureRecognizerStateEnded) {    }
  • Swift

    // 获取手势状态    let state:UIGestureRecognizerState = longPressGesture.state    // 长按手势开始    if longPressGesture.state == UIGestureRecognizerState.Began {    }    // 长按手势触发结束    if longPressGesture.state == UIGestureRecognizerState.Ended {    }

2.3 自定义触摸响应事件处理

  • Objective-C

    - (void)longPressClick:(UILongPressGestureRecognizer *)longPressGesture {    }
  • Swift

    func longPressClick(longPressGesture:UILongPressGestureRecognizer) {    }

3、rotationGesture 旋转手势

3.1 rotationGesture 的创建

  • Objective-C

    // 实例化旋转手势对象    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self                                                                                                 action:@selector(rotationClick:)];    // 向 imageView 添加旋转手势    [imageView addGestureRecognizer:rotationGesture];
  • Swift

    // 实例化旋转手势对象    let rotationGesture:UIRotationGestureRecognizer = UIRotationGestureRecognizer(target: self,                                                                                   action: #selector(UiGestureRecognizer.rotationClick(_:)))    // 向 imageView 添加旋转手势    imageView?.addGestureRecognizer(rotationGesture)

3.2 rotationGesture 的设置

  • Objective-C

    // 获取旋转角度    /*        rotation 获取到的为弧度,1 度 = PI/180 弧度    */    CGFloat rotation = rotationGesture.rotation  * 180 * M_1_PI;    // 图片旋转    /*        lastRotation 为之前的角度    */    imageView.transform = CGAffineTransformMakeRotation(lastRotation + rotationGesture.rotation);    // 旋转手势触发结束    if (rotationGesture.state == UIGestureRecognizerStateEnded) {        lastRotation += rotationGesture.rotation;    }
  • Swift

    // 获取旋转角度    /*        rotation 获取到的为弧度,1 度 = PI/180 弧度    */    let rotation:CGFloat = rotationGesture.rotation  * 180 * CGFloat(M_1_PI)    // 图片旋转    /*        lastRotation 为之前的角度    */    imageView?.transform = CGAffineTransformMakeRotation(lastRotation + rotationGesture.rotation)    // 旋转手势触发结束    if rotationGesture.state == UIGestureRecognizerState.Ended {        lastRotation += rotationGesture.rotation    }

3.3 自定义触摸响应事件处理

  • Objective-C

    // 用模拟器时需按住 option 键    - (void)rotationClick:(UIRotationGestureRecognizer *)rotationGesture {    }
  • Swift

    // 用模拟器时需按住 option 键    func rotationClick(rotationGesture:UIRotationGestureRecognizer) {    }

4、pinchGesture 捏合手势

4.1 pinchGesture 的创建

  • Objective-C

    // 实例化捏合手势对象    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self                                                                                        action:@selector(pinchClick:)];    // 向 imageView 添加捏合手势    [imageView addGestureRecognizer:pinchGesture];
  • Swift

    // 实例化捏合手势对象    let pinchGesture:UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self,                                                                          action: #selector(UiGestureRecognizer.pinchClick(_:)))    // 向 imageView 添加捏合手势    imageView?.addGestureRecognizer(pinchGesture)

4.2 pinchGesture 的设置

  • Objective-C

    // 获取缩放倍数    CGFloat scale = pinchGesture.scale;    // 图片缩放    imageView.transform = CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale);    imageView.bounds = CGRectMake(0, 0, imageView.bounds.size.width * pinchGesture.scale,                                         imageView.bounds.size.height * pinchGesture.scale);    // 还原缩放倍数    [pinchGesture setScale:1];
  • Swift

    // 获取缩放倍数    let scale:CGFloat = pinchGesture.scale    // 图片缩放    imageView?.transform = CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale)    imageView?.bounds = CGRectMake(0, 0, imageView!.bounds.size.width * pinchGesture.scale,                                          imageView!.bounds.size.height * pinchGesture.scale)    // 还原缩放倍数    pinchGesture.scale = 1

4.3 自定义触摸响应事件处理

  • Objective-C

    // 用模拟器时需按住 option 键    - (void)pinchClick:(UIPinchGestureRecognizer *)pinchGesture {    }
  • Swift

    // 用模拟器时需按住 option 键    func pinchClick(pinchGesture:UIPinchGestureRecognizer) {    }

5、panGesture 拖动手势

5.1 panGesture 的创建

  • Objective-C

    // 实例化拖拽手势对象    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self                                                                                  action:@selector(panClick:)];    // 向 imageView 添加拖拽手势    [imageView addGestureRecognizer:panGesture];
  • Swift

    // 实例化拖拽手势对象    let panGesture:UIPanGestureRecognizer = UIPanGestureRecognizer(target: self,                                                                    action: #selector(UiGestureRecognizer.panClick(_:)))    // 向 imageView 添加拖拽手势    imageView?.addGestureRecognizer(panGesture)

5.2 panGesture 的设置

  • Objective-C

    // 获取手势位置    CGPoint currentPoint = [panGesture locationInView:self.view];    // 图片移动    imageView.center = currentPoint;
  • Swift

    // 获取手势位置    let currentPoint:CGPoint = panGesture.locationInView(self.view)    // 图片移动    imageView?.center = currentPoint

5.3 自定义触摸响应事件处理

  • Objective-C

    - (void)panClick:(UIPanGestureRecognizer *)panGesture {    }
  • Swift

    func panClick(panGesture:UIPanGestureRecognizer) {    }

6、swipeGesture 滑动手势

6.1 swipeGesture 的创建

  • Objective-C

    // 实例化滑动手势对象    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self                                                                                        action:@selector(swipeClick:)];    // 设置滑动方向,默认为 0:向右滑动    swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;    // 向 imageView 添加拖拽手势    [imageView addGestureRecognizer:swipeGesture];
  • Swift

    // 实例化滑动手势对象    let swipeGesture:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self,                                                                          action: #selector(UiGestureRecognizer.swipeClick(_:)))    // 设置滑动方向,默认为 0:向右滑动    swipeGesture.direction = [.Left, .Right]    // 向 imageView 添加拖拽手势    imageView?.addGestureRecognizer(swipeGesture)

6.2 swipeGesture 的设置

  • Objective-C

    // 获取滑动方向    UISwipeGestureRecognizerDirection direction = swipeGesture.direction;
  • Swift

    // 获取滑动方向    let direction:UISwipeGestureRecognizerDirection = swipeGesture.direction

6.3 自定义触摸响应事件处理

  • Objective-C

    - (void)swipeClick:(UISwipeGestureRecognizer *)swipeGesture {    }
  • Swift

    func swipeClick(swipeGesture:UISwipeGestureRecognizer) {    }

转载地址:http://xcylx.baihongyu.com/

你可能感兴趣的文章
Python、大数据、人工智能、机器学习资料分享(不定期更新)
查看>>
win7 安装mac
查看>>
不知道如何设定高度
查看>>
小议数据加密解密
查看>>
nagios配置文件详解
查看>>
wireshark
查看>>
深入查询表达式
查看>>
MySQL数据库优化、架构
查看>>
克隆虚拟机
查看>>
列表、元组、字典深入学习
查看>>
网上多功能视频会议系统是即时通讯未来的主流
查看>>
SSH整合cxf 发布web Service
查看>>
iBatis 简单介绍及基础入门
查看>>
shell 用telnet检查服务端口是否打开 【高效】
查看>>
mime导致zabbix web页面css样式不能显示的问题
查看>>
LAMP学习
查看>>
一夫三妻!全家福曝光 合作写书"三个人的爱"/组图
查看>>
查看 SELinux状态及关闭SELinux
查看>>
我的友情链接
查看>>
linux 修改xt_recent参数 ip_list_tot ip_pkt_list_tot
查看>>