一、UIPageViewController相关
#import "ViewController.h"
enum DirectionForward{
ForwardBefore = 1 //向前
,ForwardAfter = 2 //向后
};
@interface ViewController () <UIPageViewControllerDataSource,UIPageViewControllerDelegate> {
//当前Page的索引
int pageIndex;
//翻页的方向 BeforeForward 向前 AfterForward 向后
int directionForward;
}
@property (strong, nonatomic) UIPageViewController *pageViewController;
@property (strong, nonatomic) NSArray *viewControllers;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
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];
//设置UIPageViewController控制器
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
/*
UIPageViewControllerTransitionStylePageCurl //翻书效果
UIPageViewControllerTransitionStyleScroll //滑动效果
*/
/*
UIPageViewControllerNavigationOrientationHorizontal //水平效果
UIPageViewControllerNavigationOrientationVertical //垂直效果
*/
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;
//设置首页
[self.pageViewController setViewControllers:@[page1ViewController]
direction:UIPageViewControllerNavigationDirectionForward animated:TRUE completion:nil];
[self.view addSubview:self.pageViewController.view];
pageIndex = 0;
}
#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 {
self.pageViewController.doubleSided = FALSE;//单页
return UIPageViewControllerSpineLocationMin;//书脊在最左侧
}
//手指离开后触发:分为两种情况翻过去和未翻过去
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
if (!completed) {//如果没有翻过去 恢复原来的状态
if (directionForward == ForwardAfter) {
pageIndex--;
}
if (directionForward == ForwardBefore) {
pageIndex++;
}
}
}
@end