处理长按结束

时间:2013-01-16 18:39:18

标签: ios objective-c uiscrollview touch uigesturerecognizer

我有一个UILongPressGestureRecognizer附加到控制器的view。我想冻结一些计时器,直到用户握住他的手指。问题是我无法确定触摸事件何时结束。也许我应该在手势识别器的属性state上使用观察者?或者还有其他方法可以做到这一点?

在控制器的view上放置UIScrollView(实现分页图库),可以通过拖动(滑动)切换页面。还有一个UITapGestureRecognizer,也附加到控制器的view,它处理其他一些任务。

1 个答案:

答案 0 :(得分:24)

是的,您可以通过查看识别器的状态来完成此操作,但您不需要使用观察者。您应该在识别器触发时在手势识别器的委托中声明一个操作方法。只要识别器的状态发生变化,就会自动调用该方法。

您需要查找状态UIGestureRecognizerStateBegan以开始计时器,并且您需要查找状态UIGestureRecognizerStateEnded,UIGestureRecognizerStateFailed和UIGestureRecognizerStateCancelled来暂停计时器。

只需将您的手势与Interface Builder中的操作联系起来。

-(IBAction)longPressBegan:(UILongPressGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        // Long press detected, start the timer
    }
    else
    {
        if (recognizer.state == UIGestureRecognizerStateCancelled
            || recognizer.state == UIGestureRecognizerStateFailed
            || recognizer.state == UIGestureRecognizerStateEnded)
        {
            // Long press ended, stop the timer
        }
    }
}