首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFView -适合2页的height+width &启用滚动到下一页

PDFView -适合2页的height+width &启用滚动到下一页
EN

Stack Overflow用户
提问于 2022-02-22 18:53:58
回答 1查看 255关注 0票数 0

我有一个视图,其中包含来自PDFKitPDFKit。我想一次看到2整页在我的屏幕上,他们需要符合两个高度和宽度。我可以看到两种方法,但这两种方法都不完美:

选项1)显示模式与.twoUpContinuous -在这里它适合宽度,但高度是裁剪在~2/3的PDF格式。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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解决方案更改页面..?

EN

回答 1

Stack Overflow用户

发布于 2022-02-22 19:35:32

最后,我想到了三个解决方案,它们都不是完美的。我最喜欢解决方案3。

解决方案1:不稳定,不定期呈现pdf或在第一页上发布。但大多数情况下效果都很好。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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中的下一页/上一页时,没有动画。

代码语言:javascript
复制
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)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71226851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档