关于触摸

事件分发

所有触摸(Event、手势、Button) 的事件分发流程都是一样的。都是根据HitTest 方法找到这个视图

事件响应

所有触摸(Event、手势、Button) 的事件响应流程也是一样的。根据事件分发找到对应的View 后, 会尝试让这个View处理事件(UIControl的各种事件、UIGestureRecognizer等),若无法处理,则沿着响应链一步步向上寻找。
一、默认情况下, 识别一个触摸事件时,手势识别优先于 UIResponder 响应链式机制,具体体现为:
1、手势识别开始、变化的过程,gestureRecognizertouchesBegan touchesMoved同时处理响应事件。因为手势的delaysTouchesBegan属性默认为NOdelaysTouchesEnded默认是YES
2、只有在gestureRecognizer 判定失败的时候(比如一个tapGestureRecognizer遇到一个longPressGestureRecognizer手势)系统才会触发 UIResponder 响应链式中的touchesEnded,否则,会触发touchesCancelled

二、UIButton 与 触摸
在iOS6及更高的版本中,默认控制操作可防止重复的手势识别行为。例如,按钮的默认操作是单击。如有有一个单击手势识别器附加到按钮的父视图,并且用户点击了按钮,则按钮的动作方法接收触摸事件而不是手势识别器。这仅适用于与控件的默认操作重叠的手势识别。

参考文档

https://blog.gocy.tech/2016/11/19/iOS-touch-handling/
https://www.jianshu.com/p/53e03e558cbd

你可能感兴趣的:(关于触摸)