为啥以及如何 UIPanGestureRecognizer 使 UISwipeGestureRecognizer 静音,而 UITapGestureRecognizers 默认情况下不相互静音?

Posted

技术标签:

【中文标题】为啥以及如何 UIPanGestureRecognizer 使 UISwipeGestureRecognizer 静音,而 UITapGestureRecognizers 默认情况下不相互静音?【英文标题】:Why and how does UIPanGestureRecognizer mute UISwipeGestureRecognizer while UITapGestureRecognizers don't mute each other by default?为什么以及如何 UIPanGestureRecognizer 使 UISwipeGestureRecognizer 静音,而 UITapGestureRecognizers 默认情况下不相互静音? 【发布时间】:2019-01-28 14:11:56 【问题描述】:

在文档Coordinating Multiple Gesture Recognizers 中,它说:

UIKit 通常一次只允许识别一个手势 单一视图。 ...例如,在同时包含平移和滑动手势识别器的视图中,永远不会识别滑动

话虽如此,但也有一些例外。例如,在有两个UITapGestureRecognizers 的视图中,both will get fired 的操作。

UIGestureRecognizerDelegate 方法 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)外部发挥作用。但是系统内置的手势识别器,例如UITapGestureRecognizer,如何在内部决定是否与其他识别器一起工作?或者,连续手势识别器离散手势识别器在行为方面有什么区别吗?

【问题讨论】:

嗨!您是否尝试查看使用此委托时的行为:developer.apple.com/documentation/uikit/uigesturerecognizer/…(例如,如果平移失败,请滑动) @RenataFaria 很抱歉一开始没有仔细阅读您的评论!我认为这是代表文档的链接。我认为您建议的方法是答案的关键。谢谢! 【参考方案1】:

在决策过程中有两个有趣的UIGestureRecognizer方法,其中手势识别器可能会被“阻止”:

canPrevent(_:) canBePrevented(by:)

通过调试UITapGestureRecognizerUISwipeGestureRecognizerUIPanGestureRecognizer的子类,我发现:

“双击”识别器会阻止“单击”识别器,但反之则不行 平移识别器将阻止滑动识别器

当有多个手势识别器时,默认情况下,第一个识别其手势的识别器会将其他识别器渲染为.failed

这解释了观察到的行为。

【讨论】:

以上是关于为啥以及如何 UIPanGestureRecognizer 使 UISwipeGestureRecognizer 静音,而 UITapGestureRecognizers 默认情况下不相互静音?的主要内容,如果未能解决你的问题,请参考以下文章

超过承诺的渠道。为啥以及如何使用?

TensorFlow:如何以及为啥要使用 SavedModel

为啥 UserManager.CreateIdentityAsync() 正在寻找 IdentityRole 以及如何解决?

为啥以及如何在脚本标签中免除同源策略?

这个功能(季节)运行时间太长,为啥?以及如何改进代码?

为啥选择不同存储的'As T'以及如何别名?