Swift:当定时器触发时,如何阻止平移手势取消?

Posted

技术标签:

【中文标题】Swift:当定时器触发时,如何阻止平移手势取消?【英文标题】:Swift: How Do I Stop A Pan Gesture from Cancelling When a Timer Fires? 【发布时间】:2018-07-05 00:43:57 【问题描述】:

这个问题很简短,我认为它不需要显示代码,但我想了解我的应用为什么会这样做。

在我的 ViewController 中,我有一个倒计时 Timer,它每秒触发一次,并使用 seconds -= 1 更新视图中的标签(例如)。一切都按应有的方式完美运行...没什么大不了的。

但是,我在同一个视图中也有一个 UIButton,我可以拖动它。每次我的Timer() 触发(每秒)时都会出现问题...我的 PanGesture(拖动 UIButton)被取消并且 UIButton 被丢弃。

我需要在UIButtonTimer 上设置某个属性以防止这种情况发生吗?

非常感谢您的建议!

【问题讨论】:

如果您可以向我们展示您的代码,它会更容易可视化。谢谢。 取消的原因不是因为 Timer ,您可以通过停止 Timer 来验证,如果没有它,手势是否可以正常工作? @ShauketSheikh 没错。如果我关闭计时器,我可能会继续在屏幕上拖动 UIButton 没问题。但是当计时器处于活动状态并且我拖动 UIButton 时,每秒(当计时器触发时)触摸被取消并且 UIButton 被放下......如果我触摸并再次开始拖动它,触发计时器会让我再次放下它.有什么想法吗? 你可以在单独的线程中尝试平移手势吗? 让我知道它是否有效.. 【参考方案1】:

即使我无法发现其背后的原因,以下是我所学到的:

如果您在 UIPanGesture 中间(拖动 UIView)并且您尝试更新标签上的文本(即更新 UI),您的 UIPanGesture 将取消并调用 .ended。当我的计时器更新标签上的文本时,这种情况每秒都会发生在我身上。 在我的应用程序中,显示倒计时值的标签最初在我的视图中是隐藏的 (alpha = 0),即使我正在对其执行文本更新,并且我要拖动的 UIButton 仅在我的倒计时标签不可见时才可见吨。 所以我的解决方法是仅在标签上的文本实际可见时才更新它。这样,当我可以拖动它时,我的 UIPanGesture 不会受到影响,但是当 label 变得可见而我的 UIButton 不可见时,我可以根据需要更新 label 上的文本,而无需担心拖动 UIButton周围。

我知道这是一个非常适合我的自定义修复程序,但如果有人知道导致问题的原因,请分享:)

【讨论】:

以上是关于Swift:当定时器触发时,如何阻止平移手势取消?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS Swift 中使用键盘平移手势处理文本输入视图移动

javaScript事件事件类型之触摸与手势事件

如何阻止按钮推翻拖动手势

如何检测哪个视图正在平移手势 Swift

将平移手势添加到 UICollectionView 单元 - IOS/Swift

UISwipeGestureRecognizer 被 UITapGestureRecognizer 阻止