"finger" 事件何时作为手势发送到 UIGestureRecognizer vs touchesBegan/touchesMoved/touchesEnded 到 UIView

When do "finger" events get sent as Gestures to UIGestureRecognizer vs touchesBegan/touchesMoved/touchesEnded to UIView

我来自 macOS/Cocoa 和鼠标事件,我正在尝试掌握这些 "Finger"(我自己的名字)事件


我的问题是:

当 "Finger" 事件在 UIView 上发生时(我们称之为 MyView),它何时作为 Gesture 发送到 UIGestureRecognizerMyView 上,它什么时候作为 touchesBegan/touchesMoved/touchesEnded 发送到 MyView


我已经搜索了所有我能想到的可能的查询,实际上只找到了一些不错的来源,但没有一个能准确回答我正在寻找的内容

touchesBegan, touchesEnded, touchesMoved for moving UIView

UIGestureRecognizers vs touchesBegan/touchesMoved/touchesEnded (accuracy)

我现在最好的猜测是 touchBegan/touchMoved/touchEnded 和手势识别器之间的区别取决于手指的速度?

因此,如果您点击并缓慢移动,底层 UIView 会收到 touchMoved 事件。如果您快速点击并拖动,则会创建一个手势并将其传递给底层 UIView

的 GestureRecognizer

我目前的猜测是,当手指触地时,事件运行循环检测到这个手指,并触发 touchesBegan。当您四处移动手指时,它会触发 touchesMoved.
但是,如果您移动得足够快,或者运行时认为您正在做手势,它会创建一个手势并向 UIGestureRecognizer 发送消息,而不是发送 touchesMoved

我目前正在尝试验证这个假设,但它非常乏味,而且我没有真正好的示例项目来测试,所以我想如果可能的话我会众包一些见解。如果我自己也弄明白了,我会报告的

它很复杂(或者可能很复杂),但是 基本 规则很简单。 [有关更多详细信息,请参阅 my book。]

手指是一个 UITouch,它被包裹在一个 UIEvent 中用于传递。交付收益触摸开始,触摸移动,触摸移动......触摸结束/取消,此时手指不再存在。

当触摸(手指)出现时,初始的 UITouch / UIEvent(触摸开始)被发送到 both 视图 and 它的手势识别器 视图层次结构中更高层的任何手势识别器。这样一来,触摸就会像往常一样传送到视图,同时手势识别器可以考虑手势。

这一直重复发生(触摸移动),直到触摸被解除(触摸结束)或其中一个手势识别器识别出来。在后一种情况下,其他g.r.s都被强制失败,触摸被取消到视图,只有识别g.r。在他们继续进行时获得其余的接触。