pdfView уменьшение масштаба

Я пытаюсь переместить свой проект, который использовал веб-просмотр для отображения некоторого PDF-файла, в pdfView, чтобы воспользоваться последними функциями PDFKit.

в веб-просмотре при уменьшении масштаба документ всегда масштабировался, чтобы заполнить экран. в основном вы не могли уменьшить масштаб страницы, она отскакивала назад, чтобы заполнить экран.

Теперь с помощью pdfView я могу уменьшить масштаб, сжимая пальцы, и это совсем не выглядит хорошо, нет необходимости, чтобы страница pdf была меньше экрана...

Есть ли способ активировать автомасштабирование, как только вы уберете пальцы с экрана. Я знаю, что есть функция жестов, но я не знаком с ее использованием.


person Julien7377    schedule 13.11.2017    source источник
comment
чтобы ответить на мой собственный вопрос, на самом деле это было очень просто... pdfView.autoScales = true pdfView.maxScaleFactor = 4.0 pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit   -  person Julien7377    schedule 16.11.2017
comment
Пожалуйста, добавьте свой комментарий в качестве ответа, так как это может быть полезно и другим.   -  person Saurabh Prajapati    schedule 22.11.2017


Ответы (4)


Просто чтобы подтвердить, что принятый ответ является правильным, а также выделить, где необходимо использовать код (как указано в комментарии автора ответа). т.е. код необходимо использовать ПОСЛЕ установки pdf-документа:

pdfView.document = pdfDocument
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit 
person Nicholas Farmer    schedule 13.05.2018
comment
Я просто хочу сказать, что люблю тебя. Я потратил столько времени на это! Спасибо за помощь. - person Andres; 27.09.2018

чтобы ответить на мой собственный вопрос, это было на самом деле очень просто...

pdfView.autoScales = true 
pdfView.maxScaleFactor = 4.0 
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
person Julien7377    schedule 23.11.2017
comment
Я хотел бы добавить, что это сработало для меня только после того, как я установил документ в pdfView. Если кто-то устанавливает документ после внесения этих корректировок, это не имеет никакого эффекта. - person chriswillow; 28.02.2018

Это решение автоматически настроит 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 {
        // If your app targets iOS 9.0 and later the following line can be omitted
        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
        }
    }
}
person chriswillow    schedule 03.04.2018
comment
На самом деле, начиная с iOS 9.0 нет необходимости удалять обозреватель из Центра уведомлений. документация - person Anton Vlasov; 10.01.2019

Если переопределение метода 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
}
person Kaan Esin    schedule 06.01.2020