如何解决如果我们设置手势识别器依赖项 A 要求 B 失败,是否意味着识别器 A 在 B 失败之前不会收到事件?
https://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate/1624229-gesturerecognizer
例如,如果我设置手势识别器的委托 A
并在 true
是手势识别器 otherGestureRecognizer
时返回 B
。
optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool
这是否意味着手势识别器 A
在识别器 touchBegan
失败之前甚至不会收到 touchMoved
、touchEnded
或 B
之类的事件?还是还是照常运行,只是A的recognized
的结果只有在B
失败时才传递?
解决方法
即使一个手势识别器需要另一个手势识别器失败,它仍可能在手势被识别之前接收到触摸事件(例如 touchesBegan
、touchesMoved
等)。
话虽如此,手势识别器的想法是将我们从这些预先识别的触摸事件中抽象出来。大多数时候,我们使用现有的、具体的手势识别器(例如 UITapGestureRecognizer
、UILongPressGestureRecognizer
等)。因此,我们通常不处理底层的触摸事件,而是为识别手势后将调用的方法指定一个目标/选择器(或在 IB 中连接一个 @IBAction
)。只有在识别出手势后才会调用适当的动作方法,这意味着只会识别一个手势识别器。例如,如果 A 要求 B 失败,那么您将看到 A 的操作被调用,或 B 的操作被调用,但不会同时看到两者。
因此,如果实现我们自己的自定义手势识别器,我们将处理触摸事件(包括在手势被识别之前),但通常我们只会使用手势识别器的动作,并且会看到一个或另一个。
不用说,您也可以使用 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
指定可以识别同时进行的手势,而不是要求一个失败。因此,根据您应用的需求,可以有任何一种行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。