首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时解决UITapGestureRecognizer和UILongPressGestureRecognizer问题,用手指触地触发UIGestureRecognizer.State.began

同时解决UITapGestureRecognizer和UILongPressGestureRecognizer问题,用手指触地触发UIGestureRecognizer.State.began
EN

Stack Overflow用户
提问于 2019-08-15 14:35:15
回答 1查看 1.5K关注 0票数 0

首先,所有已经回答的问题都帮不了我

  1. 斯威夫特:长按压手势识别器-检测水龙头和长按压
  2. 在表视图中同时使用点击手势和长按压
  3. 长按压手势识别器只有当手指被提起时才会发射
  4. 诸若此类

代码几乎可以正常工作,除了一件事:只有当我把手指从屏幕上抬起时,长按压手势才会被调用。但我需要像Instagram这样的行为(当你可以在故事之间切换,用手指暂停某个故事)。

我的问题更多是关于当用户触摸手指时如何强迫UILongPressGesture开火,而不是up.

这是我的密码:

代码语言:javascript
复制
private func setupTapGestures() {
    tapRecognizer = UITapGestureRecognizer()
    tapRecognizer?.addTarget(self, action: #selector(handleTapGesture(_:)))
    tapRecognizer?.delegate = self
    view.addGestureRecognizer(tapRecognizer!)

    longPressRecognizer = UILongPressGestureRecognizer()
    longPressRecognizer?.addTarget(self, action: #selector(handleLongPressGesture(_:)))
    longPressRecognizer?.minimumPressDuration = 0.1
    longPressRecognizer?.delegate = self
    view.addGestureRecognizer(longPressRecognizer!)
}

@objc func handleTapGesture(_ gestureRecognizer: UIGestureRecognizer) {
    let width = view.frame.width
    let point = gestureRecognizer.location(in: view)
    viewModel?.tapAction(viewWidth: width, tapPoint: point)
    Swift.print("Tap gesture")
}

@objc func handleLongPressGesture(_ gestureRecognizer: UILongPressGestureRecognizer) {
    if gestureRecognizer.state == .began {
        Swift.print("Began")
    } else if gestureRecognizer.state == .ended {
        Swift.print("Ended")
    }
}

UIGestureRecognizerDelegate

代码语言:javascript
复制
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    // Don't recognize a single tap until a long-press fails
    if gestureRecognizer == tapRecognizer && otherGestureRecognizer == longPressRecognizer {
        return true
    }
    return false
}

shouldRequireFailureOf文档

有什么建议或想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-15 15:31:47

我想知道您对shouldRequireFailureOf的实现是否引起了问题?

这对我来说很好(注意:我使用了.minimumPressDuration = 0.25,因为点击不到0.1秒有点困难):

代码语言:javascript
复制
class GestureTestViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupTapGestures()
    }

    private func setupTapGestures() -> Void {

        let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture(_:)))
        view.addGestureRecognizer(singleTapGesture)

        let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressGesture(_:)))
        longPressGesture.minimumPressDuration = 0.25
        view.addGestureRecognizer(longPressGesture)

    }

    @objc func handleLongPressGesture(_ gesture: UILongPressGestureRecognizer) -> Void {
        if gesture.state == .began {
            print("Did Long Press (began)")
        }
        if gesture.state == .ended {
            print("Did Long Press (ended)")
        }
    }

    @objc func handleTapGesture(_ gesture: UITapGestureRecognizer) -> Void {
        print("Did Single Tap")
    }

}

当我点击时,我会在调试控制台中得到“执行单击”。

当我轻拍和握住时,我很快得到了“做长按压(开始)”,而在手指举起时,我得到了“长按压(结束)”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57511300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档