ios开发——分页控制器(UIPageViewController)

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

猜你喜欢

转载自blog.csdn.net/sndongcheng/article/details/81120251