我来自macOS / Cocoa和Mouse Events,我想了解一下这些“ Finger”事件(我自己的名字)
我的问题是:
当UIView
上发生“手指”事件(我们叫MyView
)时,何时将其作为Gesture
发送到{{ 1}},何时将其作为UIGestureRecognizer
发送到MyView
我已经搜索了所有可能想到的查询,实际上只找到了一些不错的信息来源,但没有任何内容可以准确地回答我的需求
touchesBegan, touchesEnded, touchesMoved for moving UIView
UIGestureRecognizers vs touchesBegan/touchesMoved/touchesEnded (accuracy)
我现在最好的猜测是 touchBegan / touchMoved / touchEnded 与手势识别器之间的差异取决于手指的速度吗?
因此,如果您点击并缓慢移动,则底层touchesBegan/touchesMoved/touchesEnded
会收到MyView
事件。如果您快速点击并拖动,将创建一个手势并将其传递到基础UIView
我目前的猜测是,当手指着地时,事件运行循环会检测到该手指,并触发touchMoved
。当您移动手指时,会触发UIView
。
但是,如果您移动得足够快,或者以运行时认为您正在做出手势的方式,它会创建一个手势并将消息发送到touchesBegan
,而不是发送touchesMoved
我目前正在尝试验证这个假设,但是这很繁琐,并且我没有一个非常好的示例项目可以进行测试,因此我认为如果可能的话,我会众包一些见识。如果我自己也解决的话,我会报告。
答案 0 :(得分:1)
这很复杂(或者可以是),但是基本规则很简单。 [有关更多详细信息,请参见my book。]
手指是包裹在UIEvent中以便传递的UITouch。交付过程开始触摸,触摸移动,触摸移动...触摸结束/取消,此时手指不再在那里。
当出现触摸(手指)时,会将初始UITouch / UIEvent(开始触摸)发送到视图和的 以及其手势识别器和所有手势识别器。这样,触摸就可以正常传递到视图,并且手势识别器可以同时考虑手势。
这种情况不断重复发生(触摸已移动),直到触摸被解除(触摸结束)或手势识别器之一可以识别为止。在后一种情况下,所有其他g.r.s被迫失败,触摸被取消,只有识别的g.r.被清除。在进行过程中得到其余的触摸。