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

时间:2015-12-29 04:43:59

标签: ios iphone swift button simulator

我正在尝试将手势添加到自定义键盘的“删除”按钮中以确保何时长按系统将作为系统删除按钮工作,该按钮会持续执行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模拟器中完美运行:长按“删除”按钮"长按确认"只打印一次并执行代码addTimer()并按预期连续执行删除。但是当我在iPhone上运行时,系统打印"长按确认"一次然后连续打印"计时器未按预期添加"。似乎没有执行NSRunLoop.mainRunLoop()。addTimer(deleteButtonTimer!,forMode:NSDefaultRunLoopMode)。

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

BTW我正在使用Xcode 7.2和iPhone6S iOS9.2。

1 个答案:

答案 0 :(得分:0)

当您遇到gestureRecognizer.state案件时,default的价值是多少?

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