zoukankan      html  css  js  c++  java
  • 关于Page翻页效果, PageViewConrtoller

    Page View Controllers
    你使用一个page view controller用page by page的方式来展示内容。一个page view controller管理一个self-contained视图架构。这个架构的父视图由page View controller管理,并且子视图由你提供的view Controllers管理。

    一,解析Page View Controller
    一个page view controller有一个单独的视图,是你的内容的存放的地方。
    下图显示了page view interface的结构:最外面的棕色视图是父视图控制器,不是page view controller自身。page view controller没有自己的UI;然而,它对它的children做一个翻页效果。

    关于Page翻页效果--Page View Controller - supershll - 记忆里

     

    二,page view controller interface的对象:
    一个可选的代理,一个可选的数据源,一组current view controllers,一组手势识别者

    关于Page翻页效果--Page View Controller - supershll - 记忆里

     

    数据源按需提供viewControllers。
    委托提供响应基于手势的导航和方向更改。
    view Controllers的数组包含当前要显示的content view controller。数组中的items的数量基于传递给page view controller的选项。
    手势识别者只有在数据源被指定时才存在。这些手势识别者使用户通过轻击、flicking(快速滑动)或拖动翻页。

    三,创建page view controller interface:
    page view controller的view可以被缩放和嵌入到一个视图层次架构中。这意味着,不像一个导航控制器或tab bar controller,page view controller可以在广阔的范围内使用,而不是一些特别的情况。

    1,通过stroyboard创建page view controller: Page-Based Application Xcode模版创建一个新的带page view controller的工程。
    要添加一个page view controller到一个已经存在的storyboard:
    1)拖动一个page view controller,并添加一个page view controller scene 到你的storyboard.
    2)在属性检查器中,设置适当的选项。
    3)可选地,设置一个委托,数据源
    4)。。。

    2,通过代码创建一个page view controller:
    1)通过initWithTransitionStyle:navigationOrientation:options:方法创建一个page view controller
    2)可选地,设置一个代理、数据源
    3)设置初始的content view controllers
    4) 在屏幕上显示page view controller的view。

    3,设置最初的view controller:无论你是通过代码创建还是通过IB创建了一个page view controller,你都需要在将其显示到屏幕之前指定一个初始的view controller。
    调用setViewControllers:direction:animated:completion:方法。

    如果page view controller没有initial view controller,它的shouldAutorotateToInterfaceOrientation:返回NO,并抛出一个异常。

    四,自定义初始化行为:
    在初始化时,你传递给initWithTransitionStyle:navigationOrientation:options:方法的参数值和选项来自定义一个page view controller。在初始化后,这些属性都是只读的。你可以自定义:
    1)The direction in which navigation occurs.
    2)The location of the spine.(书脊的位置)
    3)The transition style. In iOS 5, the only valid transition style is UIPageViewControllerTransitionStylePageCurl.

    例如,

    Listing 3-1  Customizing a page view controller
    NSDictionary * options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:UIPageViewControllerSpineLocationMid] forKey:UIPageViewControllerOptionSpineLocationKey];

    UIPageViewController *pageViewController = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options];

    五、在运行时使用代理自定义行为:
    UIPageViewControllerDelegate协议:可以在设备方向更改时和用户导航到一个新页时执行动作,并且它可以更新书脊的位置来响应方向的转变。

    六、通过数据源提供内容:
    数 据源的方法被当前显示的view controller调用,并返回它之前和之后的view controller。为了简化查找前面和后面的viewcontroller,你可以在你的view controller里存储额外的信息,例如一个page number。
    如果指定了数据源,page view controller将关联手势识别到它的view。这些手势通过gestureRecognizers属性访问。

    要移动手势识别到另一个view,传递gestureRecognizers属性的值给目标view的addGestureRecognizer:方法。

    例如,如果你的page view controller没有充满屏幕,你将手势识别传递给其superview,可以更好地翻页,而不用必须在page view controller内翻页。

    七,通过设置current view controller提供内容:
    setViewControllers:direction:animated:completion:方法直接控制显示哪些内容。
    如果你没有设置数据源,你需要提供UI来移动pages,例如前进和后退按钮。手势驱动的导航只有在在你提供了数据源的时候才可用。

    八,特别考虑Right-to-Left和Bottom-to-Top Content:
    要通过数据源,使用一个page view controller来显示一个right-to-left或bottom-to-top内容,只需要反转下面两个方法的实现:
    1)在你的数据源中,实现pageViewController:viewControllerBeforeViewController: 并返回之后的的viewController
    2)pageViewController:viewControllerAfterViewController:返回前面的viewController>

    并且,你一般要设置书脊的位置为UIPageViewControllerSpineLocationMax

    原文网址: http://supershll.blog.163.com/blog/static/370704362012725326323/

     
     
     
  • 相关阅读:
    Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识
    Python自动化 【第十七篇】:jQuery介绍
    Python自动化 【第十六篇】:JavaScript作用域和Dom收尾
    Python自动化 【第十五篇】:CSS、JavaScript 和 Dom介绍
    Python自动化 【第十四篇】:HTML介绍
    Python自动化 【第十二篇】:Python进阶-MySQL和ORM
    Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis
    Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与SelectPollEpoll异步IO
    Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
    Python自动化 【第八篇】:Python基础-Socket编程进阶
  • 原文地址:https://www.cnblogs.com/Cheetah-yang/p/4656240.html
Copyright © 2011-2022 走看看