如何在iOS 3.2以下版本实现长按手势功能

10

UILongPressGesture在iOS版本3.2及以上可用。但是我正在尝试开发最大兼容性的应用程序,因此针对iOS版本2.0。

请问有人可以指导我如何在iOS版本2.0中实现长按手势吗?


1
请注意,如果您将此应用提交到App Store,则无法支持iPhone OS 2.x。苹果公司现在接受的最低版本目标是3.0。 - Brad Larson
2个回答

18

对于单个手指,实现起来相当简单:在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的作用)。


5
我不得不使用[NSObject cancelPreviousPerformRequestsWithTarget:self] - nevan king

1

在您的视图中实现touches...方法。如果在touchesBegan:withEvent:touchesEnded:withEvent:之间经过了一定的时间,没有任何touchesMoved:withEvent:事件,则表示您进行了长按操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接