ReadViewSDK/Sources/RDPDFReaderView/README.md
shenlei 1422461224 将 PDF 成品阅读控制器下沉为 RDPDFReaderView SDK,并修复手机横屏单页连续竖滑
SDK 化收尾:
- 新增 RDPDFReaderView 本地 pod(阅读容器、成品控制器、划线/注释、画笔、
  目录/设置面板、主题与持久化契约),Demo 精简为 PDFKit 页面提供者 + 持久化宿主
- Podfile/工程接入 RDPDFReaderView 与 SnapKit,示例书改用 PDF 阅读器示例文件

手机横屏单页竖滑修复:
- cell 高度改为宽度适配后的纸张高度(sizeForItemAt + 宿主按页提供纵横比),
  纵向超出一屏的内容由外层 collectionView 连续滚动承接,不再被裁掉
- 页面内部不再开启同向嵌套的兜底竖向拖动,修复外层滚动被吞、无法滚到下一页
- 修复 applyContentSize 先评估拖动开关后写 contentSize 的顺序缺陷
- 页码按视口中心命中 cell 计算,补 didEndDragging 兜底;旋转重锚点与
  transitionToPage 改用真实布局位置
- 横竖屏同为竖滑时也重建 cell 并刷新全部可见页的适配配置
- 横屏单页点击不再跳页,只显隐工具栏;翻页交给连续竖滑

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 18:49:44 +09:00

2.0 KiB
Raw Blame History

RDPDFReaderView

独立的 UIKit PDF 阅读交互 SDK。当前第一阶段只包含与业务无关的部分分页、双指缩放、双击缩放、放大后拖动以及画笔模式下的手势隔离。

主工程的下载、解密、缓存、链接、标注和持久化仍由现有 PDF Feature 管理;后续通过适配层逐步迁移,避免把业务问题和手势问题混在一起。

调试入口

在任意测试宿主中 push RDPDFReaderDebugViewController()

navigationController?.pushViewController(RDPDFReaderDebugViewController(), animated: true)

验证顺序:

  1. 双指捏合能连续放大和缩小。
  2. 双击能在适配尺寸与两倍缩放之间切换。
  3. 放大后单指只能拖动内容,不能翻页。
  4. 切到“画笔模式”后,单指不再翻页,双指仍能缩放和拖动。

如果这个独立页面工作正常,而主阅读页仍失效,问题就能确定在主工程的页面层/覆盖层,而不是缩放内核。

图片型 PDF 的文本、复制与标注

主程序即使只能提供每页图片,也可以接入文字功能:

  1. 若主程序已有 PDF 解析结果,在 RDPDFReaderPageDescriptor.textRuns 中传入文字和相对图片的 0...1 坐标;这条路径提供最准确的复制和高亮。
  2. 若没有文字坐标,使用 RDPDFReaderImageTextRecognizer 对当前页图片按需 OCR再把结果赋给 RDPDFReaderImageTextLayerView.textRuns
  3. OCR 也不可用时,文字层会提供区域框选;区域标注只显示“高亮、注释”,不会错误地提供复制。

高亮与注释统一使用 RDPDFReaderAnnotation,坐标同样是相对图片的 0...1 比例,缩放、旋转或重新渲染页面后仍能对齐。使用 RDPDFReaderPersistenceStore 保存时,请传入宿主稳定的书籍 ID可附账号和内容版本对应的目录并对 addAnnotationupdateAnnotationdeleteAnnotationthrows 结果做错误提示;文件损坏或版本不兼容时 SDK 会拒绝覆盖原数据。