首页 > 解决方案 > UILongPressGestureRecognizer 不适用于 numberOfTapsRequired 和 minimumPressDuration 属性

问题描述

这是我的代码:

@IBAction func SOSLongPressed(_ sender: UILongPressGestureRecognizer) {
    //sender.numberOfTapsRequired = 2
    sender.minimumPressDuration = 3

    if sender.state == .began {
        print("long pressed")
    }
}

问题:

  1. “长按”在我的应用程序启动后第一次开始按下视图后大约 0.5 秒(而不是 3 秒)打印。换句话说,应用程序启动后,UILongPressGestureRecognizer 在第 2 次或第 3 次(以此类推)时正常工作,即 3 秒后打印“长按”。但不是第一次。

  2. 如果我取消注释该sender.numberOfTapsRequired = 2行,“长按”也会在 0.5 秒左右打印,即使只有 1 次点击并按住。之后,即使我双击并按住 3 秒钟,“长按”也不会再打印出来了。

不知道为什么会这样,希望有人可以帮助我。

提前致谢!

标签: iosswiftuilongpressgesturerecogni

解决方案


只有在第一次被识别后,您才更新识别器的值。

您应该在创建识别器后立即设置这些属性的值。如果它是在 Interface Builder 中创建的,您应该也可以在那里设置值。

编辑以回答评论:

尝试将容差 ( allowableMovement) 增加到 30 或 50。您的手指可能会在这 3 秒内移动到足以使识别器失败。

我无法评论该numberOfTaps物业,因为我从未使用过它。

PS。您可以从 Interface Builder 或以编程方式修改所有这些设置,这不会产生影响。不同之处在于您在正确的时间设置属性,而不是在识别手势之后。


推荐阅读