feat: 设置面板与章节运行时联动优化

- 设置页打开时仅重新计算当前章节预览,关闭后触发完整补全
- 新增 preview 加载优先级,支持设置页内当前章预览
- 添加设置页防抖机制,合并连续字号/行距变更
- 支持下滑手势关闭设置页,通过 presentation delegate 通知运行时
- 重新分页时跳过导航和尺寸校验,避免状态冲突
- currentTextPageSize 线程安全优化,后台线程使用缓存尺寸
- 更新 CocoaPods 依赖

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-06-17 09:47:50 +08:00
co-authored by Claude Opus 4.7
parent c64460988a
commit 6ed3fcb071
10 changed files with 1626 additions and 1430 deletions
@@ -8,7 +8,7 @@ import UIKit
/// -
/// -
/// -
final class RDEPUBReaderChromeCoordinator {
final class RDEPUBReaderChromeCoordinator: NSObject, UIAdaptivePresentationControllerDelegate {
private unowned let context: RDEPUBReaderContext
init(context: RDEPUBReaderContext) {
@@ -19,6 +19,13 @@ final class RDEPUBReaderChromeCoordinator {
context.controller
}
// MARK: - UIAdaptivePresentationControllerDelegate
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
//
context.runtime?.settingsPanelDidDisappear()
}
///
func makeTopToolView() -> RDEPUBReaderTopToolView {
let toolView = RDEPUBReaderTopToolView()
@@ -110,6 +117,10 @@ final class RDEPUBReaderChromeCoordinator {
func presentSettings() {
guard let controller else { return }
guard controller.configuration.showsSettingsPanel else { return }
// Runtime
context.runtime?.settingsPanelWillAppear()
let settingsController = RDEPUBReaderSettingsViewController(
configuration: controller.configuration,
brightness: controller.currentBrightness
@@ -135,9 +146,14 @@ final class RDEPUBReaderChromeCoordinator {
settingsController.onThemeChange = { [weak controller] theme in
controller?.updateConfiguration { $0.theme = theme }
}
settingsController.onDismiss = { [weak self] in
// Runtime
self?.context.runtime?.settingsPanelDidDisappear()
}
let navigationController = UINavigationController(rootViewController: settingsController)
navigationController.modalPresentationStyle = .pageSheet
navigationController.presentationController?.delegate = self
controller.present(navigationController, animated: true)
}