【问题标题】:UIPinchGestureRecognizer doesn't fire after custom UIGestureRecognizer fails自定义 UIGestureRecognizer 失败后 UIPinchGestureRecognizer 不会触发
【发布时间】:2017-06-09 06:57:31
【问题描述】:

我有一个自定义的UIGestureRecognizer 子类,可以检测一种特定类型的单指拖动。在同一个场景中,我还有一个UIPinchGestureRecognizer,它可以检测到两指捏合。

当用户做出捏合手势但在另一只手指之前立即放下一根手指时会出现问题:自定义手势识别器看到单次触摸并接合(将其状态设置为.began)而捏合识别器没有.添加第二次触摸时,自定义识别器会注意到并将其状态切换为.failed。但为时已晚,捏合手势识别器无法识别。

这是自定义 UIGestureRecognizer 子类的代码:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
    super.touchesBegan(touches, with: event)
    guard touches.count == 1 else {
        state = .failed
        return
    }
    state = .began
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
    super.touchesMoved(touches, with: event)
    guard touches.count == 1 else {
        state = .failed
        return
    }
    // do gesture recognizer stuff here
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
    super.touchesEnded(touches, with: event)
    state = .ended
}

我已经尝试将cancelsTouchesInView 设置为false 并将delaysTouchesBegan 设置为true 用于自定义手势识别器。两者都没有改变这种行为。

当我使用 UIPinchGestureRecognizerUIPanGestureRecognizer 时,我没有遇到这个问题,这让我认为这不是预期的行为。

我的 UIGestureRecognizer 失败代码出了什么问题,我该如何解决它,以便 UIPinchGestureRecognizer 仍然可以识别非同时开始触摸的夹点?

【问题讨论】:

  • 你找到解决办法了吗?
  • @agibson007 遗憾的是没有;我的项目需求发生了变化,因此我不需要自定义子类,而且我也从不费心跟进。

标签: ios swift uigesturerecognizer uipinchgesturerecognizer


【解决方案1】:

尝试使用UIGestureRecognizerDelegate 协议来实现gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)。这可以让您同时识别两个手势。

class MyVC: UITableViewController, UIGestureRecognizerDelegate {

    override func viewDidLoad() {
        let pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(handlePinchFrom))
        pinchGestureRecognizer.delegate = self
        view.addGestureRecognizer(pinchGestureRecognizer)
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多