我正在尝试将手势添加到自定义键盘的“删除”按钮中以确保何时长按系统将作为系统删除按钮工作,该按钮会持续执行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。
答案 0 :(得分:0)
当您遇到gestureRecognizer.state
案件时,default
的价值是多少?
最有可能的是,在手机上,您的手指略微移动,导致手势识别器更改为状态UIGestureRecognizerState.Changed
。当发生这种情况时,你不想让你的计时器失效。