3.6 iOS手势识别的状态和手势识别器幕后原理

作者: 刘2傻 | 来源:发表于2016-12-31 12:51 被阅读180次

2.2手势识别的状态和手势识别器幕后原理

(一)手势的状态

// 手势状态
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
    UIGestureRecognizerStatePossible,   // 尚未识别是何种手势操作(但可能已经触发了触摸事件),默认状态
    UIGestureRecognizerStateBegan,      // 手势已经开始,此时已经被识别,但是这个过程中可能发生变化,手势操作尚未完成
    UIGestureRecognizerStateChanged,    // 手势状态发生转变
    UIGestureRecognizerStateEnded,      // 手势识别操作完成(此时已经松开手指)
    UIGestureRecognizerStateCancelled,  // 手势被取消,恢复到Possible状态
    UIGestureRecognizerStateFailed,     // 手势识别失败,恢复到Possible状态
    UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手势识别完成,同UIGestureRecognizerStateEnded
};

(二)离散型手势识别器和连续型手势识别器之间的对比:

调用回调方法区别:

14636547400991.png
状态之间切换区别:
14636543727544.png
总结:离散型手势一旦识别就无法取消,而且只会调用一次手势操作事件(初始化手势时指定的回调方法)。而连续型手势会多次调用手势操作事件,而且在连续手势识别后可以取消手势.两者调用回调方法的次数是不同的.

(三)手势识别器幕后原理
手势识别器是在正常的响应者链条之上.默认情况下,UIWindow首先将触摸事件发送给手势识别器,只有手势识别器无法处理触摸事件时,事件才会被转发给响应者链条.
应用程序判断手势是否别识别的过程:
手势识别器进入UIGestureRecognizerStatePossible状态:
离散型手势:

    1>手势识别器将判断手势处于`UIGestureRecognizerStateRecognized`
      还是`UIGestureRecognizerStateFailed`状态.
    2>如果是`UIGestureRecognizerStateRecognized`状态,手势识别器将处理事件,
      并调用指定的回调方法.
      如果是`UIGestureRecognizerStateFailed`状态,手识别器将把触摸事件装发
      给`响应者链条`.

连续型手势:

    1>手势识别器将判断手势处于`UIGestureRecognizerStateBegan`
      还是`UIGestureRecognizerStateFailed`状态.
    2>如果手势处于UIGestureRecognizerStateBegan状态,手势识别器将处理事件,并
      调用回调方法.然后当手势发生变化时,都将进入`UIGestureRecognizerStateChanged`
      状态,并调用指定的回调方法.这个过程不断重复,直到触摸结束并进入`UIGestureRecognizerStateEnded`
      状态.如果触摸方式不再符合预期手势,将进入`UIGestureRecognizerStateCancelled`
      状态.
      如果手势处于`UIGestureRecognizerStateFailed`状态,手势识别器将把触摸事件装发
      给`响应者链条`.

经验谈:

手势从状态UIGestureRecognizerStatePossible变化到状态UIGestureRecognizerStateFailed所需的事件可能很长.如果手势识别器处理触摸事件的速度慢的莫名其妙,最好在手势处理方法中输出相关的状态,这样就可以清楚地知道手势状态的变换情况,就可以确定延迟出现在什么地方.

相关文章

  • 3.6 iOS手势识别的状态和手势识别器幕后原理

    2.2手势识别的状态和手势识别器幕后原理 (一)手势的状态 (二)离散型手势识别器和连续型手势识别器之间的对比: ...

  • 手势识别器的使用

    1.手势识别器的常用代理 2.手势识别的状态 3.点按手势 4.长按手势 5.轻扫手势 6.旋转手势 7.捏合手势...

  • ios 事件传递和响应

    史上最详细的iOS之事件的传递和响应机制-原理篇iOS触摸事件传递响应之被忽视的手势识别器工作原理手势事件中can...

  • iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

  • iOS手势识别器

    1.手势识别器 1.手势识别器是iOS中比较抽象的一个类,用于识别一个手势,所谓手势:有规律的触摸。是对触摸事件做...

  • iOS事件处理指南-手势识别器(译)

    手势识别器(Gesture Recognizers) 手势识别器将低级别的事件处理代码转换成高级别的动作。它们是你...

  • Gesture手势

    手势识别器 手势识别器是对触摸事件做了封装,我们无需自己去判断某个手势是否触发,手势识别器本身起到了识别作用,我们...

  • 手势——UIGestureRecognizer

    一、简介 UIGestureRecognizer是具体手势识别器的基类。 手势识别器对象(或简单地说是手势识别器)...

  • UIGestureRecognizer

    什么是手势识别器? 手势识别器就是对触摸事件做了封装,我们不需要判断某个手势是否触发,手势识别器本身起到了识别作用...

  • iOS 手势操作 geekband

    什么是触摸手势 触摸手势的原理 UIControl 离散与断续 手势识别状态 小案例 新建文件在storyboar...

网友评论

    本文标题:3.6 iOS手势识别的状态和手势识别器幕后原理

    本文链接:https://www.haomeiwen.com/subject/yqwvvttx.html