//UIPageViewController类
一、UIPageViewControllerDataSource 数据源代理(视图数据支持),
@required //以下两条代理方法为必须实现
/**
* @brief 往回翻页时触发,(检测到翻页控制器进行向前翻页动作那一瞬间触发)
*
* @param pageViewController 翻页控制器(即当前阅读器)
* @param viewController 当前控制器(即翻页前的当前控制器)
* @return 返回前一个视图控制器 (即翻页后的将要显示的视图控制器),由开发者自定义实现
*/
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
/**
* @brief 往后翻页时触发,(检测到翻页控制器进行向后翻页动作那一瞬间触发)
*
* @param pageViewController 翻页控制器(即当前阅读器)
* @param viewController 当前控制器(即翻页前的当前视图控制器)
* @return 返回前一个视图控制器 (即翻页后的将要显示的视图控制器),由开发者自定义实现
*/
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
@optional //以下两个代理方法实现为可选
下面两个方法都要在转换样式transition 为 UIPageViewControllerTransitionStyleScroll时才有效。
/**
* @brief 只在创建控制器后的初始化时调用,之后(更换下一章节)或翻页都不再调用。(这不是控制器实际页数,只是给用户看的指示器,可自由控制。)
*
* @param pageViewController 翻页控制器(即当前阅读器)
* @return 返回分页控制器的分页总指示点数 (类似轮播下面的指示器)
*/
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0); // The number of items reflected in the page indicator.
/**
* @brief 只在创建控制器后的初始化时调用,之后(更换下一章节)或翻页都不再调用。(可理解为初始化那个索引高亮)(会根据往前或往后翻页,指示器高亮位置会往左或往后移动
*
* @param pageViewController 翻页控制器(即当前阅读器)
* @return 返回当前分页控制器初始化时高亮的点在数组中的位置(索引)
*/
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0); // The selected item reflected in the page indicator.
二、UIPageViewControllerDelegate 监听动作代理
@optional //以下5个代理方法实现为可选
/**
* @brief 转场动画即将开始(翻页视图控制器将要翻页时执行的方法)
*
* @param pageViewController 翻页控制器(即当前阅读器)
* @param pendingViewControllers 即将展示的控制器
*/
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers NS_AVAILABLE_IOS(6_0);
/**
* @brief 翻页动画执行完成后回调的方法
*
* @param pageViewController 翻页控制器(即当前阅读器)
* @param finished 指示动画是否完成
* @param previousViewControllers 前一个控制器(即动画完成前的视图的控制器)
* @param completed 转场动画执行完成或退出
*/
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed;
//屏幕旋转触发的代理方法,只在翻页
/*
typedef NS_ENUM(NSInteger, UIPageViewControllerSpineLocation) {
//对于SCrollView类型的滑动效果 没有书轴 会返回下面这个枚举值
UIPageViewControllerSpineLocationNone = 0,
//以左边或者上边为轴进行翻转 界面同一时间只显示一个View
UIPageViewControllerSpineLocationMin = 1,
//以中间为轴进行翻转 界面同时可以显示两个View
UIPageViewControllerSpineLocationMid = 2,
//以下边或者右边为轴进行翻转 界面同一时间只显示一个View
UIPageViewControllerSpineLocationMax = 3
};
*/
//在转换样式transition 为 UIPageViewControllerTransitionStylePageCurl 时,横竖屏状态变化的时候触发或创建控制器后的初始化时触发。只要用于重新设置书脊的位置。
- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation __TVOS_PROHIBITED;
//下面两个方法只要是设置UIPageViewController(阅读器)支持的屏幕类型
// 返回支持的方法,只在创建控制器后的初始化时调
- (UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
//优先使用的方向
- (UIInterfaceOrientation)pageViewControllerPreferredInterfaceOrientationForPresentation:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
除了代理外,下面为UIPageViewController其它的一些常用属性与方法:
//设置数据源
@property (nullable, nonatomic, weak) id <UIPageViewControllerDelegate> delegate;
//设置代理
@property (nullable, nonatomic, weak) id <UIPageViewControllerDataSource> dataSource;
//获取翻页风格
@property (nonatomic, readonly) UIPageViewControllerTransitionStyle transitionStyle;
//获取翻页方向
@property (nonatomic, readonly) UIPageViewControllerNavigationOrientation navigationOrientation;
//获取书轴类型
@property (nonatomic, readonly) UIPageViewControllerSpineLocation spineLocation;
//设置是否双面显示
@property (nonatomic, getter=isDoubleSided) BOOL doubleSided;
//设置要显示的视图控制器
- (void)setViewControllers:(nullable NSArray<UIViewController *> *)viewControllers direction:(UIPageViewControllerNavigationDirection)direction animated:(BOOL)animated completion:(void (^ __nullable)(BOOL finished))completion;