5 votes

Comment désactiver le zoom avant et le zoom arrière dans pdfView ?

Je veux avoir ce que je reçois après

 pdfView.autoScales = true

sans possibilité de changer d'échelle.

Avec l'aide de @carmine nous avons :

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

Cela donne un tel résultat : https://gfycat.com/briefpowerlessbug

Mais si l'on fonctionne sans ces lignes :

            pdfView.minScaleFactor = pdfView.scaleFactor
            pdfView.maxScaleFactor = pdfView.scaleFactorForSizeToFit

Vous obtiendrez le résultat dont j'ai besoin, mais avec un zoom : https://gfycat.com/presentconcretebunting

Je veux désactiver le zoom et faire en sorte que la largeur du pdfView soit égale à celle du fichier pdf.

3voto

nc2000 Points 46

J'ai essayé plusieurs méthodes pour désactiver le zoom par pincement, y compris la surcharge de canZoomIn (j'ai constaté qu'elle n'était pas appelée lors d'un zoom par pincement), la définition de la méthode pdfViewWillChangeScaleFactor du délégué (j'ai constaté qu'elle n'était jamais appelée), et la définition des facteurs d'échelle maximum et minimum sur la vue (cela a empêché la vue de se redimensionner automatiquement).

Finalement, j'ai pu réaliser ce que je voulais en ajoutant mon propre pinchGestureRecognizer à la PDFView pour remplacer le pinchGestureRecognizer intégré à la vue. Pour que votre reconnaissant de pincement ait la priorité, vous devrez créer un délégué pour votre reconnaissant et surcharger la méthode suivante :

 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
}

2voto

carmine Points 903

Utilisation

 pdfView.minScaleFactor = pdfView.scaleFactor
 pdfView.maxScaleFactor = pdfView.scaleFactorForSizeToFit

Et ajouter

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    self.pdfView.autoScales = true
}

0voto

Enea Dume Points 2061

La solution consiste à créer un CustomPDFView et de surcharger sa fonction Propriété de l'instance canZoomIn :

class CustomPDFView: PDFView {
    override func canZoomIn() -> Bool {
        return false
    }
}

Ensuite, le @IBOutlet weak var pdfView: PDFView! doit être du type @IBOutlet weak var pdfView: CustomPDFView! . Mettez-le également à jour sur IdentyInspector afin qu'il ne vous plante pas.

Pour plus d'informations, veuillez consulter le site : peutZoomer à partir d'Apple Docs

peutZoomer

Renvoie une valeur booléenne indiquant si l'utilisateur peut m et zoomer.

Déclaration

var canZoomIn: Bool { get }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X