如果视图注册了平移手势,捏合手势将不起作用
Pinch gesture does not work if view registers pan gesture
我有一个应用可以通过手势操作视图。视图连接到平移、捏合和旋转手势。如果我开始用两根手指与视图交互,所有手势都会同时工作(预期行为)。但是,如果您从一根手指开始,则捏合和旋转手势将不起作用。 None 当我尝试在平移时开始捏合或旋转时调用委托中的方法。
shouldRecognizeSimultaneouslyWith
总是正确的。
预期行为,
- 一个手指在视图上平移
- 添加第二根手指并开始 pinch/rotate 互动
(类似于 instagram 故事编辑器)
我从一个干净的项目中添加了以下内容:
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 种方法都报告了在您描述的场景之后发生的变化:
- 我从单点触摸拖动手势开始
- 我按下了另一根手指,开始旋转手势和捏合手势
这个例子已经不适合你了吗?您遇到的行为是什么以及预期的行为是什么?
我有一个应用可以通过手势操作视图。视图连接到平移、捏合和旋转手势。如果我开始用两根手指与视图交互,所有手势都会同时工作(预期行为)。但是,如果您从一根手指开始,则捏合和旋转手势将不起作用。 None 当我尝试在平移时开始捏合或旋转时调用委托中的方法。
shouldRecognizeSimultaneouslyWith
总是正确的。
预期行为,
- 一个手指在视图上平移
- 添加第二根手指并开始 pinch/rotate 互动 (类似于 instagram 故事编辑器)
我从一个干净的项目中添加了以下内容:
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 种方法都报告了在您描述的场景之后发生的变化:
- 我从单点触摸拖动手势开始
- 我按下了另一根手指,开始旋转手势和捏合手势
这个例子已经不适合你了吗?您遇到的行为是什么以及预期的行为是什么?