Files
ReadViewSDK/Sources/RDPDFReaderView/ReaderView/Paging/RDPDFReaderPagingController.swift
T
shenleiandClaude Fable 5 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

26 lines
975 B
Swift

import Foundation
/// PDF 的跨页解析规则,与 EPUB 阅读器的无封面分支保持一致。
final class RDPDFReaderSpreadResolver {
func pair(for page: Int, totalPages: Int) -> (left: Int, right: Int?) {
let left = max(0, page / 2 * 2)
return (left, left + 1 < totalPages ? left + 1 : nil)
}
func adjacent(from page: Int, totalPages: Int, forward: Bool) -> Int? {
let current = pair(for: page, totalPages: totalPages)
if forward {
let next = (current.right ?? current.left) + 1
return next < totalPages ? next : nil
}
guard current.left > 0 else { return nil }
return pair(for: current.left - 1, totalPages: totalPages).left
}
}
/// 翻页运行时状态的归属点,避免阅读容器同时承担布局和转场状态。
final class RDPDFReaderPagingController: NSObject {
var isTransitioning = false
var pendingTransition: (page: Int, animated: Bool)?
}