feat: EPUB阅读器搜索、注释、CFI模块及大书远距跳转优化
- 实现EPUB阅读器搜索功能及选中注释功能 - 优化CFI模块,修复代码审查发现的11个问题 - 实现大书远距目录跳转与后台补全优化方案 - 优化设置面板与章节运行时联动 - 重构及大量改进优化
This commit is contained in:
@@ -1,27 +1,18 @@
|
||||
import UIKit
|
||||
|
||||
/// 翻页控制器:管理 UIPageViewController 的创建、切换、故障修复和翻页请求队列。
|
||||
///
|
||||
/// RDReaderView 持有此控制器,将 pageCurl 模式的容器管理职责下沉。
|
||||
struct RDReaderPagingController {
|
||||
/// 当前 pageCurl 翻页请求模型
|
||||
|
||||
struct PageTransitionRequest: Equatable {
|
||||
let pageNum: Int
|
||||
let animated: Bool
|
||||
}
|
||||
|
||||
/// 排队中的翻页请求(pageCurl 动画过程中收到新跳转时排队)
|
||||
var pendingTransitionRequest: PageTransitionRequest?
|
||||
|
||||
/// 是否正在执行页面转场动画
|
||||
var isTransitioning: Bool = false
|
||||
|
||||
/// UI 是否已经构建完成(避免重复构建)
|
||||
var didBuildUI = false
|
||||
|
||||
// MARK: - PageViewController 工厂
|
||||
|
||||
/// 创建带指定 spine 位置的 UIPageViewController
|
||||
static func createPageViewController(isDualPage: Bool) -> UIPageViewController {
|
||||
let options: [UIPageViewController.OptionsKey: Any]?
|
||||
if isDualPage {
|
||||
@@ -34,16 +25,12 @@ struct RDReaderPagingController {
|
||||
return pageVC
|
||||
}
|
||||
|
||||
// MARK: - 翻页请求队列管理
|
||||
|
||||
/// pageCurl 动画过程中如果收到新的跳转请求,则排队等待当前动画结束。
|
||||
mutating func shouldQueuePageTransition(_ request: PageTransitionRequest, currentDisplayType: RDReaderView.DisplayType) -> Bool {
|
||||
guard currentDisplayType == .pageCurl, isTransitioning else { return false }
|
||||
pendingTransitionRequest = request
|
||||
return true
|
||||
}
|
||||
|
||||
/// 收尾 pageCurl 转场,返回排队中的后续请求(如果有的话)。
|
||||
mutating func finishPageCurlTransition() -> PageTransitionRequest? {
|
||||
isTransitioning = false
|
||||
guard let pending = pendingTransitionRequest else { return nil }
|
||||
@@ -51,7 +38,6 @@ struct RDReaderPagingController {
|
||||
return pending
|
||||
}
|
||||
|
||||
/// 重置所有排队状态(用于故障修复)。
|
||||
mutating func resetPendingState() {
|
||||
isTransitioning = false
|
||||
pendingTransitionRequest = nil
|
||||
|
||||
Reference in New Issue
Block a user