ios PDFKit displaymode = singlepage 只显示pdf的第一页

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

我正在尝试通过苹果 PDFKit 库在 ios 上显示 pdf,而不是使用 PDFDisplayMode.singlePageContinuous 模式,我想在分页符处停止,所以我正在尝试使用 PDFDisplayMode.singlePage。 https://developer.apple.com/documentation/pdfkit/pdfdisplaymode

不过这个模式好像只能显示pdf的一页,没什么用。我试过向页面添加滑动处理程序,但它们也不起作用。

我找到了示例应用程序并更改了它们的代码以测试 pdfdisplaymode 但遇到了同样的问题,例如 https://github.com/vipulshah2010/PDFKitDemo

如何使用 pdfkit 实现一次一页的 pdfviewer,允许在页面之间滑动?!

使用滑动手势识别器 (UISwipeGestureRecognizer) 让用户左右滑动 PDF 查看屏幕 (PDFView)。

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
    }
}

另一种简单的方法是设置

pdfView.usePageViewController(true) 

这为您添加了页面之间的滑动,无需设置您自己的手势。请参阅下面的示例:

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!)
}

您可以简单地将 displayMode 设置为连续,它可能会起作用:

pdfView.displayMode = .singlePageContinuous