Swift:如何在计时器触发时阻止平移手势取消?

时间:2018-07-05 00:43:57

标签: swift timer uibutton uipangesturerecognizer

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

在ViewController中,我有一个倒计时Timer,它每秒触发一次,并用seconds -= 1更新视图中的标签(例如)。一切运转正常,应该没什么大不了的。

但是,我在同一视图中也有一个UIButton,可以拖动它。每当我的Timer()触发一次(每秒)时,就会发生此问题。我的PanGesture(拖动UIButton)被取消,UIButton被丢弃。

是否需要在UIButtonTimer上设置某些属性以防止这种情况发生?

非常感谢您的建议!

1 个答案:

答案 0 :(得分:0)

即使我无法发现其背后的原因,这也是我学到的东西:

  • 如果您位于UIPanGesture的中间(拖动UIView)并且尝试更新标签上的文本(即更新UI),则UIPanGesture将取消并调用(runtime error)。当我的计时器更新标签上的文字时,这种情况每秒发生一次。
  • 在我的应用程序中,即使我正在执行倒数计时,显示倒计时值的标签最初在我的视图中也被隐藏(.ended),并且只有当倒数标签在我的UIButton处四处拖动时才可见不是。
  • 因此,我的解决方法是仅在标签上的文本实际可见时对其进行更新。这样,虽然我的UIPanGesture可以拖动,但不会受到影响,但是当alpha = 0可见而我的UIButton不可见时,则可以根据需要更新label上的文本而不必担心关于拖动UIButton。

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