关于触摸
2019-07-25 本文已影响0人
una_sheng
事件分发
所有触摸(Event、手势、Button) 的事件分发流程都是一样的。都是根据HitTest 方法找到这个视图
事件响应
所有触摸(Event、手势、Button) 的事件响应流程也是一样的。根据事件分发找到对应的View 后, 会尝试让这个View处理事件(UIControl
的各种事件、UIGestureRecognizer
等),若无法处理,则沿着响应链一步步向上寻找。
一、默认情况下, 识别一个触摸事件时,手势识别优先于 UIResponder
响应链式机制,具体体现为:
1、手势识别开始、变化的过程,gestureRecognizer
与touchesBegan
touchesMoved
同时处理响应事件。因为手势的delaysTouchesBegan
属性默认为NO
, delaysTouchesEnded
默认是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