pdfView 捏合缩小
pdfView pinch zooming out
我正在尝试将使用 webview 显示一些 pdf 的项目移动到 pdfView 以利用最新的 PDFKit 功能。
在 Web 视图中,捏合以缩小文档时始终缩放以填满屏幕。基本上你无法缩小它弹回以填满屏幕的页面。
现在有了 pdfView,我可以通过捏合来缩小它看起来一点也不好没有必要让 pdf 页面比屏幕小...
手指从屏幕上松开后,有什么方法可以激活自动缩放。我知道有手势功能,但我不熟悉它的用法。
回答我自己的问题,其实很简单...
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
此解决方案将在您设置文档 属性 后自动调整 PDFView
。只需使用 NoZoomOutPDFView
而不是 PDFView
作为显示 PDFDocument
.
的视图
import Foundation
import PDFKit
final class NoZoomOutPDFView: PDFView {
init() {
super.init(frame: .zero)
NotificationCenter
.default
.addObserver(
self,
selector: #selector(update),
name: .PDFViewDocumentChanged,
object: nil
)
}
deinit {
// If your app targets iOS 9.0 and later the following line can be omitted
NotificationCenter.default.removeObserver(self)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func update() {
// PDF can be zoomed in but not zoomed out
DispatchQueue.main.async {
self.autoScales = true
self.maxScaleFactor = 4.0
self.minScaleFactor = self.scaleFactorForSizeToFit
}
}
}
只是为了确认接受的答案是正确的,同时也为了突出需要使用代码的地方(如答案作者的评论中所述)。即代码必须在设置 pdf 文档后使用:
pdfView.document = pdfDocument
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
如果重写PDFView的方法受限,可以通过添加观察者来完成;
NotificationCenter.default.addObserver(self, selector: #selector(scaleChanged), name: NSNotification.Name.PDFViewScaleChanged, object: nil)
并像这样使用它:
@objc func scaleChanged() {
self.pdfView.maxScaleFactor = 3.0
self.pdfView.minScaleFactor = self.pdfView.scaleFactorForSizeToFit
}
我遇到了同样的问题,接受的答案对我不起作用。 scaleFactorForSizeToFit 始终返回 0.0,因此我仍然能够缩小直到什么都看不见为止。我不知道这是否特定于我的应用程序或 iOS 中发生的某些更改,但我必须在设置比例因子之前触发 PDFView 上的布局更新。这就是我在 iOS15:
上的工作方式
if let document = PDFDocument(url: URL(string: "https://www.adobe.com/pdf/pdfs/ISO32000-1PublicPatentLicense.pdf")!) {
pdfView.displayDirection = .vertical
pdfView.autoScales = true
pdfView.document = document
pdfView.setNeedsLayout()
pdfView.layoutIfNeeded()
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
pdfView.maxScaleFactor = 4.0
}
我正在尝试将使用 webview 显示一些 pdf 的项目移动到 pdfView 以利用最新的 PDFKit 功能。
在 Web 视图中,捏合以缩小文档时始终缩放以填满屏幕。基本上你无法缩小它弹回以填满屏幕的页面。
现在有了 pdfView,我可以通过捏合来缩小它看起来一点也不好没有必要让 pdf 页面比屏幕小...
手指从屏幕上松开后,有什么方法可以激活自动缩放。我知道有手势功能,但我不熟悉它的用法。
回答我自己的问题,其实很简单...
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
此解决方案将在您设置文档 属性 后自动调整 PDFView
。只需使用 NoZoomOutPDFView
而不是 PDFView
作为显示 PDFDocument
.
import Foundation
import PDFKit
final class NoZoomOutPDFView: PDFView {
init() {
super.init(frame: .zero)
NotificationCenter
.default
.addObserver(
self,
selector: #selector(update),
name: .PDFViewDocumentChanged,
object: nil
)
}
deinit {
// If your app targets iOS 9.0 and later the following line can be omitted
NotificationCenter.default.removeObserver(self)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func update() {
// PDF can be zoomed in but not zoomed out
DispatchQueue.main.async {
self.autoScales = true
self.maxScaleFactor = 4.0
self.minScaleFactor = self.scaleFactorForSizeToFit
}
}
}
只是为了确认接受的答案是正确的,同时也为了突出需要使用代码的地方(如答案作者的评论中所述)。即代码必须在设置 pdf 文档后使用:
pdfView.document = pdfDocument
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
如果重写PDFView的方法受限,可以通过添加观察者来完成;
NotificationCenter.default.addObserver(self, selector: #selector(scaleChanged), name: NSNotification.Name.PDFViewScaleChanged, object: nil)
并像这样使用它:
@objc func scaleChanged() {
self.pdfView.maxScaleFactor = 3.0
self.pdfView.minScaleFactor = self.pdfView.scaleFactorForSizeToFit
}
我遇到了同样的问题,接受的答案对我不起作用。 scaleFactorForSizeToFit 始终返回 0.0,因此我仍然能够缩小直到什么都看不见为止。我不知道这是否特定于我的应用程序或 iOS 中发生的某些更改,但我必须在设置比例因子之前触发 PDFView 上的布局更新。这就是我在 iOS15:
上的工作方式 if let document = PDFDocument(url: URL(string: "https://www.adobe.com/pdf/pdfs/ISO32000-1PublicPatentLicense.pdf")!) {
pdfView.displayDirection = .vertical
pdfView.autoScales = true
pdfView.document = document
pdfView.setNeedsLayout()
pdfView.layoutIfNeeded()
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
pdfView.maxScaleFactor = 4.0
}