设为首页 加入收藏

TOP

Learn how to Use UIPageViewController in iOS(一)
2017-10-13 10:29:09 】 浏览:2742
Tags:Learn how Use UIPageViewController iOS

下面学习内容来自国外的IOS学习网站:The AppGuruz: UIPageViewController in iOS  也许需要FQ哦

认真做一遍上面入门UIPageController的教程,然后仔细思考一下代码的逻辑,你就会得到以下总结:

1、UIPageController有一个子View是UIScrollView,可以通过以下代码获取到:

1 for (UIView* view in pageController.view.subviews){
2     if([view isKindOfClass:[UIScrollView class]]) {
3         self.pageScrollView = (UIScrollView *)view;
4         // 根据需求,设置代理和实现代理方法
5         self.pageScrollView.delegate = self;
6     }
7 }
 

2、UIPageController可以作为其他控制器的子控制器,但是要记得其view也要设置成子view:

 1 // hy:当前的这个self = UIViewController添加这个UIPageViewController作为子控制器
 2 [self addChildViewController:_PageViewController];
 3 // hy:但是也别忘了还需要添加View到当前View上
 4 [self.view addSubview:_PageViewController.view];
 5 
 6 
 7 /*
 8  当我们向我们的视图控制器容器(就是父视图控制器,它调用addChildViewController
 9  方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器
10  后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。
11  */
12 [self.PageViewController didMoveToParentViewController:self];
 

3、UIPageController添加控制器作为子控制器

 1 // 1、创建子控制器
 2 PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
 3 // 2、存储在数组中
 4 NSArray *viewControllers = @[startingViewController];
 5 // 3、UIPageController添加这个数组
 6 /*
 7  NavigationOrientation设定了翻页方向,
 8  UIPageViewControllerNavigationDirection枚举类型定义了以下两种翻页方式。
 9  UIPageViewControllerNavigationDirectionForward:从左往右(或从下往上);
10  UIPageViewControllerNavigationDirectionReverse:从右向左(或从上往下)
11  */
12 [self.PageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
 

4、UIPageController的一些DataSource方法

 1 -(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
 2 {
 3     // 返回控制器的个数
 4     return [self.arrPageTitles count];
 5 }
 6 
 7 - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
 8 {
 9     // 返回首次显示的控制器 放在第index+1页显示
10     // 比如这里首次显示的会在第3页显示
11     // return 2;
12     
13     // 一般这里返回0
14     return 0;
15 }

 

下面这两个dataSource方法在性能上很好哦,UIPageController默认会加载当前控制器的子控制器左右两边的控制器,也就是一共三个控制器。

再举个简单的例子,假如有五个控制器分别按顺序是1 2 3 4 5,当前显示的是第3个控制器,UIPageController默认已经加载了第2 3 4这三个控制器,第1和第5没有创建其对象,当用户操作视图向右移动视图,也就是从3移动到2,当前显示第2个控制器,就会触发下面的dataSource方法,创建第1控制器,同时销毁了第4控制器,这样,保证同一时间内都会三个控制器。从性能上是合理而且内存资源是高效利用的。

测试一下的dataSource方法的方式,就是在子控制器的viewDidLoad里打印当前控制器的tag,就能理解下面的dataSource方法了:

 1 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
 2 {
 3     // 获得当前的控制器对应的index,然后-1,创建前面一个控制器,然后返回
 4     NSUInteger index = ((PageContentViewController*) viewController).pageIndex;
 5     if ((index == 0) || (index == NSNotFound))
 6     {
 7         return nil;
 8     }
 9     index--;
10     return [self viewControllerAtIndex:index];
11 }
12 
13 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
14 {   // 获得当前的控制器对应的index,然后+1,创建后面一个控制器,然后返回
15     NSUInteger index = ((PageContentViewController*) viewController).pageIndex;
16     if (index == NSNotFound)
17     {
18         return nil;
19     }
20     index++;
21     // 如果越界了,就返回nil
22     if (index == [self.arrPageTitles count])
23     {
2
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇IOS MenuController的部分操作 下一篇04_Swift2基础之类型安全和类型推..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目