PDF 阅读器新增点读热区、试读墙与阅读进度/书签持久化
宿主的点读书场景需要在 PDF 页面上叠加可点击热区(音频/视频/网页等),并支持 试读限制与阅读进度、书签的本地保存,这些能力此前 RDPDFReaderView 均不提供, 只能由宿主在阅读器之外自行叠加视图,无法跟随 SDK 的缩放、翻页和主题渲染同步。 新增 RDPDFReaderPageInteraction 描述热区(位置、图标、边框/填充样式、点击态、 闪烁与播放边框规则、内嵌视频),由新增的 RDPDFInteractionHotspotView 负责绘制, SVG 图标经 RDPDFReaderSVGIconLoader(基于 SDWebImage/SDWebImageSVGCoder)异步 解码后回填,避免阻塞主线程;点击事件通过 interactionHandler 回传给宿主,媒体 播放、路由等业务仍留在宿主侧。底部工具栏新增点读提示与连播按钮,状态由宿主驱动。 试读墙对齐 EPUB 侧 RDEPUBReaderTrialPolicy 的设计:以页为限制单位,可读页数在 配置了 trialPolicy 且宿主经 delegate 提供墙视图时生效,原始总页数、缩略图、目录 换算不受影响,只有传给 RDPDFReaderView 的有效页数会追加一页试读墙;翻页、目录 跳转、大纲的上界都统一收敛到可读范围,避免用户绕过热区跳转或朗读高亮跳进未授权页。 阅读进度与书签复用 RDPDFReaderPersistenceStore 已有的标注状态目录,新增 reader-state.json 承载,不需要宿主额外提供数据库表;RDPDFReaderPersistenceStore 同时实现 RDPDFReaderPersistence 协议对接这部分读写。
This commit is contained in:
@@ -28,6 +28,15 @@ extension RDPDFReaderView {
|
||||
}
|
||||
|
||||
func configureInteraction(for view: UIView) {
|
||||
// 试读墙页是普通 UIView,不需要 RDPDFReaderPageInteractable 带的
|
||||
// 缩放/文本选中能力,只需要点击→显隐工具条,单独走一条更轻量的路径。
|
||||
if let wall = view as? RDPDFTrialWallContainerView {
|
||||
wall.contentTapHandler = { [weak self, weak view] point in
|
||||
guard let self, let view else { return }
|
||||
self.handleContentTap(view.convert(point, to: self))
|
||||
}
|
||||
return
|
||||
}
|
||||
guard let page = view as? RDPDFReaderPageInteractable else { return }
|
||||
// 所有阅读模式统一由 ReaderView 决定何时进入独立放大层;页面本身不再
|
||||
// 各自接管 pinch/double-tap,避免横屏左右页出现两套缩放坐标。
|
||||
|
||||
Reference in New Issue
Block a user