Swift iOS15 PDFKit下PDFView缩放后屏幕边缘手势无法识别问题
问题原因
- 你实现的
shouldRecognizeSimultaneouslyWith代理方法未生效,是因为没有给两个UIScreenEdgePanGestureRecognizer的delegate属性赋值为当前控制器,系统不会主动调用你写的代理逻辑。 - 边缘手势加在
pdfView上,当PDF缩放时,pdfView内部的滚动视图会优先消费边缘滑动事件,导致手势无法触发。
修复步骤
- 首先让当前控制器遵守
UIGestureRecognizerDelegate协议:
class TextDocumentViewController: UIViewController, UIGestureRecognizerDelegate { // 你的原有代码 }
- 修改
viewDidLoad中的手势添加逻辑,将手势加在控制器根视图上,同时设置代理:
override func viewDidLoad(){ super.viewDidLoad() // 左边缘翻页手势 let leftScreenEdgeRecognizer = UIScreenEdgePanGestureRecognizer ( target: self, action: #selector(leftEdgePanGestureHandler(_ : ))) leftScreenEdgeRecognizer.edges = .left leftScreenEdgeRecognizer.delegate = self // 右边缘翻页手势 let rightScreenEdgeRecognizer = UIScreenEdgePanGestureRecognizer ( target: self, action: #selector(rightEdgePanGestureHandler(_ : ))) rightScreenEdgeRecognizer.edges = .right rightScreenEdgeRecognizer.delegate = self // 手势添加到控制器根视图,而非pdfView view.addGestureRecognizer(leftScreenEdgeRecognizer) view.addGestureRecognizer(rightScreenEdgeRecognizer) }
- 保留原有多手势识别代理方法,可额外添加优先级逻辑确保边缘手势优先触发:
// 允许边缘手势和其他手势同时识别 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return gestureRecognizer is UIScreenEdgePanGestureRecognizer } // 可选:设置边缘手势优先级更高,进一步确保触发 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { return gestureRecognizer is UIScreenEdgePanGestureRecognizer }
你原来的手势触发逻辑无需修改。
内容的提问来源于stack exchange,提问作者user8460166
相关产品推荐
相关产品推荐

