ios PDFKit displaymode = singlepage only shows the

2019-07-09 00:24发布

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 use PDFDisplayMode.singlePage. https://developer.apple.com/documentation/pdfkit/pdfdisplaymode

However, this mode seems to only display one page of the pdf which is quite useless. I've tried adding swipe handlers to the page but they aren't working either.

I've found sample applications and altered their code to test the pdfdisplaymode but get the same problem e.g. https://github.com/vipulshah2010/PDFKitDemo

How can I implement a one page at a time pdfviewer with pdfkit, that allows swiping between pages?!

3条回答
神经病院院长
2楼-- · 2019-07-09 00:31

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

pdfView.displayMode = .singlePageContinuous
查看更多
一夜七次
3楼-- · 2019-07-09 00:36

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!)
}
查看更多
聊天终结者
4楼-- · 2019-07-09 00:54

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
    }
}
查看更多
登录 后发表回答