IOS-INFO-009 P0 | 阅读位置采集适配器 【审计: 部分存在,需统一payload】 #74

Closed
opened 2026-06-07 11:55:22 +08:00 by wangdl · 1 comment
Owner

审查

updatePosition 已有 2s 防抖。需改造成标准 ReadingPositionPayload。

支持: Markdown→blockId+scrollProgress, Text→lineNumber+scrollProgress, PDF→pageNumber+pageProgress+overallProgress, Image→zoom+offset, EPUB→chapterId+progress。camelCase。clamp 0~1。退出前强制提交。

## 审查 updatePosition 已有 2s 防抖。需改造成标准 ReadingPositionPayload。 支持: Markdown→blockId+scrollProgress, Text→lineNumber+scrollProgress, PDF→pageNumber+pageProgress+overallProgress, Image→zoom+offset, EPUB→chapterId+progress。camelCase。clamp 0~1。退出前强制提交。
wangdl added this to the M-IOS-INFO:学习信息采集、上传、继续学习与基础分析闭环 milestone 2026-06-07 11:55:22 +08:00
wangdl changed title from IOS-INFO-008 P0 | 阅读位置采集适配器 to IOS-INFO-009 P0 | 阅读位置采集适配器 【审计: 部分存在,需统一payload】 2026-06-07 12:20:10 +08:00
Author
Owner

完成报告

交付

Features/MaterialReader/ReadingPositionAdapter.swift — 统一位置采集适配器:

struct ReadingPositionAdapter {
    /// 根据 materialType 生成正确的 ReadingPosition variant
    static func buildPosition(
        materialType: MaterialType,
        blockId?, scrollProgress?, lineNumber?,
        pageNumber?, pageProgress?, overallProgress?,
        chapterId?, chapterProgress?,
        zoomScale?, offsetX?, offsetY?
    ) -> ReadingPosition?

    /// 从 block 列表 + scroll 进度快速构建
    static func fromBlockScroll(
        materialType: MaterialType,
        blocks: [DocumentBlock],
        scrollProgress: Float,
        blockIndex: Int
    ) -> ReadingPosition?
}

支持的 variant:

MaterialType ReadingPosition variant
Markdown .markdown(blockId, scrollProgress)
Text .text(lineNumber, scrollProgress)
PDF .pdf(pageNumber, pageProgress, overallProgress)
Image .image(zoomScale, offsetX, offsetY)
EPUB .epub(chapterId, chapterProgress, overallProgress)
Office/Unknown .unknown

Clamp 0~1clamp() 处理 NaN→0, <0→0, >1→1

MaterialReaderView 已切换reportScrollPosition 使用 ReadingPositionAdapter.fromBlockScroll()

## 完成报告 ### 交付 `Features/MaterialReader/ReadingPositionAdapter.swift` — 统一位置采集适配器: ```swift struct ReadingPositionAdapter { /// 根据 materialType 生成正确的 ReadingPosition variant static func buildPosition( materialType: MaterialType, blockId?, scrollProgress?, lineNumber?, pageNumber?, pageProgress?, overallProgress?, chapterId?, chapterProgress?, zoomScale?, offsetX?, offsetY? ) -> ReadingPosition? /// 从 block 列表 + scroll 进度快速构建 static func fromBlockScroll( materialType: MaterialType, blocks: [DocumentBlock], scrollProgress: Float, blockIndex: Int ) -> ReadingPosition? } ``` **支持的 variant:** | MaterialType | ReadingPosition variant | |-------------|------------------------| | Markdown | .markdown(blockId, scrollProgress) | | Text | .text(lineNumber, scrollProgress) | | PDF | .pdf(pageNumber, pageProgress, overallProgress) | | Image | .image(zoomScale, offsetX, offsetY) | | EPUB | .epub(chapterId, chapterProgress, overallProgress) | | Office/Unknown | .unknown | **Clamp 0~1** — `clamp()` 处理 NaN→0, <0→0, >1→1 **MaterialReaderView 已切换** — `reportScrollPosition` 使用 `ReadingPositionAdapter.fromBlockScroll()`
Sign in to join this conversation.
No description provided.