UIPageViewController 代理说明

扈昀
2023-12-01

//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;


 

 类似资料: