开发者社区> 老先生二号> 正文

iOS:UIPageViewController翻页控制器控件详细介绍

简介:
+关注继续查看

翻页控制器控件:UIPageViewController


介绍:
1、它是为我们提供了一种类似翻书效果的一种控件。我们可以通过使用UIPageViewController控件,来完成类似图书一样的翻页控制方式。使用Page View,用户可以方便的通过手势在多个页面之间导。
 
2、先假象一下,一本书大概可以分为:1.每一页。2.每一页中相应的数据。
使用UIPageViewController控件,也是类似的两个构成部分。要有一个书的框架,来控制页;每一页的内容。创建一个ViewController,包含一个UIPageViewController来控制显示,一个NSArray包括所有数据。定义这个ViewController类,并使用UIPageViewController来管理每一页,并提供数据。
 
3、可以只添加1个PageContentViewController作为多个页的内容,因为引导页都非常相似,通过复用这个View Controller显然是更好的选择。
 

类型:

      ※导航方向枚举

typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationOrientation) {

    UIPageViewControllerNavigationOrientationHorizontal = 0, //水平

    UIPageViewControllerNavigationOrientationVertical = 1     //垂直

};

※书脊位置枚举,决定首页显示的视图个数

typedef NS_ENUM(NSInteger, UIPageViewControllerSpineLocation) {

    UIPageViewControllerSpineLocationNone = 0,  //没有书脊,滚动显示视图

    UIPageViewControllerSpineLocationMin = 1,   // 书脊居左或上,首页显示一个视图

    UIPageViewControllerSpineLocationMid = 2,   // 书脊居中,首页显示两个视图

    UIPageViewControllerSpineLocationMax = 3   // 书脊居右或下,显示一个视图

};  

※翻页方式枚举

typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationDirection) {

    UIPageViewControllerNavigationDirectionForward, //从左往右(或从下往上)翻页

    UIPageViewControllerNavigationDirectionReverse  //从右往左(或从上往下)翻页

};  

※翻转样式枚举

typedef NS_ENUM(NSInteger, UIPageViewControllerTransitionStyle) {

    UIPageViewControllerTransitionStylePageCurl = 0, //翻书效果样式

    UIPageViewControllerTransitionStyleScroll = 1      //滑屏效果样式

};

 
 
图像关系:
 
 
 
 

详细的属性和方法:
※初始化,构建UIPageViewController实例
- (instancetype)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(NSDictionary *)options;
说明:

UIPageViewControllerTransitionStyle枚举类型定义了如下两个翻转样式。

UIPageViewControllerTransitionStylePageCurl:翻书效果样式。

UIPageViewControllerTransitionStyleScroll:滑屏效果样式。

navigationOrientation设定翻页方向,UIPageViewControllerNavigationDirection枚举类型定义以下两种翻页方式。

UIPageViewControllerNavigationDirectionForward:从左往右(或从下往上);

UIPageViewControllerNavigationDirectionReverse:从右向左(或从上往下)。

 
※用于设置首页中显示的视图
- (void)setViewControllers:(NSArray *)viewControllers direction:(UIPageViewControllerNavigationDirection)direction animated:(BOOL)animated completion:(void (^)(BOOL finished))completion;
       说明:
 
首页中显示几个视图与书脊类型有关,如果是UIPageViewControllerSpineLocationMin或UIPageViewControllerSpineLocationMax,首页中显示一个视图;如果是UIPageViewControllerSpineLocationMid,首页中显示两个视图。
       
 
※控制器代理
@property (nonatomic, assign) id <UIPageViewControllerDelegate> delegate;
※控制器数据源
@property (nonatomic, assign) id <UIPageViewControllerDataSource> dataSource; 
※翻转样式
@property (nonatomic, readonly) UIPageViewControllerTransitionStyle transitionStyle;
※翻页方向
@property (nonatomic, readonly) UIPageViewControllerNavigationOrientation navigationOrientation;
※书脊位置
@property (nonatomic, readonly) UIPageViewControllerSpineLocation spineLocation; 
※识别手势数组
@property(nonatomic, readonly) NSArray *gestureRecognizers;
※控制器数组
@property (nonatomic, readonly) NSArray *viewControllers;
※双面显示
@property (nonatomic, getter=isDoubleSided) BOOL doubleSided;
 
 
代理方法:

@protocol UIPageViewControllerDelegate <NSObject>

@optional

gesture-initiated手势启动时触发的方法。

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers;

 

※ 当用户从一个页面转向下一个或者前一个页面,或者当用户开始从一个页面转向另一个页面的途中后悔 了,并撤销返回到了之前的页面时,将会调用这个方法。假如成功跳转到另一个页面时,transitionCompleted 会被置成 YES,假如在跳转途中取消了跳转这个动作将会被置成 NO。

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed;

 

※当设备的方向改变了将会调用这个方法。你可以使用这个方法通过返回UIPageViewControllerSpi呢location类型的一个值来设定页面主键的位置

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;

 

※返回页控制器中控制器的页内容控制器数

- (NSUInteger)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController *)pageViewController;

 

※返回设置的书脊位置

- (UIInterfaceOrientation)pageViewControllerPreferredInterfaceOrientationForPresentation:(UIPageViewController *)pageViewController;

 
数据源方法:

@required(必须实现的方法)

※返回之前的控制器

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;

※返回之后的控制器

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;

@optional(可选的方法)

※返回页控制器中页的数量

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController; 

※返回页控制器中当前页的索引

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController; 

 
举例如下:(纯代码实现翻页功能)
   类文件截图如下:
   
 
   在PageContentViewContrller.h文件中声明必要的属性:
   
 
   在PageContentViewController.m文件中对属性进行操作:
   
 
   在ViewController.m文件才是真正实现翻页的功能的具体代码如下:
   1.实现协议并声明属性:
   
 
 
   2.懒加载初始化对象属性
   
 
 
   3.初始化数据
   
 
 
   4.创建翻页控制器实例
   
 
 
   5.设置数据源和代理
   
 
 
 
   6.创建内容控制器
   
 
   7.设置翻页控制器控制器的子控制器
   
 
   8.将翻页控制器添加到当前视图控制器中
   
   
 
   9.实现数据源协议的方法:
//返回前一页
复制代码
#pragma mark -数据源协议的方法
//返回前一页
-(UIViewController*)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    //获取当前页
    NSInteger index = ((PageContentViewController*) viewController).pageIndex;
    if ((index == 0) || (index == NSNotFound))
    {
        return nil;
    }
    
    // 返回数据前关闭交互,确保只允许翻一页
    pageViewController.view.userInteractionEnabled = NO;
    
    //前一页
    index --;

    return [self viewControllersAtIndex:index];
    
}
复制代码

//返回后一页

复制代码
//返回后一页
-(UIViewController*)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    //获取当前页
    NSInteger index = ((PageContentViewController*) viewController).pageIndex;
    if ((index == [self.arrayM count]-1) || (index == NSNotFound))
    {
        return nil;
    }
    
    // 返回数据前关闭交互,确保只允许翻一页
    pageViewController.view.userInteractionEnabled = NO;
    
    //后一页
    index++;
    
    return [self viewControllersAtIndex:index];
}
复制代码

    10.实现代理的方法

//防止上一个动画还没有结束,下一个动画就开始了

复制代码
#pragma mark -代理的方法
-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
    if(finished && completed)
    {
        // 无论有无翻页,只要动画结束就恢复交互。
        pageViewController.view.userInteractionEnabled = YES;
    }
}
复制代码

      11.自定义的附加的一个方法

//创建当前页的内容控制器

复制代码
#pragma mark -返回当前页的控制器
-(PageContentViewController*)viewControllersAtIndex:(NSInteger)index
{
    if ([self.arrayM count] == 0 || index == [self.arrayM count])
    {
        return nil;
    }
    
    //创建内容控制器
    PageContentViewController *pageContentVC = [[PageContentViewController alloc]init];
    
    pageContentVC.pageTitle = [self.arrayM objectAtIndex:index];

    pageContentVC.view.backgroundColor = [UIColor grayColor];
    
    pageContentVC.pageIndex = index;
    
    return pageContentVC;
}
复制代码

 

演示结果如下:

 第0页:                                                                      第1页:

    

等等,一共十页,不做截图。

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
分类: iOS初级

本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4848781.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS翻页视图控制器UIPageViewController的应用(一)
iOS翻页视图控制器UIPageViewController的应用
52 0
iOS伪亮度调节/控制
iOS 5.0之前的版本并没有开放控制系统亮度的接口,所以app能做到的只是比系统设置的亮度更暗,具体做法就是在整个app的keywindow之上再放一个window,设置黑色背景,通过控制alpha值来达到明暗变化。
745 0
TraceView性能分析工具介绍
<p>一、TraceView简介</p> <p>      TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析。</p> <p>      TraceView是图形化的工具,最终它会产生一个图表,用于对性能分析进行说明。</p> <p>      TraceView可以跟踪到具体的Method</p> <
1346 0
创建控制文件副本出现错误ORA-00205: error in identifying control file
测试环境:OEL6.5+Oracle 11g R2     在做多路复用控制文件的实验时,创建控制文件总是会报错误:ORA-00205: error in identifying control file, check alert log for more info...
1642 0
677
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载