Как определить переход на другую страницу в PDF с помощью PDFKit

#swift #uiscrollview #pdfkit

#swift #uiscrollview #pdfkit

Вопрос:

Я пытаюсь добавить номер текущей страницы, чтобы при прокрутке пользователем другой страницы отображалось, например, 2 из 3 (если в PDF есть 3 страницы)

на данный момент я использую этот код

он всегда будет отображать 1 из 3

Я думаю, что PDFKit использует UIScrollView, поэтому мне нужно получить доступ к ScrollView таким образом, чтобы я мог определять при прокрутке на другую страницу, а затем увеличивать номер текущей страницы

Я не нашел никакого способа добраться до scrollview в PDFKit

  func showCurrentPageIndex(){

        guard let totalPages = pdfContainerView.document?.pageCount else {return}
        guard let currentPage = pdfContainerView.currentPage else {return}
        guard let currentPageRef = currentPage.pageRef else {return}

let pageIndex = currentPageRef.pageNumber

      totalPageNumbers.text = "(totalPages)"
      currentPageIndex.text =  "(pageIndex)"
    }
  

Ответ №1:

Используйте уведомление ( PDFViewPageChanged ).

 import UIKit
import PDFKit

class ViewController: UIViewController, PDFViewDelegate {
    // MARK: - Variables
    var totalCount = Int()

    // MARK: - IBOutlet
    @IBOutlet weak var pdfView: PDFView!

    // MARK: - Life cycle
    override func viewDidLoad() {
        super.viewDidLoad()

        let filePath = "Some file document path"
        pdfView.document = getDocument(path: filePath)
        if let total = pdfView.document?.pageCount {
            totalCount = total
        }
        pdfView.backgroundColor = .lightGray
        pdfView.autoScales = true
        pdfView.displayMode = .singlePageContinuous
        pdfView.usePageViewController(true, withViewOptions: nil)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        /* notification */
        NotificationCenter.default.addObserver (self, selector: #selector(handlePageChange), name: Notification.Name.PDFViewPageChanged, object: nil)
    }

    func getDocument(path: String) -> PDFDocument? {
        let pdfURL = URL(fileURLWithPath: filePath)
        let document = PDFDocument(url: pdfURL)
        return document
    }
}
  

Комментарии:

1. Большое вам спасибо! это работает, я не знал, что есть уведомление об изменении страницы, просто чтобы сделать ваш код полным ответ, вы забыли добавить функцию handlePageChange, которая в моем случае является той же функцией, которую я добавил showCurrentPageIndex () также я думаю, вы должны удалить NotificationCenter в viewDidDisappear override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) NotificationCenter.default.removeObserver(self, name: Notification.Name.PDFViewPageChanged, object: nil) }