docs: 补充注释、修正过时文档、清理重复内容

源码注释:
- 为 ~60 个 Swift 文件补充缺失的 doc comment(file header、类型、属性、方法)
- 修正 4 处错误注释:翻页模式数量、搜索行为描述、手势识别器描述、悬空文档块

文档维护:
- 删除重复文档:WXRead/读书EPUB阅读器实现架构.md(与微信读书版完全一致)
- 合并重叠文档:阅读器规划.md → 阅读器功能开发计划.md(单一真值)
- 修正过时内容:所有文档中"四种翻页模式"→"三种",移除 horizontalCoverScroll
- 更新架构图:补齐 EPUBUI/ReaderController、Paging/、Typesetter/ 等子目录
- 更新 index.md 索引:新增开发计划和架构对比文档引用
This commit is contained in:
shen
2026-06-01 09:33:23 +08:00
parent 1efb9d172f
commit 948004eed1
56 changed files with 1691 additions and 792 deletions
@@ -1,6 +1,17 @@
//
// RDReaderPreloadController.swift
// ReadViewSDK
//
//
//
import UIKit
///
///
/// 仿
final class RDReaderPreloadController {
/// 1
var radius: Int = 1
private let preloadHostView = UIView()
@@ -8,6 +19,7 @@ final class RDReaderPreloadController {
private var pageCurlCachedViews: [Int: UIView] = [:]
private var cacheSignature: CacheSignature?
///
struct Environment {
let displayType: RDReaderView.DisplayType
let isLandscape: Bool
@@ -26,10 +38,12 @@ final class RDReaderPreloadController {
let boundsSize: CGSize
}
/// 宿 frame
func setHostFrame(_ frame: CGRect) {
preloadHostView.frame = frame
}
/// 宿
func ensureHostView(in parentView: UIView) {
guard preloadHostView.superview == nil else { return }
preloadHostView.isHidden = true
@@ -40,10 +54,12 @@ final class RDReaderPreloadController {
parentView.insertSubview(preloadHostView, at: 0)
}
///
func initializeSignature(_ environment: Environment) {
cacheSignature = currentCacheSignature(environment)
}
///
func invalidate(environment: Environment) {
pageCurlCachedViews.values.forEach { $0.removeFromSuperview() }
preloadedPageViews.values.forEach { $0.removeFromSuperview() }
@@ -52,6 +68,7 @@ final class RDReaderPreloadController {
cacheSignature = currentCacheSignature(environment)
}
///
func pageViewForDisplay(
pageNum: Int,
environment: Environment,
@@ -63,12 +80,14 @@ final class RDReaderPreloadController {
return view
}
///
func takePreloadedView(for pageNum: Int) -> UIView? {
let preloaded = preloadedPageViews.removeValue(forKey: pageNum)
preloaded?.removeFromSuperview()
return preloaded
}
///
func prime(
around pageNum: Int,
preferredForward: Bool? = nil,
@@ -1,6 +1,17 @@
//
// RDReaderSpreadResolver.swift
// ReadViewSDK
//
// spread
//
import Foundation
///
///
///
struct RDReaderSpreadResolver {
///
func isFullScreenPage(
_ pageNum: Int,
landscapeDualPageEnabled: Bool,
@@ -11,6 +22,8 @@ struct RDReaderSpreadResolver {
return pageNum == coverIndex
}
/// (, ?)
///
func dualPagePair(
for pageNum: Int,
totalPages: Int,
@@ -32,6 +45,7 @@ struct RDReaderSpreadResolver {
return (left, right)
}
///
func adjacentDualPage(
from pageNum: Int,
totalPages: Int,
@@ -49,6 +63,7 @@ struct RDReaderSpreadResolver {
return dualPagePair(for: prevEnd, totalPages: totalPages, coverPageIndex: coverPageIndex).left
}
/// /
func nextPage(
from currentPage: Int,
totalPages: Int,
@@ -1,6 +1,20 @@
//
// RDReaderTapRegionHandler.swift
// ReadViewSDK
//
//
//
import CoreGraphics
///
///
///
struct RDReaderTapRegionHandler {
///
/// - 1/3 center
/// - 1/3
/// - 1/3 center
func resolveTapEvent(
point: CGPoint,
viewFrame: CGRect,
@@ -1,3 +1,10 @@
//
// RDReaderView+CollectionView.swift
// ReadViewSDK
//
// UICollectionView
//
import UIKit
/// UICollectionView
@@ -1,3 +1,10 @@
//
// RDReaderView+ContentAccess.swift
// ReadViewSDK
//
// 访 UITableView register/dequeueReusable
//
import UIKit
///
@@ -1,3 +1,10 @@
//
// RDReaderView+PageCurl.swift
// ReadViewSDK
//
// UIPageViewController 仿
//
import UIKit
/// UIPageViewController
@@ -1,9 +1,16 @@
//
// RDReaderView+ToolView.swift
// ReadViewSDK
//
// /
//
import UIKit
/// /
extension RDReaderView {
/// /
/// /
func tapCenter() {
refreshToolViewsFromProviderIfNeeded()
isShowToolView = !isShowToolView
@@ -50,7 +57,7 @@ extension RDReaderView {
}
}
///
///
func isHitView(_ hitView: UIView?, inside toolView: UIView, point: CGPoint) -> Bool {
if toolView.frame.contains(point) {
return true
@@ -60,11 +67,15 @@ extension RDReaderView {
return hitView === toolView || hitView.isDescendant(of: toolView)
}
///
enum ToolViewPosition {
///
case top
///
case bottom
}
///
func installToolViewIfNeeded(_ toolView: UIView, position: ToolViewPosition) {
guard toolView.superview !== self else { return }
@@ -97,6 +108,7 @@ extension RDReaderView {
}
}
/// safeAreaInsets
func updateToolViewHeightConstraintsIfNeeded() {
topToolViewHeightConstraint?.constant = resolvedToolViewHeight(for: .top)
bottomToolViewHeightConstraint?.constant = resolvedToolViewHeight(for: .bottom)
@@ -6,7 +6,7 @@
//
// RDReaderView
// UIView RDReaderView
// 1. 仿
// 1. 仿
// 2. 1/31/31/3
// 3.
// 4. (LTR)(RTL)
@@ -21,7 +21,7 @@ import UIKit
///
/// RDReaderView
/// RDReaderView
///
///
/// 使
@@ -31,7 +31,7 @@ import UIKit
/// 4. ``reloadData()``
///
///
/// - pageCurl / horizontalScroll / verticalScroll
/// - pageCurl / horizontalScroll / verticalScroll
/// -
/// - RTL
/// - //
@@ -1,3 +1,10 @@
//
// RDReaderViewProtocols.swift
// ReadViewSDK
//
//
//
import UIKit
///
@@ -19,10 +26,15 @@ import UIKit
///
/// EPUB ``RDReaderDataSource``便 PDF
@objc public protocol RDReaderPageProvider: NSObjectProtocol {
///
func numberOfPages(in readerView: RDReaderView) -> Int
/// reusableView
func readerView(_ readerView: RDReaderView, viewForPageAt index: Int, reusableView: UIView?) -> UIView
/// UICollectionViewCell
@objc optional func pageIdentifier(in readerView: RDReaderView, index: Int) -> String?
///
@objc optional func readerViewTopChrome(_ readerView: RDReaderView) -> UIView?
///
@objc optional func readerViewBottomChrome(_ readerView: RDReaderView) -> UIView?
}
@@ -35,9 +47,14 @@ import UIKit
@objc optional func readerViewOrientationWillChange(readerView: RDReaderView, isLandscape: Bool)
}
///
///
public protocol RDReaderPageNavigating: AnyObject {
///
var currentPage: Int { get }
///
func reloadPages()
///
func transition(to page: Int, animated: Bool)
}
@@ -65,7 +82,10 @@ extension RDReaderView {
// MARK: - Legacy
///
/// ``RDReaderDataSource`` ``RDReaderPageProvider``
final class RDReaderLegacyDataSourceAdapter: NSObject, RDReaderPageProvider {
///
weak var dataSource: RDReaderDataSource?
func numberOfPages(in readerView: RDReaderView) -> Int {