如何在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 中的查找、共享、转发菜单项