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 } }