UIPageViewController

一、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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值