Files
ReadViewSDK/Sources/RDReaderView/ReaderView/RDReaderPageChildViewController.swift
T
shenandshen 54798ba578 refactor: 添加中文注释 + 优化模块结构
- 给全部 78 个 Swift 源文件添加详细的中文注释(文件级、类级、方法级)
- 删除 LegacyRDReaderController/ 死代码目录(16 文件 4592 行)
- 根目录翻页容器文件移入 ReaderView/ 目录
- Resources/ 移入 EPUBCore/Resources/(与使用者归属一致)
- RDEPUBTextIndexTable.swift 移入 EPUBTextRendering/(消除反向依赖)
- RDURLReaderController.swift 移入 EPUBUI/(入口控制器归入 UI 层)
- 更新 podspec 资源路径
2026-05-25 10:19:14 +08:00

90 lines
3.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// RDReaderPageChildViewController.swift
// RDReaderDemo
//
// Created by yangsq on 2021/8/9.
//
// 文件职责:UIPageViewController 的子控制器,持有单页的内容视图和页码。
// 在 pageCurl 仿真翻页模式下,每个页面由一个 RDReaderPageChildViewController 管理,
// 通过 contentContainerView 承载实际内容视图,并保持页码引用用于翻页状态追踪。
//
// 架构位置:RDReaderView 四层架构中第三层的子控制器组件,被 UIPageViewController 使用。
//
import UIKit
/// 仿真翻页模式下的页面子控制器
/// 作为 UIPageViewController 的子控制器,每个实例管理一页内容。
/// 持有 ``contentView``(实际内容视图)和 ``pageNum``(页码标识),
/// 通过 contentContainerView 将内容视图填满控制器视图。
class RDReaderPageChildViewController: UIViewController {
/// 内容容器视图,作为 contentView 的父视图
private let contentContainerView = UIView()
/// 实际内容视图
/// 设置时如果视图已加载,会自动重新安装到 contentContainerView 中
var contentView: UIView? {
didSet {
guard isViewLoaded else { return }
installContentView()
}
}
/// 该控制器管理的页码标识
var pageNum: Int = 0
/// 初始化方法
/// - Parameters:
/// - contentView: 要显示的内容视图
/// - pageNum: 该页的页码(默认0
init(contentView: UIView?, pageNum: Int = 0) {
self.contentView = contentView
self.pageNum = pageNum
super.init(nibName: nil, bundle: nil)
}
/// 加载视图时调用
/// 创建透明背景的根视图,添加 contentContainerView,并安装内容视图
override func loadView() {
view = UIView()
view.backgroundColor = .clear
contentContainerView.frame = view.bounds
contentContainerView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
contentContainerView.backgroundColor = .clear
view.addSubview(contentContainerView)
installContentView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
/// 安装内容视图到 contentContainerView 中
/// 先移除 contentContainerView 中的所有子视图,再将 contentView 添加并填满
private func installContentView() {
contentContainerView.subviews.forEach { $0.removeFromSuperview() }
guard let contentView else { return }
contentView.removeFromSuperview()
contentView.frame = contentContainerView.bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
contentContainerView.addSubview(contentView)
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}