【问题标题】:UILongPressGestureRecognizer does not really work with numberOfTapsRequired and minimumPressDuration propertyUILongPressGestureRecognizer 不适用于 numberOfTapsRequired 和 minimumPressDuration 属性
【发布时间】:2018-10-22 15:51:52
【问题描述】:

这是我的代码:

@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 秒,“长按”也不会再打印出来了。

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

提前致谢!

【问题讨论】:

    标签: ios swift uilongpressgesturerecogni


    【解决方案1】:

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

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

    编辑回答评论:

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

    我无法评论 numberOfTaps 属性,因为我从未使用过它。

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

    【讨论】:

    • 非常感谢您的回复。但即使我以编程方式重新创建了识别器并删除了 Interface Builder 中内置的识别器,我仍然遇到了一些奇怪的问题: 1. 如果 minimumPressDuration 设置为任何值 >= 3,识别器将无法工作; 2.如果numberOfTapsRequired设置为1,实际上需要敲击2次。这是一个错误还是 swift 只是这样工作?
    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多