前言
前文介绍的是小说阅读器的设计和实现,本文作为补充对多种翻页模式做详细剖析。
正文
常见的阅读器翻页模式包括:平移、仿真、滑页和上下:
平移:左右滑动;
仿真:左右滑动;(纸质书翻页效果)
滑页:左右滑动;(覆盖效果)
上下:上下滑动;
1、平移
UIKit提供UIPageViewController可以很方便实现平移的页面切换效果,使用流程:
1、创建UIPageViewController;
self.pageVC = [[UIPageViewController alloc]
initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:
@{
UIPageViewControllerOptionSpineLocationKey:@(UIPageViewControllerSpineLocationMin)
}];
self.pageVC.delegate = self;
self.pageVC.dataSource = self;
[self addChildViewController:self.pageVC];
[self.view addSubview:self.pageVC.view];
2、初始化首个界面;
- (void)customInitFirstPage {
UIViewController *vc = [self getRandomVCWithIndex:5];
[self.pageVC setViewControllers:@[vc]
direction:UIPageViewControllerNavigationDirectionReverse
animated:NO
completion:^(BOOL finished) {
}];
}
3、滑动时返回相邻的界面;
#pragma mark - UIPageViewControllerDelegate
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
UIViewController *ret;
UIViewController *vc = viewController;
if (vc) {
NSInteger index = vc.view.tag;
if (index > 0) {
ret = [self getRandomVCWithIndex:index - 1];
}
}
return ret;
}
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
UIViewController *ret;
UIViewController *vc = viewController;
if (vc) {
NSInteger index = vc.view.tag;
if (index < 10) {
ret = [self getRandomVCWithIndex:index + 1];
}
}
return ret;
}
2、仿真
相对安卓,iOS实现这个翻页效果非常方便——UIPageViewController同样支持这个翻页效果。
使用流程和平移类似,但多了一些注意事项:
initWithTransitionStyle:由UIPageViewControllerTransitionStyleScroll变为UIPageViewControllerTransitionStyleScroll;
支持翻页的时候,对背面做一个自定义展示,需要打开self.pageVC.doubleSided = YES;;
初始化界面的时候和平移一样,但是在使用过程中再调用-setViewControllers时,如果a