UIPageViewController 浅谈

蒋典
2023-12-01

UIPageViewController : 书本翻页控制,可以实现书本翻页动画,包含了很多手势,酷炫的动画降低了开发者的开发难度,但是个人拙见,这个控制器还是有些地方不是很完善,具体的API网上已经有很详细的解释了,现在具体说说开发中遇到的一些事(开发中采用的是double.所以问题都是基于此).

1. UIPageViewController 和 table 很像,都是需要提供数据源,page中的viewController,这在大部分帖子中都有提及,viewController提供了数据和视图,所以viewController 既是数据又是视图.

2. UIPageViewController delegate 中提供了翻页动画回调,这样可以在翻页开始和结束做一些事.(这个地方有个坑)

3. UIPageViewController 单独提供了一个方法,

- (void)setViewControllers:(nullable NSArray<UIViewController *> *)viewControllers direction:(UIPageViewControllerNavigationDirection)direction animated:(BOOL)animated completion:(void (^ __nullable)(BOOL finished))completion

类似 tableview 跳转到指定的位置.

基本的信息大致就这些了,简单说说遇到的问题:

1. UIPageViewController 连续点击(快速翻页) 会报警告,原因是刷新太频繁了,上一个vc还没有loadview结束,下一个vc有开始,所以会有一堆警告,

2. UIPageViewController 触发

- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;

数据源已经换了,但是没有触发动画(复现: 在左侧慢慢向下直线滑动),所以这个时候,vc已经更换,但是视图没有变化.

3. 数据源的问题,vc充当数据源,需要一个数组保存一组vc,但是好多页面都可能是重复的,那么就没有必要搞那么多vc,够用行了(下次,会把 UIPageViewController复用vc的方法贴出来).

周末有时间会把相关源码放到GitHub上.

以上拙见,有不同者,欢迎聊聊.

 类似资料: