【问题标题】:Screen edge gesture is not recognized in PDFView (UIViewer) [Swift, iOS 15, PDFKit]PDFView (UIViewer) [Swift, iOS 15, PDFKit] 中无法识别屏幕边缘手势
【发布时间】:2021-12-10 20:49:59
【问题描述】:

我正在显示一个 PDF 文件,并想添加一个屏幕边缘手势来移动页面。

当 PDF 的全部内容显示在屏幕上时,以下代码可以正常工作。但是,当 PDF 被缩放时,屏幕边缘手势甚至无法激活。

override func viewDidLoad(){
        super.viewDidLoad()


    //set up gesture to swipe from the edge
    let leftScreenEdgeRecognizer = UIScreenEdgePanGestureRecognizer (
        target: self, action: #selector(TextDocumentViewController.leftEdgePanGestureHandler(_ : )))
    leftScreenEdgeRecognizer.edges = UIRectEdge.left
    
    let rightScreenEdgeRecognizer = UIScreenEdgePanGestureRecognizer (
        target: self, action: #selector(TextDocumentViewController.rightEdgePanGestureHandler(_ : )))
    rightScreenEdgeRecognizer.edges = UIRectEdge.right
    
    //register the gesture
    pdfView.addGestureRecognizer(leftScreenEdgeRecognizer)
    pdfView.addGestureRecognizer(rightScreenEdgeRecognizer)
}



//gesture functions here
@objc func leftEdgePanGestureHandler(_ sender: UIScreenEdgePanGestureRecognizer){     
        if(sender.state == UIGestureRecognizer.State.ended){
        print ("Left Edge")
        pdfView.goToPreviousPage(sender)
    }
    
}

@objc func rightEdgePanGestureHandler(_ sender: UIScreenEdgePanGestureRecognizer){
        if(sender.state == UIGestureRecognizer.State.ended){
        print ("right Edge")
        pdfView.goToNextPage(sender)
    }
}

我厌倦了添加类似的代码,

 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
            return true
        }

但是,这根本不起作用。

【问题讨论】:

  • 根据您的描述,当 PDF 被缩放时会出现问题......缩放的代码是什么样的?
  • 缩放被激活为 PDF 查看的原始功能。我使用情节提要添加了UIView 并在ViewController.swift 中注册为@IBOutlet weak var pdfView: PDFView!
  • 我能够解决这个问题。我在下面发布了我的解决方案。谢谢你,@ScottThompson 试图帮助我!

标签: swift uigesturerecognizer iso pdfview


【解决方案1】:

感谢为我的旧问题提供的答案,我能够解决这个问题。我完全忘记了这篇文章。在通过尝试和错误了解了更多关于多个手势检测的信息后,我意识到我可以通过以下方式解决这个发布的问题:

启用多手势激活:

class ViewController: UIViewController, UIGestureRecognizerDelegate,  UIDocumentPickerDelegate, PDFViewDelegate {
// ... other things
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, 
    shouldRecognizeSimultaneouslyWith otherGestureRecognizer: 
    UIGestureRecognizer) -> Bool {
            return true
        }
}

确保正确设置delegate

override func viewDidLoad(){
        super.viewDidLoad()

        //set gesture
        leftScreenEdgeRecognizer.delegate = self
        rightScreenEdgeRecognizer.delegate = self
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多