我有一个视图,其中包含来自PDFKit的PDFKit。我想一次看到2整页在我的屏幕上,他们需要符合两个高度和宽度。我可以看到两种方法,但这两种方法都不完美:
选项1)显示模式与.twoUpContinuous -在这里它适合宽度,但高度是裁剪在~2/3的PDF格式。
lazy var pdfView: PDFView = {
let view = PDFView().layoutable()
view.displayMode = .twoUpContinuous // !
view.displayDirection = .vertical
view.minScaleFactor = view.scaleFactorForSizeToFit
view.maxScaleFactor = 3
view.autoScales = true
return view
}()选项2)使用.twoUp的显示模式-在这里它适合宽度和高度,但是手势识别器不记录向下滑动,因此用户不能将页面更改为3和4。
lazy var pdfView: PDFView = {
let view = PDFView().layoutable()
view.displayMode = .twoUp // !
view.displayDirection = .vertical
view.minScaleFactor = view.scaleFactorForSizeToFit
view.maxScaleFactor = 3
view.autoScales = true
return view
}()这种情况有什么解决办法吗.?或者我必须添加手动滑动手势识别器,并在此基础上使用.twoUp解决方案更改页面..?
发布于 2022-02-22 19:35:32
最后,我想到了三个解决方案,它们都不是完美的。我最喜欢解决方案3。
解决方案1:不稳定,不定期呈现pdf或在第一页上发布。但大多数情况下效果都很好。
lazy var pdfView: PDFView = {
let view = PDFView().layoutable()
view.displayMode = .twoUpContinuous
view.autoScales = false
view.displayDirection = .vertical
return view
}()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
updatePDFViewScaling()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
updatePDFViewScaling()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
updatePDFViewScaling()
}
private func updatePDFViewScaling() {
customView.pdfView.displayMode = .twoUp
let scaleFactor = customView.pdfView.scaleFactorForSizeToFit
customView.pdfView.displayMode = .twoUpContinuous
customView.pdfView.scaleFactor = scaleFactor
customView.pdfView.minScaleFactor = scaleFactor
customView.pdfView.maxScaleFactor = 3
}解决方案2:水平完美,垂直不。宽度的2个PDF适合,但底部是裁剪。对于A4文档,大多数iPads上的裁剪不应该太多,因为它们的纵横比都是3:4。
lazy var pdfView: PDFView = {
let view = PDFView().layoutable()
view.displayMode = .twoUpContinuous
view.displayDirection = .vertical
view.minScaleFactor = view.scaleFactorForSizeToFit
view.maxScaleFactor = 3
return view
}()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
customView.pdfView.autoScales = true
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
customView.pdfView.autoScales = true
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
customView.pdfView.autoScales = true
}解决方案3:当你用手指滚动到PDF中的下一页/上一页时,没有动画。
lazy var pdfView: PDFView = {
let view = PDFView().layoutable()
view.displayMode = .twoUp
view.displayDirection = .vertical
view.minScaleFactor = view.scaleFactorForSizeToFit
view.maxScaleFactor = 3
view.autoScales = true
return view
}()
// somewhere in view's init or wherever you want
let upGestureRegocnizer = UISwipeGestureRecognizer(target: self, action: #selector(upSwipeAction(gestureRegonizer:)))
upGestureRegocnizer.direction = .up
pdfView.addGestureRecognizer(upGestureRegocnizer)
let downGestureRegocnizer = UISwipeGestureRecognizer(target: self, action: #selector(downSwipeAction(gestureRegonizer:)))
downGestureRegocnizer.direction = .down
pdfView.addGestureRecognizer(downGestureRegocnizer)
@objc private func upSwipeAction(gestureRegonizer: UISwipeGestureRecognizer) {
guard pdfView.canGoToNextPage else { return }
pdfView.goToNextPage(self)
}
@objc private func downSwipeAction(gestureRegonizer: UISwipeGestureRecognizer) {
guard pdfView.canGoToPreviousPage else { return }
pdfView.goToPreviousPage(self)
}https://stackoverflow.com/questions/71226851
复制相似问题