UILongPressGesture在iOS版本3.2及以上可用。但是我正在尝试开发最大兼容性的应用程序,因此针对iOS版本2.0。
请问有人可以指导我如何在iOS版本2.0中实现长按手势吗?
UILongPressGesture在iOS版本3.2及以上可用。但是我正在尝试开发最大兼容性的应用程序,因此针对iOS版本2.0。
请问有人可以指导我如何在iOS版本2.0中实现长按手势吗?
对于单个手指,实现起来相当简单:在touchesBegan
方法中启动一个计时器,并在计时器触发后触发一个操作。如果在计时器触发前接收到touchesEnded
事件,则取消计时器。这里是一个使用performSelector:withObject:afterDelay:
方法的实现示例。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self performSelector:@selector(fireLongPress)
withObject:nil
afterDelay:LONG_PRESS_THRESHOLD];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
- (void)fireLongPress {
// do what you want to do
}
如果手指移动太远,您可能还需要停止计时器。
使用多点触控时,情况会变得更加复杂。您需要跟踪每个触摸点,并决定在一个手指已经按了足够长时间而另一个手指尚未按下时该怎么做(或者弄清楚UILongPressGestureRecognizer
的作用)。
[NSObject cancelPreviousPerformRequestsWithTarget:self]
。 - nevan king在您的视图中实现touches...
方法。如果在touchesBegan:withEvent:
和touchesEnded:withEvent:
之间经过了一定的时间,没有任何touchesMoved:withEvent:
事件,则表示您进行了长按操作。