SCPageViewController
SCPageViewController 是一个容器视图控制器,类似于 UIPageViewController,但提供了更多的控制,可定制性更强,并且可以说是整体设计更优秀。它支持以下特性
- 可定制的过渡和动画(通过布局器以及自定义缓动函数)
- 带有用户定义动画的增量更新
- 弹跳和现实物理效果
- 即使交互正在进行,也能正确调用外观
- 自定义布局和动画布局更改
- 垂直和水平布局
- 分页
- 内容嵌套
- 完成块
- 可定制的交互区域和所需的触摸次数
等等...
屏幕截图
实现细节
SCPageViewController 是基于一个 UIScrollView 子类(SCScrollView)构建的,这为它提供了正确的物理属性、构建分页和导航约束以及自定义过渡的回调。它还可以与用户定义的交互区域以及最小/最大触摸次数一起工作。值得注意的是,SCScrollView 还为 SCStackViewController 提供动力。
SCPageViewController依赖于页面布局器,以便在每个点上都知道每个控制器放置的位置。页面布局器是在一个简单的协议之上构建的,该协议包含提供最终和中间视图控制器框架的方法,以及用于页面插入、删除、移动和重新加载的自定义动画。示例项目包含4个示例:普通间距、视差、滑动和卡片。
用法
- 创建一个新的实例并设置其数据源和代理
self.pageViewController = [[SCPageViewController alloc] init];
[self.pageViewController setDataSource:self];
[self.pageViewController setDelegate:self];
- SCPageViewController依赖于定义页面布局的布局器。您可以使用其中之一或创建一个实现SCPageLayouterProtocol的自定义类。
[self.pageViewController setLayouter:[[SCPageLayouter alloc] init] animated:NO completion:nil];
- 实现SCPageViewControllerDataSource以指定页面的总数,每个页面使用的视图控制器以及应该首先显示哪个。
- (NSUInteger)numberOfPagesInPageViewController:(SCPageViewController *)pageViewController;
- (UIViewController *)pageViewController:(SCPageViewController *)pageViewController viewControllerForPageAtIndex:(NSUInteger)pageIndex;
- (NSUInteger)initialPageInPageViewController:(SCPageViewController *)pageViewController;
- 可选地,修改以下属性以满足您的喜好
// Enable/disable pagination
[self.pageViewController setPagingEnabled:NO];
// Ignore navigation contraints (bounce between pages)
[self.pageViewController setContinuousNavigationEnabled:YES];
// Have the page view controller come to a rest slower
[self.pageViewController.scrollView setDecelerationRate:UIScrollViewDecelerationRateNormal];
// Disable bouncing
[self.pageViewController.scrollView setBounces:NO];
// Customize how many number of touches are required to interact with the pages
[self.pageViewController.scrollView.panGestureRecognizer setMinimumNumberOfTouches:2];
[self.pageViewController.scrollView setMaximumNumberOfTouches:1];
// Allow interaction only in the specified area
//SCScrollViewTouchApprovalArea *touchApprovalArea = [[SCScrollViewTouchApprovalArea alloc] init];
//[touchApprovalArea setPath:[UIBezierPath bezierPathWithRect:someFrame]];
//[self.pageViewController.scrollView addTouchApprovalArea:touchApprovalArea];
//Use different easing functions for animations and navigation
[self.pageViewController setEasingFunction:[SCEasingFunction easingFunctionWithType:SCEasingFunctionTypeLinear]];
// Change the default animation durations
[self.pageViewController setAnimationDuration:1.0f];
#####增量更新SCPageViewController也支持增量更新,并且所有动画都可以通过布局器进行自定义。
[self.pageViewController insertPagesAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated completion:^(void)completion];
[self.pageViewController deletePagesAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated completion:^(void)completion]
[self.pageViewController reloadPagesAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated completion:^(void)completion]
[self.pageViewController movePageAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex animated:(BOOL)animated completion:^(void)completion]
#####缓动函数
SCPageViewController可以与通过SCEasingFunctionProtocol定义的自定义缓动函数一起工作。它包含了31种不同的缓动函数(感谢AHEasing),并且可以轻松创建新的。
如果想查看更多用例,请查看包含的示例项目(或pod try SCPageViewController
)
许可证
SCPageViewController遵循MIT许可证(MIT)(详见LICENSE文件)
联系
欢迎提出建议或改进,如果您将此组件用于已发布的应用程序,我同样非常乐意了解。您可以随时通过[email protected]或@stefanceriu联系我。