如何在pdfView中禁用放大和缩小?

Posted

技术标签:

【中文标题】如何在pdfView中禁用放大和缩小?【英文标题】:How to disable zoom in and zoom out in pdfView? 【发布时间】:2019-02-22 14:24:58 【问题描述】:

我想拥有我之后收到的东西

 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 文件的宽度。

【问题讨论】:

检查一下,可能对你有帮助:***.com/a/57848300/6144643 【参考方案1】:

我尝试了各种禁用缩放缩放的方法,包括覆盖 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

【讨论】:

【参考方案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

【讨论】:

那么pdf的宽度不等于pdfView的宽度,旋转到横向模式后宽度也不会改变 仍然无法正常工作。我用代码和动画更新了问题。【参考方案3】:

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

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

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

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

可以放大

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

声明

var canZoomIn: Bool  get 

【讨论】:

无法以编程方式工作:方法不会覆盖其超类中的任何方法....

以上是关于如何在pdfView中禁用放大和缩小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 13 中禁用 pdfkit pdfview 中的查找、共享、转发菜单项

在 wkwebview 上禁用放大/缩小

如何样在C#winform中用按钮控制图片的放大与缩小,就是两个按钮一个放大一个缩小

如何在响应式设计中禁用缩放功能?

如何在颤动中缩小和放大图标动画?

在 NSCollectionView 中禁用 PDFView 的滚动