为什么 UILongPressGestureRecognizer 在 iOS 模拟器中工作但在 iPhone 中不工作

Why UILongPressGestureRecognizer work in iOS simulator but not work for iPhone

我正在尝试在自定义键盘的删除按钮中添加手势,以确保当它被长按时,系统将作为系统删除按钮工作,该按钮会连续执行 proxy.deleteBackward() 进行删除。

以下补充:

var deleteButtonTimer: NSTimer?

let deleteButtonLongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: "handleLongPressForDeleteButtonWithGestureRecognizer:")
deleteButton.addGestureRecognizer(deleteButtonLongPressGestureRecognizer)

然后:

func handleLongPressForDeleteButtonWithGestureRecognizer(gestureRecognizer: UILongPressGestureRecognizer) {
    switch gestureRecognizer.state {
    case .Began:
        print("long press confirmed")
        if deleteButtonTimer == nil {
            deleteButtonTimer = NSTimer(timeInterval: 0.1, target: self, selector: "handleDeleteButtonTimerTick:", userInfo: nil, repeats: true)
            deleteButtonTimer!.tolerance = 0.01
            NSRunLoop.mainRunLoop().addTimer(deleteButtonTimer!, forMode: NSDefaultRunLoopMode)
        }
    default:
        print("timer not added as expected")
        deleteButtonTimer?.invalidate()
        deleteButtonTimer = nil
    }
}

它在 iOS 模拟器中完美运行:当长按 Delete 按钮时 "long press confirmed" 只打印一次并且代码 addTimer() 被执行并按预期连续执行删除。但是当我在iPhone中运行时,系统打印一次"long press confirmed",然后连续打印"timer not added as expected"。似乎 NSRunLoop.mainRunLoop().addTimer(deleteButtonTimer!, forMode: NSDefaultRunLoopMode) 没有被执行。

为什么 UILongPressGestureRecognizer 在 iOS 模拟器中工作但在 iPhone 中不工作。

顺便说一句,我正在使用 Xcode 7.2 和 iPhone6S iOS9.2.

当你陷入default的情况下,gestureRecognizer.state的价值是多少?

最有可能的是,在 phone 上,您的手指正在轻微移动,导致手势识别器更改为状态 UIGestureRecognizerState.Changed。当发生这种情况时,您不想让您的计时器失效。