Swift开发iOS 15 PDF Viewer时三击手势无法激活问题咨询
解决方案
三击手势无法触发的核心原因是PDFView自带的双击手势优先级更高,用户连续点击两次后系统就会优先触发自带的缩放逻辑,第三次点击不会被自定义手势捕获。你只需要给自定义三击手势添加依赖关系,要求其必须在自带双击手势识别失败后才触发即可,具体实现如下:
// 1. 创建自定义三击手势 let tripleTapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTripleTap(_:))) tripleTapGesture.numberOfTapsRequired = 3 tripleTapGesture.delegate = self // 2. 找到PDFView自带的双击手势 if let doubleTapGesture = pdfView.gestureRecognizers?.first(where: { gesture in guard let tap = gesture as? UITapGestureRecognizer, tap.numberOfTapsRequired == 2 else { return false } return true }) { // 3. 设置依赖:三击手势必须等双击手势识别失败才会触发 tripleTapGesture.require(toFail: doubleTapGesture) } // 4. 添加手势到PDFView pdfView.addGestureRecognizer(tripleTapGesture)
如果需要避免其他潜在冲突,可以实现UIGestureRecognizerDelegate的代理方法:
extension YourViewController: UIGestureRecognizerDelegate { func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { // 三击手势无需和其他手势同时触发时返回false即可 return false } }
设置完成后,用户双击会正常触发PDF自带的缩放逻辑,连续点击三次则会触发你自定义的三击手势,二者不会产生冲突。
内容的提问来源于stack exchange,提问作者user8460166
相关产品推荐
相关产品推荐

