iOS - UIGestureRecognizer

简介: 前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UIGestureRecognizer : NSObject @available(iOS 3.2, *) public class UIGestureRecognizer : NSOb...

前言

    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) {
    
        }
目录
相关文章
|
iOS开发
如何使用iOS手势UIGestureRecognizer
如何使用iOS手势UIGestureRecognizer
107 0
|
iOS开发
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用(一)
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用
240 0
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用(一)
|
iOS开发
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用(二)
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用
359 0
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
98 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
61 1
|
2月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
3天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!