ios PDFKit displaymode = singlepage only shows the first page of the pdf

前端 未结 3 1405
囚心锁ツ
囚心锁ツ 2021-01-20 10:15

I\'m trying to display a pdf on ios via apples PDFKit library, and rather than use PDFDisplayMode.singlePageContinuous mode, I want to stop at page breaks so I\'m trying to

相关标签:
3条回答
  • 2021-01-20 10:42

    Use the swipe gesture recognizer (UISwipeGestureRecognizer) to let the user swipe the PDF view screen (PDFView) to the left and right.

    import UIKit
    import PDFKit
    
    class ViewController: UIViewController, PDFViewDelegate {
        // MARK: - Variables
    
        // MARK: - IBOutlet
        @IBOutlet weak var pdfView: PDFView!
    
        // MARK: - Life cycle
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let filePath = "/Users/george/Library/Developer/CoreSimulator/Devices/B5C5791C-3916-4BCB-8EB6-5D3D61C08DC0/data/Containers/Data/Application/4B644584-0025-45A7-9D71-C8F8478E4620/Documents/my PDF.pdf"
            pdfView.document = getDocument(path: filePath)
            pdfView.backgroundColor = .lightGray
            pdfView.autoScales = true
            pdfView.displayMode = .singlePageContinuous
            pdfView.usePageViewController(true, withViewOptions: nil)
            createMenu()
            thumbnail()
    
            /* swipe gesture */
            let leftSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(respondLeftSwipeGesture(_:)))
            leftSwipeGesture.direction = [UISwipeGestureRecognizer.Direction.left]
            self.view.addGestureRecognizer(leftSwipeGesture)
            let rightSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(respondRightSwipeGesture(_:)))
            rightSwipeGesture.direction = [UISwipeGestureRecognizer.Direction.right]
            pdfView.addGestureRecognizer(rightSwipeGesture)
        }
    
        @objc func respondLeftSwipeGesture(_ sender: UISwipeGestureRecognizer) {
            if pdfView.document == nil { return }
            pdfView.goToPreviousPage(self)
        }
    
        @objc func respondRightSwipeGesture(_ sender: UISwipeGestureRecognizer) {
            if pdfView.document == nil { return }
            pdfView.goToNextPage(self)
        }
    
        func getDocument(path: String) -> PDFDocument? {
            let pdfURL = URL(fileURLWithPath: path)
            let document = PDFDocument(url: pdfURL)
            return document
        }
    }
    
    0 讨论(0)
  • 2021-01-20 10:45

    You might simply set the displayMode to continuous and it might work:

    pdfView.displayMode = .singlePageContinuous
    
    0 讨论(0)
  • 2021-01-20 10:52

    A another simple way to do this is setting

    pdfView.usePageViewController(true) 
    

    This adds the swiping between pages for you and no need to set up your own gestures. See example below:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Add PDFView to view controller.
        let pdfView = PDFView(frame: self.view.bounds)
        self.view.addSubview(pdfView)
    
        // Configure PDFView to be one page at a time swiping horizontally
        pdfView.autoScales = true
        pdfView.displayMode = .singlePage
        pdfView.displayDirection = .horizontal
        pdfView.usePageViewController(true)
    
        // load PDF
        let webUrl: URL! = URL(string: url)
        pdfView.document = PDFDocument(url: webUrl!)
    }
    
    0 讨论(0)
提交回复
热议问题