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)? }