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>
26 lines
975 B
Swift
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)?
|
||
}
|