pdfView масштабирование
Я пытаюсь переместить свой проект, который использовал веб-просмотр для отображения некоторых PDF-файлов, в pdfView, чтобы воспользоваться новейшими функциями PDFKit.
в веб-просмотре при уменьшении масштаба документ всегда масштабировался, чтобы заполнить экран. по сути, вы не могли уменьшить масштаб страницы, которую она отскакивала, чтобы заполнить экран.
Теперь с pdfView я могу уменьшать изображение, сжимая его, и это выглядит не очень хорошо, нет необходимости, чтобы страница pdf была меньше экрана...
Есть ли способ активировать автомасштабирование, как только вы отпустите пальцы с экрана. Я знаю, что есть функция жеста, но я не знаком с ее использованием.
5 ответов
Просто для того, чтобы подтвердить, что принятый ответ является правильным, а также для того, чтобы выделить, где должен использоваться код (как указано в комментарии автора ответа). т.е. код должен использоваться ПОСЛЕ настройки PDF-документа:
pdfView.document = pdfDocument
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
Чтобы ответить на мой собственный вопрос, это было на самом деле очень легко...
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
У меня была та же проблема, и принятый ответ мне не помог. ScaleFactorForSizeToFit всегда возвращал 0,0, и поэтому я все еще мог уменьшать масштаб до тех пор, пока ничего не было видно. Я не знаю, относится ли это к моему приложению или что-то изменилось в iOS, но мне пришлось инициировать обновление макета в PDFView перед установкой коэффициента масштабирования. Вот как это работает у меня на iOS15:
if let document = PDFDocument(url: URL(string: "https://www.adobe.com/pdf/pdfs/ISO32000-1PublicPatentLicense.pdf")!) {
pdfView.displayDirection = .vertical
pdfView.autoScales = true
pdfView.document = document
pdfView.setNeedsLayout()
pdfView.layoutIfNeeded()
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
pdfView.maxScaleFactor = 4.0
}
Это решение автоматически настроит PDFView
как только вы установите свойство документа. Просто используйте NoZoomOutPDFView
вместо PDFView
как ваш взгляд на отображение PDFDocument
,
import Foundation
import PDFKit
final class NoZoomOutPDFView: PDFView {
init() {
super.init(frame: .zero)
NotificationCenter
.default
.addObserver(
self,
selector: #selector(update),
name: .PDFViewDocumentChanged,
object: nil
)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func update() {
// PDF can be zoomed in but not zoomed out
DispatchQueue.main.async {
self.autoScales = true
self.maxScaleFactor = 4.0
self.minScaleFactor = self.scaleFactorForSizeToFit
}
}
}
Если переопределение метода PDFView ограничено, это можно сделать, добавив наблюдателя;
NotificationCenter.default.addObserver(self, selector: #selector(scaleChanged), name: NSNotification.Name.PDFViewScaleChanged, object: nil)
и используя его как:
@objc func scaleChanged() {
self.pdfView.maxScaleFactor = 3.0
self.pdfView.minScaleFactor = self.pdfView.scaleFactorForSizeToFit
}