如果我们设置手势识别器依赖 A 要求 B 失败,是否意味着识别器 A 在 B 失败之前不会接收事件?

If we set gesture recognizer dependency A require failure of B, does it mean recognizer A won't receive event before B fail?

https://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate/1624229-gesturerecognizer 例如,如果我设置手势识别器的委托 A 和 return trueotherGestureRecognizer 是手势识别器 B.

optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, 
         shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool

这是否意味着手势识别器 A 甚至不会接收 touchBegantouchMovedtouchEnded 等事件,直到识别器 B 失败?或者它仍然会正常运行,只是A的recognized的结果仅在B失败时传递?

即使一个手势识别器要求另一个手势识别器失败,它仍可能在识别手势之前接收到触摸事件(例如 touchesBegantouchesMoved 等)。

话虽如此,手势识别器的想法是将我们从这些预先识别的触摸事件中抽象出来。大多数时候,我们使用现有的、具体的手势识别器(例如 UITapGestureRecognizerUILongPressGestureRecognizer 等)。因此,我们通常不处理底层触摸事件,而是为识别手势后将调用的方法指定一个 target/selector(或在 IB 中连接一个 @IBAction)。只有在手势被识别后才会调用适当的动作方法,这意味着只会识别一个手势识别器。例如,如果 A 要求 B 失败,那么您将看到调用 A 的操作或 B 的操作,但不会同时看到两者。

因此,如果实现我们自己的自定义手势识别器,我们将处理触摸事件(包括在识别手势之前),但通常我们只会使用手势识别器的动作,并且会看到一个或另一个。

不用说,您可以选择指定可以识别同步手势,而不是要求一个失败,gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)。因此,根据您的应用程序的需要,可以有任何一种行为。