捕获组合的按钮按下和平移手势

Posted

技术标签:

【中文标题】捕获组合的按钮按下和平移手势【英文标题】:Capturing combined button press and pan gesture 【发布时间】:2013-07-31 11:22:20 【问题描述】:

我需要在 ios 上捕获以下触摸事件并对其进行解释:

    手指在UIButton 内触地(保持向下) 手指 B 在屏幕上的其他位置执行平移手势,提供连续回调。 (我打算使用UIPanGestureRecognizer 来实现这个功能)。 在同一个UIButton内进行手指修饰

本质上,按住UIButton 会使应用程序进入一种特殊模式,该模式仅在按住按钮时持续。在此期间执行的平移手势与未按下按钮时执行的操作不同。

到目前为止我已经尝试过:

在我的UIViewController 子类中将UIButton Touch Down 和Touch Up Inside 连接到IBActions。我也有 遇到的问题:当按下按钮时另一个手指在屏幕上发生另一个手势时,不会调用 Touch Up Inside 操作。这是因为原来的触摸被取消了。 将UITapGestureRecognizer 附加到UIButton 遇到的问题:这只在手指离开屏幕时触发,因此在按下按钮时它不能用于将应用程序置于特殊模式。

我需要使用UIButton 而不是UIView,以便按钮在按下时具有正确的突出显示行为。

考虑到我目前遇到的问题,最好的整体方法是什么?

【问题讨论】:

【参考方案1】:

在“按钮”上使用具有较短 minimumPressDuration 的 UILongPressGestureRecognizer http://developer.apple.com/library/ios/#documentation/uikit/reference/UILongPressGestureRecognizer_Class/Reference/Reference.html#//apple_ref/occ/cl/UILongPressGestureRecognizer

重要的是使用手势识别器委托来确保gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:为这些识别器返回YES。然后,当您的 UIPanGestureRecognizer 调用事件处理程序时,您可以检查 UILongPressGestureRecognizer 的状态,如果未按下按钮,则忽略平移手势。

【讨论】:

如果您将“另一个想法”位移到单独的答案中,我会接受它 - 做得很好 - 谢谢! :) 刚刚删除了旧想法。 :P 祝你的项目好运:)

以上是关于捕获组合的按钮按下和平移手势的主要内容,如果未能解决你的问题,请参考以下文章

当我添加平移手势识别器时,我的按钮不会保持突出显示?

Pan Segue 调用 viewDidLoad 循环

SCNAction 完成处理程序等待手势执行

c#多个按钮执行同一类事件-按钮按下和弹起

如何区分 Siri Remote 按钮按下和游戏手柄按钮按下?

导航栏中的 1 个按钮未显示悬停、按下和活动状态