我来自macOS / Cocoa&Mouse Events,我试图抓住这些“手指”(我自己的名字)活动
我的问题是:
当一个“手指”事件发生在UIView
(让我们称之为MyView
)时,它什么时候作为Gesture
发送到UIGestureRecognizer
上的MyView
,什么时候作为touchesBegan/touchesMoved/touchesEnded
发送到MyView
我搜索了所有可能的问题,我能想到的,并且真的只找到了一些不错的资料,但没有任何东西可以解答我正在寻找的东西
touchesBegan, touchesEnded, touchesMoved for moving UIView
UIGestureRecognizers vs touchesBegan/touchesMoved/touchesEnded (accuracy)
我现在最好的猜测是touchBegan / touchMoved / touchEnded和手势识别器之间的区别取决于手指的速度?
因此,如果你点击并慢慢移动,底层的UIView
会收到touchMoved
事件。如果你快速点击并拖动,会创建一个手势并传递给底层UIView
的GestureRecognizer
我目前的猜测是,当手指触及时,事件runloop检测到这个手指,然后发射touchesBegan
。当你移动手指时,它会发射touchesMoved
。
但是,如果您的移动速度足够快,或者运行时认为您正在制作手势,则会创建一个手势并向UIGestureRecognizer
发送消息,而不是发送touchesMoved
我目前正在尝试测试这个假设,但它非常繁琐,而且我没有一个非常好的示例项目可以测试,所以我想如果可能的话,我会给出一些见解。如果我自己弄明白的话,我会报告回来
它很复杂(或可能),但基本规则很简单。 [有关其他详细信息,请参阅my book。]
手指是UITouch,包裹在UIEvent中以便传送。交付进度触摸开始,触摸移动,触摸移动...触摸结束/取消,此时手指不再存在。
当出现触摸(手指)时,初始UITouch / UIEvent(触摸开始)被发送到视图及其手势识别器以及视图层次结构上方的任何手势识别器。这样,触摸正常地传递到视图,并且同时姿势识别器可以考虑姿势。
这反复发生(触摸移动)直到触摸被提起(触摸结束)或者一个手势识别器识别。在后一种情况下,所有其他g.r.s都被迫失败,触摸被取消到视图,只有识别g.r.在他们继续进行时获得其余的接触。