【问题标题】:Handle long press end手柄长按端
【发布时间】:2012-12-31 04:23:15
【问题描述】:

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

简介

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

【问题讨论】:

    标签: ios objective-c uiscrollview touch uigesturerecognizer


    【解决方案1】:

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

    您需要查找状态 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
            }
        }
    }
    

    【讨论】:

    • 正是我需要的。我不知道UILongPressGestureRecognizer 两次调用action:开始和结束。
    • 是的,但不仅仅是开始和结束。每次更新其状态时,它都会调用 action 方法。因此,例如,如果用户在长按的中间移动手指,则将使用状态 UIGestureRecognizerStateChanged 调用该方法。我们使用 switch 或 if 语句来处理我们感兴趣的状态,而忽略其余的。
    • 什么if (recognizer.state == UIGestureRecognizerStateChanged)?就我而言,我将它与UIGestureRecognizerStateBegan 一起使用,因为它在用户移动手指而不抬起手指时使用(即,如果他想将手指移开,看看它下面是什么......)
    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多