如果视图注册平移手势,则捏合手势不起作用
Posted
技术标签:
【中文标题】如果视图注册平移手势,则捏合手势不起作用【英文标题】:Pinch gesture does not work if view registers pan gesture 【发布时间】:2021-07-06 11:13:42 【问题描述】:我有一个通过手势操作视图的应用程序。视图连接到平移、捏合和旋转手势。如果我开始用两根手指与视图交互,所有手势都会同时工作(预期行为)。但是,如果您从一根手指平移开始,则捏合和旋转手势将不起作用。当我在平移时尝试开始捏合或旋转时,不会调用委托中的任何方法。
shouldRecognizeSimultaneouslyWith
总是正确的。
预期行为,
-
一个手指在视图上平移
添加第二根手指并开始捏合/旋转交互
(类似于 Instagram 故事编辑器)
【问题讨论】:
您是否也尝试过使用gestureRecognizerShouldBegin
?
@MaticOblak 是的,即使我总是把它设为 true,它也不起作用。我相信在一个手指到两个手指手势之间切换存在问题。似乎无法识别第二根手指触摸。
【参考方案1】:
我从一个干净的项目中添加了以下内容:
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 种方法都会报告更改:
我从单点拖动手势开始 我按了另一根手指并开始旋转手势和捏合手势这个例子已经不适合你了吗?您遇到的行为是什么以及预期的行为是什么?
【讨论】:
您的示例确实有效。但是,代码中的问题在于我的控制器中的视图层次结构损坏。以上是关于如果视图注册平移手势,则捏合手势不起作用的主要内容,如果未能解决你的问题,请参考以下文章
当从视图启用滚动时,SWRevealViewController 平移手势不起作用
我已经隐藏了导航栏和状态栏,现在屏幕边缘平移手势返回不起作用,这是典型的吗?