4

我想拥有我收到的东西

 pdfView.autoScales = true

没有改变比例的可能性。

在@carmine 的帮助下,我们有:

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

这给出了这样的结果:https ://gfycat.com/briefpowerlessbug

但是,如果您在没有这些行的情况下运行:

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

您将收到我需要的结果,但需要进行缩放:https ://gfycat.com/presentconcretebunting

我想禁用缩放并使 pdfView 的宽度等于 pdf 文件的宽度。

4

3 回答 3

3

我尝试了各种禁用缩放缩放的方法,包括覆盖 canZoomIn(我发现它没有在缩放缩放中调用),设置委托的 pdfViewWillChangeScaleFactor 方法(我发现它从未被调用),以及在视图上设置最大和最小比例因子(这阻止了视图自动缩放)。

最后,我能够通过将我自己的 pinchGestureRecognizer 添加到 PDFView 来覆盖视图的内置 pinchGestureRecognizer 来完成我想要的。为了让您的捏识别器具有优先权,您需要为您的识别器创建一个委托并覆盖以下方法:

 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
}
于 2019-09-13T20:28:56.230 回答
2

利用

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

并添加

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    self.pdfView.autoScales = true
}
于 2019-02-22T14:36:31.447 回答
0

解决方案是创建一个CustomPDFView并覆盖它的Instance Property canZoomIn

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

那么 @IBOutlet weak var pdfView: PDFView!应该是 type @IBOutlet weak var pdfView: CustomPDFView!。还要在 IdentyInspector 上更新它,这样它就不会让你崩溃。

有关更多信息,请查看:Apple Docs 中的canZoomIn

可以放大

返回一个布尔值,指示用户是否可以放大视图和放大。

宣言

var canZoomIn: Bool { get }
于 2019-09-09T07:37:21.667 回答