- 实现EPUB阅读器搜索功能及选中注释功能 - 优化CFI模块,修复代码审查发现的11个问题 - 实现大书远距目录跳转与后台补全优化方案 - 优化设置面板与章节运行时联动 - 重构及大量改进优化
46 lines
1.4 KiB
Swift
46 lines
1.4 KiB
Swift
import UIKit
|
|
|
|
struct RDReaderPagingController {
|
|
|
|
struct PageTransitionRequest: Equatable {
|
|
let pageNum: Int
|
|
let animated: Bool
|
|
}
|
|
|
|
var pendingTransitionRequest: PageTransitionRequest?
|
|
|
|
var isTransitioning: Bool = false
|
|
|
|
var didBuildUI = false
|
|
|
|
static func createPageViewController(isDualPage: Bool) -> UIPageViewController {
|
|
let options: [UIPageViewController.OptionsKey: Any]?
|
|
if isDualPage {
|
|
options = [.spineLocation: NSNumber(value: UIPageViewController.SpineLocation.mid.rawValue)]
|
|
} else {
|
|
options = nil
|
|
}
|
|
let pageVC = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: options)
|
|
pageVC.isDoubleSided = isDualPage
|
|
return pageVC
|
|
}
|
|
|
|
mutating func shouldQueuePageTransition(_ request: PageTransitionRequest, currentDisplayType: RDReaderView.DisplayType) -> Bool {
|
|
guard currentDisplayType == .pageCurl, isTransitioning else { return false }
|
|
pendingTransitionRequest = request
|
|
return true
|
|
}
|
|
|
|
mutating func finishPageCurlTransition() -> PageTransitionRequest? {
|
|
isTransitioning = false
|
|
guard let pending = pendingTransitionRequest else { return nil }
|
|
pendingTransitionRequest = nil
|
|
return pending
|
|
}
|
|
|
|
mutating func resetPendingState() {
|
|
isTransitioning = false
|
|
pendingTransitionRequest = nil
|
|
}
|
|
}
|