SCSafariPageController
SCSafariPageController 是一个页面视图控制器组件,模仿了在 Mobile Safari 的标签切换器中的行为,并用作 SCPageViewController 的演示。
功能
- 可以实现类似 Safari 的页面缩放、部分重叠和倾斜
- 可以放大并聚焦到任何页面,并动画化布局变更
- 允许在一次或多次页面上滑动删除
- 在滑动删除的同时,根据页面总数动态调整项目间距和页面角度
- 当滚动超出其范围时,增加页面角度
- 支持增量更新
以及其他所有 SCPageViewController 的优点。
实现细节
SCSafariPageController 是建立在 SCPageViewController 之上的,使用自定义页面布局器来获得所需的效果。
它在基于滚动视图的 SCSafariPageWrapperViewController 中包装视图控制器,以获得滑动删除功能,然后根据页面总数和内容偏移量应用变量项目间距和子层转换(角度、视点和缩放)到页面上。
使用
- 创建一个新的实例并注册为其数据源,可选地委托
self.safariPageController = [[SCSafariPageController alloc] init];
[self.safariPageController setDataSource:self];
[self.safariPageController setDelegate:self];
- 实现SCSafariPageControllerDateSource协议以定义页面的总数以及每个页面所用的视图控制器
- (NSUInteger)numberOfPagesInPageController:(SCSafariPageController *)pageController;
- (UIViewController *)pageController:(SCSafariPageController *)pageController viewControllerForPageAtIndex:(NSUInteger)index;
- 可选地监听以下任何代理事件
- (void)pageController:(SCSafariPageController *)pageController didShowViewController:(UIViewController *)controller atIndex:(NSUInteger)index;
- (void)pageController:(SCSafariPageController *)pageController didHideViewController:(UIViewController *)controller atIndex:(NSUInteger)index;
- (void)pageController:(SCSafariPageController *)pageController didNavigateToOffset:(CGPoint)offset;
- (void)pageController:(SCSafariPageController *)pageController didNavigateToPageAtIndex:(NSUInteger)pageIndex;
- (void)pageController:(SCSafariPageController *)pageController willDeletePageAtIndex:(NSUInteger)pageIndex;
- (void)pageController:(SCSafariPageController *)pageController didDeletePageAtIndex:(NSUInteger)pageIndex;
- 放大和缩小
- (void)zoomOutAnimated:(BOOL)animated completion:(void(^)())completion;
- (void)zoomIntoPageAtIndex:(NSUInteger)index animated:(BOOL)animated completion:(void(^)())completion;
- SCSafariPageController还支持通过其活动布局器可自定义的动画增量更新
[self.safariPageController insertPagesAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated completion:^(void)completion];
[self.safariPageController deletePagesAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated completion:^(void)completion]
[self.safariPageController reloadPagesAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated completion:^(void)completion]
[self.safariPageController movePageAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex animated:(BOOL)animated completion:^(void)completion]
更多使用示例,请查看包含的示例项目(code>pod try SCSafariPageController
许可
SCSafariPageController是在MIT许可(MIT)下发布的(见LICENSE文件)
联系
任何建议或改进都欢迎,如果您将此组件用于已发布的应用,我也想了解。请随时与我联系:[email protected] 或 @stefanceriu。