为什么 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
。当发生这种情况时,您不想让您的计时器失效。
我正在尝试在自定义键盘的删除按钮中添加手势,以确保当它被长按时,系统将作为系统删除按钮工作,该按钮会连续执行 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
。当发生这种情况时,您不想让您的计时器失效。