- 新增 RDEPUBResourceDataProvider 解密钩子协议 + 访问登记表,收敛章节 HTML/ 图片/内联 CSS/脚注/封面/图片查看器/正文取图等读取点,scheme handler 对加密书 禁用流式分支;新增 RDEPUBDecryptingImageAttachment 解密 DTCoreText 图片附件; RDEPUBReaderDependencies.live(resourceDataProvider:) 便捷注入。明文书零影响。 - 试读墙:configuration.trialPolicy + delegate epubReaderTrialWallView/ DidReachTrialWall,UI 由宿主提供(RDEPUBReaderController+Trial)。 - 工具栏定制:RDEPUBReaderTop/BottomToolViewProtocol 协议 + dependencies 工厂注入, 内置栏已 conform,configureTopToolView 改协议类型。 - 朝向锁定:RDEPUBMetadata.orientation(OPF rendition:orientation 主, iBooks display-options 兜底)+ RDEPUBReaderController+Orientation 重写支持朝向、 打开后主动转向。 注:RDEPUBReaderController+LocationResolution / PaginationCoordinator 为本次改动前 即存在的工作区修改,一并纳入。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
3.3 KiB
Swift
57 lines
3.3 KiB
Swift
import UIKit
|
||
|
||
public protocol RDEPUBReaderDelegate: AnyObject {
|
||
|
||
func epubReader(_ reader: UIViewController, didOpen publication: RDEPUBPublication)
|
||
|
||
func epubReader(_ reader: UIViewController, didUpdateLocation location: RDEPUBLocation)
|
||
|
||
func epubReaderDidReachEnd(_ reader: UIViewController)
|
||
|
||
func epubReader(_ reader: UIViewController, didChangeSelection selection: RDEPUBSelection?)
|
||
|
||
func epubReader(_ reader: UIViewController, didUpdateHighlights highlights: [RDEPUBHighlight])
|
||
|
||
func epubReader(_ reader: UIViewController, didUpdateBookmarks bookmarks: [RDEPUBBookmark])
|
||
|
||
func epubReader(_ reader: UIViewController, didUpdateSearchResult result: RDEPUBSearchResult?)
|
||
|
||
func epubReader(_ reader: UIViewController, didChangeCurrentSearchMatch match: RDEPUBSearchMatch?)
|
||
|
||
func epubReader(_ reader: UIViewController, didUpdateCurrentTableOfContentsItem item: RDEPUBReaderTableOfContentsItem?)
|
||
|
||
func epubReader(_ reader: UIViewController, didActivateExternalLink url: URL)
|
||
|
||
func epubReader(_ reader: UIViewController, shouldOpenExternalURL url: URL) -> Bool
|
||
|
||
func epubReader(_ reader: UIViewController, didFailWithError error: Error)
|
||
|
||
func epubReader(_ reader: UIViewController, configureTopToolView topToolView: RDEPUBReaderTopToolViewProviding)
|
||
|
||
/// 提供试读墙视图(configuration.trialPolicy 非 nil 时生效)。
|
||
/// 返回非 nil 时,阅读器在最后一个可读页之后追加一页展示该视图;返回 nil 则不追加试读墙。
|
||
/// 视图的购买 / 登录按钮由宿主自行处理(可在点击后调用 reloadBook() 切换到完整 epub)。
|
||
func epubReaderTrialWallView(_ reader: UIViewController) -> UIView?
|
||
|
||
/// 用户翻到试读墙页时回调(宿主可在此触发购买引导 / 埋点等)。
|
||
func epubReaderDidReachTrialWall(_ reader: UIViewController)
|
||
}
|
||
|
||
public extension RDEPUBReaderDelegate {
|
||
func epubReader(_ reader: UIViewController, didOpen publication: RDEPUBPublication) {}
|
||
func epubReader(_ reader: UIViewController, didUpdateLocation location: RDEPUBLocation) {}
|
||
func epubReaderDidReachEnd(_ reader: UIViewController) {}
|
||
func epubReader(_ reader: UIViewController, didChangeSelection selection: RDEPUBSelection?) {}
|
||
func epubReader(_ reader: UIViewController, didUpdateHighlights highlights: [RDEPUBHighlight]) {}
|
||
func epubReader(_ reader: UIViewController, didUpdateBookmarks bookmarks: [RDEPUBBookmark]) {}
|
||
func epubReader(_ reader: UIViewController, didUpdateSearchResult result: RDEPUBSearchResult?) {}
|
||
func epubReader(_ reader: UIViewController, didChangeCurrentSearchMatch match: RDEPUBSearchMatch?) {}
|
||
func epubReader(_ reader: UIViewController, didUpdateCurrentTableOfContentsItem item: RDEPUBReaderTableOfContentsItem?) {}
|
||
func epubReader(_ reader: UIViewController, didActivateExternalLink url: URL) {}
|
||
func epubReader(_ reader: UIViewController, shouldOpenExternalURL url: URL) -> Bool { true }
|
||
func epubReader(_ reader: UIViewController, didFailWithError error: Error) {}
|
||
func epubReader(_ reader: UIViewController, configureTopToolView topToolView: RDEPUBReaderTopToolViewProviding) {}
|
||
func epubReaderTrialWallView(_ reader: UIViewController) -> UIView? { nil }
|
||
func epubReaderDidReachTrialWall(_ reader: UIViewController) {}
|
||
}
|