SCPageViewController 2.0.14

SCPageViewController 2.0.14

测试测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2018 年 9 月

Stefan Ceriu 维护。



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),并且可以轻松创建新的。

  • 缓入缓出反弹 Prime+BackEaseInOut

  • 缓出反弹 Prime+BounceEaseOut

  • 缓出弹性 Prime+ElasticEaseOut

如果想查看更多用例,请查看包含的示例项目(或pod try SCPageViewController

许可证

SCPageViewController遵循MIT许可证(MIT)(详见LICENSE文件)

联系

欢迎提出建议或改进,如果您将此组件用于已发布的应用程序,我同样非常乐意了解。您可以随时通过[email protected]@stefanceriu联系我。