宿主的点读书场景需要在 PDF 页面上叠加可点击热区(音频/视频/网页等),并支持 试读限制与阅读进度、书签的本地保存,这些能力此前 RDPDFReaderView 均不提供, 只能由宿主在阅读器之外自行叠加视图,无法跟随 SDK 的缩放、翻页和主题渲染同步。 新增 RDPDFReaderPageInteraction 描述热区(位置、图标、边框/填充样式、点击态、 闪烁与播放边框规则、内嵌视频),由新增的 RDPDFInteractionHotspotView 负责绘制, SVG 图标经 RDPDFReaderSVGIconLoader(基于 SDWebImage/SDWebImageSVGCoder)异步 解码后回填,避免阻塞主线程;点击事件通过 interactionHandler 回传给宿主,媒体 播放、路由等业务仍留在宿主侧。底部工具栏新增点读提示与连播按钮,状态由宿主驱动。 试读墙对齐 EPUB 侧 RDEPUBReaderTrialPolicy 的设计:以页为限制单位,可读页数在 配置了 trialPolicy 且宿主经 delegate 提供墙视图时生效,原始总页数、缩略图、目录 换算不受影响,只有传给 RDPDFReaderView 的有效页数会追加一页试读墙;翻页、目录 跳转、大纲的上界都统一收敛到可读范围,避免用户绕过热区跳转或朗读高亮跳进未授权页。 阅读进度与书签复用 RDPDFReaderPersistenceStore 已有的标注状态目录,新增 reader-state.json 承载,不需要宿主额外提供数据库表;RDPDFReaderPersistenceStore 同时实现 RDPDFReaderPersistence 协议对接这部分读写。
31 lines
1.1 KiB
Ruby
31 lines
1.1 KiB
Ruby
Pod::Spec.new do |s|
|
|
s.name = "RDPDFReaderView"
|
|
s.module_name = "RDPDFReaderView"
|
|
s.version = "0.0.1"
|
|
s.summary = "UIKit PDF reader supporting host images and direct PDFKit parsing"
|
|
s.platform = :ios, "15.0"
|
|
s.swift_versions = ["5.10"]
|
|
s.homepage = "https://example.invalid/RDPDFReaderView"
|
|
s.author = { "readoor" => "ios@touchread.com" }
|
|
s.source = { :path => "." }
|
|
s.license = "MIT"
|
|
s.source_files = "{Sources,ReaderView}/**/*.swift"
|
|
s.dependency "SnapKit", "~> 5.7"
|
|
# 点读热区的 SVG 图标与 GIF 背景图依赖 SDWebImage 解码链。
|
|
s.dependency "SDWebImageSVGCoder", "~> 1.8"
|
|
s.dependency "SDWebImage", "~> 5.17"
|
|
s.frameworks = "Vision", "CoreImage", "PDFKit", "AVKit"
|
|
s.requires_arc = true
|
|
|
|
s.subspec "Speech" do |speech|
|
|
speech.source_files = "Speech/**/*.swift"
|
|
speech.dependency "RDSpeechReaderView", "~> 0.1"
|
|
end
|
|
|
|
s.subspec "AI" do |ai|
|
|
ai.source_files = "AI/**/*.swift"
|
|
ai.dependency "RDAIReaderView/NaturalLanguage", "~> 0.1"
|
|
ai.dependency "RDAIReaderView/UI", "~> 0.1"
|
|
end
|
|
end
|