import UIKit @objc public protocol RDReaderDataSource: NSObjectProtocol { func pageCountOfReaderView(readerView: RDReaderView) -> Int func pageContentView(readerView: RDReaderView, pageNum: Int, containerView: UIView?) -> UIView func pageIdentifier(readerView: RDReaderView, pageNum: Int) -> String? @objc optional func topToolView(readerView: RDReaderView) -> UIView? @objc optional func bottomToolView(readerView: RDReaderView) -> UIView? } @objc public protocol RDReaderPageProvider: NSObjectProtocol { func numberOfPages(in readerView: RDReaderView) -> Int func readerView(_ readerView: RDReaderView, viewForPageAt index: Int, reusableView: UIView?) -> UIView @objc optional func pageIdentifier(in readerView: RDReaderView, index: Int) -> String? @objc optional func readerViewTopChrome(_ readerView: RDReaderView) -> UIView? @objc optional func readerViewBottomChrome(_ readerView: RDReaderView) -> UIView? } @objc public protocol RDReaderDelegate: NSObjectProtocol { func pageNum(readerView: RDReaderView, pageNum: Int) @objc optional func readerViewOrientationWillChange(readerView: RDReaderView, isLandscape: Bool) } public protocol RDReaderPageNavigating: AnyObject { var currentPage: Int { get } func reloadPages() func transition(to page: Int, animated: Bool) } extension RDReaderView { public enum DisplayType { case pageCurl case horizontalScroll case verticalScroll } public enum PageDirection { case leftToRight case rightToLeft } } final class RDReaderLegacyDataSourceAdapter: NSObject, RDReaderPageProvider { weak var dataSource: RDReaderDataSource? func numberOfPages(in readerView: RDReaderView) -> Int { dataSource?.pageCountOfReaderView(readerView: readerView) ?? 0 } func readerView(_ readerView: RDReaderView, viewForPageAt index: Int, reusableView: UIView?) -> UIView { dataSource?.pageContentView(readerView: readerView, pageNum: index, containerView: reusableView) ?? UIView() } func pageIdentifier(in readerView: RDReaderView, index: Int) -> String? { dataSource?.pageIdentifier(readerView: readerView, pageNum: index) } func readerViewTopChrome(_ readerView: RDReaderView) -> UIView? { dataSource?.topToolView?(readerView: readerView) } func readerViewBottomChrome(_ readerView: RDReaderView) -> UIView? { dataSource?.bottomToolView?(readerView: readerView) } }