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