我正在使用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之前未进行缩放,则根本没有问题。任何帮助或指示赞赏
答案 0 :(得分:0)
如果scaleFactor不是1.0,似乎在PDFView中抛出了分页。如果您将页面缩放为0.5,那么尝试更改pageDisplay或尝试使用PDFKit便捷方法导航到下一页似乎会产生错误的结果,即将您带到文档中的错误页面。在进行任何页面操作之前,我必须将scaleFactor重置为1.0才能使其正常工作。