我正在创建一个支持多个手势的视图,在某些情况下,我不希望同时识别两个手势。据我所知,这意味着要覆盖委托中的gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
。代码可能看起来像:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer == swipeGestureRecognizer && otherGestureRecognizer == panGestureRecognizer {
return false
}
return true
}
我需要同时支持这两对识别器吗?也就是说,基于这个例子,我是否需要为gestureRecognizer == swipeGestureRecognizer && otherGestureRecognizer == panGestureRecognizer
和gestureRecognizer == panGestureRecognizer && otherGestureRecognizer == swipeGestureRecognizer
添加if?关于iOS处理多种手势的官方文档尚不清楚。
我使用Xcode 13.2.1、Swift 5和iOS SDK 15.2版(19C51(进行开发。
不一定。在大多数情况下,您甚至可能不需要为两个手势识别器都指定一个代理。
如果两个手势识别器都有代表,则会将此消息发送给他们,以防他们都需要做出决定并对此事有发言权;但如果他们没有,那么要么不要给他们两个委托,要么,如果你给了他们两个授权,不要麻烦在两者中都实现这个方法——除非,正如我所说,他们都有重要的选择要做。
还要注意,false
是默认值,因此唯一重要的返回值是true
,它会使进程短路。一旦代表为一对返回true
,问题就解决了,即使两个手势识别器都有代表,如果第一个返回true
,第二个甚至不会为这对查询(相反(。