Quiero tener justo lo que recibo después
pdfView.autoScales = true
sin posibilidad de cambiar la escala.
Después de la ayuda de @carmine tenemos:
import UIKit import PDFKit class ViewController: UIViewController { @IBOutlet weak var pdfView: PDFView! override func viewDidLoad() { super.viewDidLoad() setPdfFile() } override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) self.pdfView.autoScales = true } func setPdfFile() { if let path = Bundle.main.path(forResource: "Swift.org - Getting Started", ofType: "pdf") { let url = URL(fileURLWithPath: path) if let pdfDocument = PDFDocument(url: url) { pdfView.autoScales = true pdfView.displayMode = .singlePageContinuous pdfView.displayDirection = .vertical pdfView.document = pdfDocument pdfView.displaysPageBreaks = false pdfView.minScaleFactor = pdfView.scaleFactor pdfView.maxScaleFactor = pdfView.scaleFactorForSizeToFit } } } }
Esto da tal resultado: https://gfycat.com/briefpowerlessbug
Pero si corres sin estas líneas:
pdfView.minScaleFactor = pdfView.scaleFactor pdfView.maxScaleFactor = pdfView.scaleFactorForSizeToFit
Recibirás el resultado que necesito pero con zoom: https://gfycat.com/presentconcretebunting
Quiero deshabilitar el zoom y hacer que el ancho de pdfView sea igual al ancho del archivo pdf.
Intenté varios métodos para deshabilitar el zoom de pellizco, incluida la anulación de canZoomIn (descubrí que no se invocó en el zoom de pellizco), establecer el método pdfViewWillChangeScaleFactor del delegado (descubrí que nunca se llamó) y establecer el factor de escala máximo y mínimo en la vista ( esto evitó que la vista se escalara automáticamente).
Al final, pude lograr lo que quería al agregar mi propio pellizcoGestureRecognizer a PDFView para anular el pellizcoGestureRecognizer incorporado de la vista. Para que su reconocedor de pellizco tenga prioridad, deberá crear un delegado para su reconocedor y anular el siguiente método:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { //Prefer this pinch recognizer over the default one to override pinch zoom if gestureRecognizer is UIPinchGestureRecognizer && otherGestureRecognizer is UIPinchGestureRecognizer { return true } } return false }
Usar
pdfView.minScaleFactor = pdfView.scaleFactor pdfView.maxScaleFactor = pdfView.scaleFactorForSizeToFit
Y añadir
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) self.pdfView.autoScales = true }
La solución es crear un CustomPDFView
y anular su propiedad de instancia canZoomIn
:
class CustomPDFView: PDFView { override func canZoomIn() -> Bool { return false } }
Entonces el @IBOutlet weak var pdfView: PDFView!
debe ser del tipo @IBOutlet weak var pdfView: CustomPDFView!
. También actualícelo en IdentyInspector para que no se bloquee.
Para obtener más información, consulte: canZoomIn de Apple Docs
puedeZoomIn
Devuelve un valor booleano que indica si el usuario puede ampliar la vista y hacer zoom.
Declaración
var canZoomIn: Bool { get }