IOS-DOC-004 实现继续阅读/上次位置恢复 #21
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
首页继续上次学习需要知道用户上次读到哪里。
目标:支持资料阅读恢复。
支持:Markdown 恢复到 blockId 或 scrollProgress、PDF 恢复到 pageNumber、TXT 恢复到 lineNumber 或 scrollProgress、图片恢复缩放状态可后移
验收标准:退出资料后再次进入能恢复上次位置、没有历史位置时从顶部开始、恢复失败时不崩溃、首页可读取最近阅读资料
实现完成 (2026-06-02)
新增文件
Features/MaterialReader/ReadingPositionStore.swift(~90 行)单例
ReadingPositionStore,UserDefaults 持久化:save(materialId:position:)— 退出时保存,支持全部 6 种 ReadingPosition 变体load(materialId:) → ReadingPosition?— 进入时恢复remove(materialId:)— 资料删除时清除hasPosition(materialId:) → Bool— 首页判断"继续阅读"入口修改文件
ReadingEventCollector.swift— 暴露lastPosition属性供 save-on-exitMaterialReaderView.swift— 位置恢复流程:.onAppear→hasRestoredPosition = false(重置状态)onChange(of: loadingState)→ 加载完成后调restorePosition()restorePosition()→ 从 Store 加载位置 → 设置restoreBlockIdScrollViewReader.onChange(of: restoreBlockId)→scrollTo(id:anchor: .top)滚动到目标 block(0.3s 延迟确保布局完成).onDisappear→ 保存collector.lastPosition→ Store支持格式