Swift PDFKit分页无法正常工作

时间:2018-01-31 22:00:42

标签: ios swift pdfview

我正在使用ios11中的新PDFKit处理PDF Viewer。我有一个长90页的pdf文档作为我的测试文档。一切似乎都在正常工作,重新加载,查看,滚动和导航文档。我在导航栏中添加了一个分段控件,其中包含2个段,用户可以点击这些段来将pdfView displayMode从singlePageContinuous交换到twoUpContinuous,并且它本身也可以正常工作。当pdf加载并且然后在点击segmentedControl以更改displayMode之前然后捏缩放pdfView 时发生问题...捏合缩小的组合,然后点击segmentedControl来改变说twoUpContinuous使pdfView失去了文档中页面的跟踪,最终显示了最后一页,即页面说87,88,89和90文档。再次点击segmentedControl以返回到singlePageC连接,导致我仍然在文档的末尾。

我在滚动时尝试在页面更改时设置PDFView观察者,将该页面保存到本地var然后调用pdfView.go(to:currentVisiblePage)等尝试绕过这个但不知何故pdfView失去了正确页面的跟踪segmentedControl被点击。

我的一些代码

    private func createPDFView() {

    // Configure pdfView
    pdfView = PDFView()
    pdfView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(pdfView)

    // Position the pdf view
    pdfView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    pdfView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    pdfView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    pdfView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

    // Configure the toolView (created in storyboard)
    view.bringSubview(toFront: toolView)
    pdfThumbnailView.backgroundColor = Constants.Colors.collectionViewBackground
    view.bringSubview(toFront: pdfThumbnailView)



    private func addPageObserver() {

    //Wednesday, 31 January 2018 trying to get the page number from the notifciation but not easy 
    pageObserver = NotificationCenter.default.addObserver(forName: Notification.Name.PDFViewPageChanged, object: nil, queue: OperationQueue.main) { [weak self] (notification) in

        print("In pageObserver - currentVisiblePage is : \(String(describing: self?.pdfView.currentPage))")
        self?.currentVisiblePage = self?.pdfView.currentPage

    }
}


    @IBAction func segmentedControlTapped(_ sender: UISegmentedControl) {

    // Handle 2 or 4 button displayMode segmented control
    switch sender.numberOfSegments {

    case 2:
        // 2 button case
        switch sender.selectedSegmentIndex {
        case 0:
            pdfView.displayMode = .singlePageContinuous
        case 1:
            pdfView.displayMode = .twoUpContinuous
        default:
            pdfView.displayMode = .singlePageContinuous
        }


    default:
        break
    }

    // Re-layout the document to re-centre if document zoomed by pinch before changing displayMode
    pdfView.layoutDocumentView()

    //
    // Get current page from local var and set to try and fix pagination error
    if let currentVisiblePage = currentVisiblePage {
        print("in seg control handler ... goint to page: \(String(describing: currentVisiblePage))")
        pdfView.go(to: currentVisiblePage)
    }

}

我再次说,如果在更改displayMode之前未进行缩放,则根本没有问题。任何帮助或指示赞赏

1 个答案:

答案 0 :(得分:0)

如果scaleFactor不是1.0,似乎在PDFView中抛出了分页。如果您将页面缩放为0.5,那么尝试更改pageDisplay或尝试使用PDFKit便捷方法导航到下一页似乎会产生错误的结果,即将您带到文档中的错误页面。在进行任何页面操作之前,我必须将scaleFactor重置为1.0才能使其正常工作。