1.UIPageViewController类常用属性
属性一:双面显示(doubleSided)
doubleSided为true——双面
doubleSided为false——单面
属性二:书脊位置(spineLocation)
UIPageViewControllerDelegate中的pageViewController:spineLocationForInterfaceOrientation:方法来实现
UIPageViewControllerSpineLocation定义(max、min、mid)
2.UIPageViewControllerDataSource协议
方法一:pageViewController:viewControllerBeforeViewController:
方法二:pageViewController:viewControllerAfterViewController:
3.UIPageViewControllerDelegate协议
UIPageViewControllerDelegate中的pageViewController:spineLocationForInterfaceOrientation:方法来实现
UIPageViewControllerSpineLocation定义(max、min、mid)
#import "ViewController.h"
//翻页的方向
enum DirectionForward{
ForwardBefore = 1,//向前
ForwardAfter = 2//向后
};
@interface ViewController ()<UIPageViewControllerDelegate,UIPageViewControllerDataSource>{
//当前Page的索引
int pageIndex;
//翻页的方向变量,其中BeforeForward表示向前,AfterForward表示向后
//这是我们自己定义的枚举类型
int directionForward;
}
//定义一个分页控制器
@property (strong,nonatomic) UIPageViewController *pageViewController;
//定义一个数组,保存3个界面对应的视图控制器
@property (strong,nonatomic) NSArray *viewControllers;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//当前Page的索引是0
pageIndex = 0;
//翻页方向是向后翻
directionForward = ForwardAfter;
//设置3个界面对应的视图控制器数组viewControllers
UIViewController *page1ViewController = [[UIViewController alloc] init];
UIViewController *page2ViewController = [[UIViewController alloc] init];
UIViewController *page3ViewController = [[UIViewController alloc] init];
self.viewControllers = @[page1ViewController,page2ViewController,page3ViewController];
UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:self.view.frame];
imageView1.image = [UIImage imageNamed:@"达芬奇-蒙娜丽莎.png"];
[page1ViewController.view addSubview:imageView1];
UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:self.view.frame];
imageView2.image = [UIImage imageNamed:@"罗丹-思想者.png"];
[page2ViewController.view addSubview:imageView2];
UIImageView *imageView3 = [[UIImageView alloc] initWithFrame:self.view.frame];
imageView3.image = [UIImage imageNamed:@"保罗克利-肖像.png"];
[page3ViewController.view addSubview:imageView3];
//设置pageViewController
//TransitionStyle用于设置翻页的样式,其值UIPageViewControllerTransitionStyle是个枚举类型,当其值为PageCurl时就是翻书效果,当其值为scroll时就是滑屏效果
//navigationOrientation翻页的方向,其值UIPageViewControllerNavigationOrientationHorizontal是个枚举类型,当为Horizontal时为水平方向,当为vertical时为竖直方向
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
//把当前视图控制器设置为pageViewController的数据源对象
self.pageViewController.dataSource = self;
//把当前视图控制器设置为pageViewController的委托对象
self.pageViewController.delegate = self;
//设置首页
//第一个参数setViewControllers用于设置首页中显示的视图控制器集合
//第二个参数direction用于设置翻页的动画方向,取值为UIPageViewControllerNavigationDirection的枚举类型,值为Forword时是向前,值为Reverse时是向后
[self.pageViewController setViewControllers:@[page1ViewController] direction:UIPageViewControllerNavigationDirectionForward animated:TRUE completion:nil];
//将分页视图控制器添加到本视图
[self.view addSubview:self.pageViewController.view];
}
#pragma mark -- 实现UIPageViewControllerDataSource协议
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
pageIndex--;
if (pageIndex < 0) {
pageIndex = 0;
return nil;
}
directionForward = ForwardBefore;
return self.viewControllers[pageIndex];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
pageIndex++;
if (pageIndex > 2) {
pageIndex = 2;
return nil;
}
directionForward = ForwardAfter;
return self.viewControllers[pageIndex];
}
#pragma mark -- 实现UIPageViewControllerDelegate委托协议
-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{
//设置反面是是什么,FALSE是透视图,TRUE是两张图
self.pageViewController.doubleSided = FALSE;
//书脊的位置
return UIPageViewControllerSpineLocationMin;
}
//这个是完成翻页动作后触发,可以检查用户是否翻页成功
-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed{
if (!completed) {
if (directionForward == ForwardAfter) {
pageIndex--;
}
if (directionForward == ForwardBefore) {
pageIndex++;
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end