我试图仅在用户开始平移 0.3 秒时才显示按钮,以避免在某些情况下立即显示按钮(例如,如果手指没有一起抬起,则在缩放结束时)。为此,我在平移手势处于.began
状态时启动 Timer,然后.changed
仅在 timer 变为 nil 时才显示处于状态的按钮。
但是,直到我抬起手指(即手势是.ended
),我的计时器才开始运行。我认为这可能与运行循环和手势占用主线程有关?任何解决方法将不胜感激。谢谢!
var timer: Timer?
func handler(_ sender: UIPanGestureRecognizer) {
switch sender.state {
case .began:
if timer == nil {
// I just want timer to invalidate itself after firing, so nothing to execute
self.timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: false, block: { _ in })
case .changed:
if button.isHidden && timer == nil {
button.isHidden = false
}
case .ended:
button.isHidden = true
timer?.invalidate()
timer = nil
default:
return
}
}