fix: pageCurl翻页后偶尔刷新回章节第一页
根因:.extendPartial pageMap更新提交时使用了异步扩展开始时捕获的 currentPageNumber/currentLocation,在pageCurl模式下用户可能已经翻了几页, 导致过时值通过transitionToPage把用户拉回旧位置。 修复三点: 1. PresentationRuntime: .extendPartial fallback不再使用捕获的 currentPageNumber,改用readerView.currentPage实时值 2. ChapterWarmupOrchestrator: 异步加载完成回调中使用实时位置 (readerView.currentPage + locationCoordinator.currentVisibleLocation()) 而非异步开始时捕获的旧值 3. PresentationRuntime: rebindVisiblePage在pageCurl模式下, 如果正在翻页动画中(isPageCurlTransitioning),延迟到动画结束后 再用实时currentPage执行transitionToPage,避免在pageNum回调栈 内同步触发transitionToPage导致重入 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+6
-2
@@ -183,9 +183,13 @@ final class RDEPUBChapterWarmupOrchestrator {
|
||||
group.notify(queue: .main) { [weak self] in
|
||||
guard let self else { return }
|
||||
defer { self.endPartialBookPageMapExtension() }
|
||||
// Use live position values rather than the stale captured values,
|
||||
// since the user may have turned several pages since the extension began.
|
||||
let livePageNumber = max(self.context.readerView?.currentPage ?? 0, 0) + 1
|
||||
let liveLocation = self.locationCoordinator.currentVisibleLocation()
|
||||
self.applyAsyncPartialBookPageMapExtension(
|
||||
currentPageNumber: currentPageNumber,
|
||||
currentLocation: currentLocation,
|
||||
currentPageNumber: livePageNumber,
|
||||
currentLocation: liveLocation,
|
||||
currentMap: currentMap,
|
||||
loadedChapters: loadedChapters
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user