如果视图注册平移手势,则捏合手势不起作用

时间:2021-07-06 11:13:42

标签: ios uikit uigesturerecognizer

我有一个通过手势操作视图的应用。视图与平移、捏合和旋转手势有关。如果我开始用两个手指与视图交互,则所有手势都同时工作(预期行为)。但是,如果您从一个手指平移开始,则捏合和旋转手势不起作用。当我尝试在平移时开始捏合或旋转时,不会调用委托中的任何方法。

shouldRecognizeSimultaneouslyWith

总是正确的。

预期行为,

  1. 一个手指平移视图
  2. 添加第二根手指并开始捏/旋转交互 (类似于 Instagram 故事编辑器)

1 个答案:

答案 0 :(得分:0)

从一个干净的项目中,我添加了以下内容:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        view.addGestureRecognizer({
            let gesture = UIPanGestureRecognizer(target: self, action: #selector(onPan))
            gesture.delegate = self
            return gesture
        }())
        view.addGestureRecognizer({
            let gesture = UIPinchGestureRecognizer(target: self, action: #selector(onPinch))
            gesture.delegate = self
            return gesture
        }())
        view.addGestureRecognizer({
            let gesture = UIRotationGestureRecognizer(target: self, action: #selector(onRotate))
            gesture.delegate = self
            return gesture
        }())
    }
    
    @objc private func onPan(_ sender: UIPanGestureRecognizer) {
        print("Did pan to \(sender.translation(in: sender.view))")
    }
    
    @objc private func onPinch(_ sender: UIPinchGestureRecognizer) {
        print("Did pinch to \(sender.scale)")
    }
    
    @objc private func onRotate(_ sender: UIRotationGestureRecognizer) {
        print("Did rotate to: \(sender.rotation)")
    }


}

extension ViewController: UIGestureRecognizerDelegate {
    
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { true }
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { true }
    
}

在您描述的场景之后,所有 3 种方法都会报告更改:

  • 我从单触拖动手势开始
  • 我按下了另一个手指并开始旋转手势和捏合手势

这个例子对你不起作用吗?您正在经历什么行为以及预期行为是什么?

相关问题