EpubReaderLight 是一个 Swift 软件包,它允许您呈现 EPUB 书籍的内容。除了书籍阅读器本身之外,不会显示任何额外的 UI 元素。它的实现方式旨在为您提供原生的用户体验。
这是一个 Swift 软件包,因此您需要执行以下操作
File
Swift Packages
Add Package Dependency...
选项Enter package repository URL
字段中粘贴此 URL: https://github.com/pichukov/epub-reader-light
main
分支获取将 import EpubReaderLight
添加到您的 swift 文件中。
创建 ReaderViewController
的一个实例
let readerController = ReaderViewController(theme: .dark, eventsHandler: self)
theme
: 阅读器的初始 dark
或 light
模式eventsHandler
: 将处理来自阅读器事件的委托将作为委托注入的类应符合 ReaderEventsHandler
协议。
要加载书籍,您需要提供本地 URL
try? await readerController.loadBook(url: url)
您还可以注入默认配置
try? await readerController.loadBook(
url: url,
bookSavedData: BookSavedData(
theme: .light,
fontSize: 24,
font: "Avenir Next",
page: 10
)
)
theme
: 阅读器的初始 dark
或 light
模式fontSize
: 书籍中字体的大小font
: 字体样式page
: 将要打开的初始页面这是一个简单的 ViewModel
的示例,它从项目中加载书籍
import SwiftUI
import EpubReaderLight
@Observable
class ContentViewModel {
@ObservationIgnored
lazy var readerController = ReaderViewController(theme: .dark, eventsHandler: self)
func loadBook() {
Task { @MainActor in
guard let url = Bundle.main.url(forResource: "my_book", withExtension: "epub") else {
print("⚠️ Error: unsupported book URL")
return
}
Task {
try? await readerController.loadBook(url: url)
}
}
}
}
extension ContentViewModel: ReaderEventsHandler {
func onSelect(word: String) {}
func onBookLoaded() {}
func onUpdated(savedData: EpubReaderLight.BookSavedData) {}
}
这是在 UI 中显示书籍的方式
import SwiftUI
import EpubReaderLight
struct ContentView: View {
@State private var viewModel = ContentViewModel()
var body: some View {
VStack {
ReaderView(controller: viewModel.readerController)
.ignoresSafeArea()
}
.onAppear {
viewModel.loadBook()
}
}
}