iOS7新特性 ViewController转场切换(一) 以前总结和关键API介绍

@在iOS7之前,View Controller的切换主要有4种:

1. Push/Pop,NavigationViewController

2. Present and dismis Modal

3. UITabBarController

4. addChildViewController(一般用于自定义的继承于 UIViewController 的容器子类)

iOS5,调用- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void
(^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);

(1)前面3种方法这里就不多说了,很常见的系统方法.至于第四种,我在前面文章-剖析网易标签栏的效果中已经做了阐述,但是它提供的容器转场动画只可以实现一些简单的UIView动画,但是难以重用,耦合高.

(2)关键的API:

A.动画控制器 (Animation Controllers) 遵从 UIViewControllerAnimatedTransitioning 协议,并且负责实际执行动画。

B.交互控制器 (Interaction Controllers) 通过遵从 UIViewControllerInteractiveTransitioning 协议来控制可交互式的转场。

C.转场代理 (Transitioning Delegates) 根据不同的转场类型方便的提供需要的动画控制器和交互控制器。

其中UINavigationControllerDelegate delegate 中新增了2个方法给NavigationController

UIViewControllerTransitioningDelegate 新增transitioningDelegate  给Modal的Present和Dismis

D.转场上下文 (Transitioning Contexts) 定义了转场时需要的元数据,比如在转场过程中所参与的视图控制器和视图的相关属性。 转场上下文对象遵从 UIViewControllerContextTransitioning 协议,并且这是由系统负责生成和提供的。

E.转场协调器(Transition Coordinators) 可以在运行转场动画时,并行的运行其他动画。 转场协调器遵从 UIViewControllerTransitionCoordinator 协议。

(3)新的API主要提供了2种VC切换的方式:

A.非交互式切换,即定义一种从一个VC到另一个VC的动画效果,切换的时候自动播放,

B.交互式切换,这种方式同样需要定义动画效果,只是这个动画效果会根据跟随交互式手势来切换VC并同时播放动画效果。iOS7提供了一个默认的基于百分比的动画实现 UIPercentDrivenInteractiveTransition,而且根据WWDC的说明,最简单的实现交互式动画的方法就是通过继承 UIPercentDrivenInteractiveTransition。

@待续.....下面一章通过实际Demo来展示

时间: 2024-10-07 04:08:06

iOS7新特性 ViewController转场切换(一) 以前总结和关键API介绍的相关文章

iOS7新特性 ViewController转场切换(三) 自定义视图控制器容器的切换---非交互式

@继续前面的内容,这一章,主要介绍自定义ViewController容器上视图VC的切换.先来看看系统给我们提供的容器控制器 UINavigationController和UITabBarController 都有一个NSArray类型的属性viewControllers,很明显,存储的就是需要切换的视图VC.同理,我们定义一个ContainerViewController,是UIViewController的直接子类,用来作为容器依托,额,其他属性定义详见代码吧,这里不多说了.(PS:原先我进

iOS7新特性 ViewController转场切换(二) 系统视图控制器容器的切换动画---push pop present dismis

@上一章,介绍了主要的iOS7所增加的API,可以发现,它们不是一个个死的方法,苹果给我们开发者提供的是都是协议接口,所以我们能够很好的单独提出来写成一个个类,在里面实现我们各种自定义效果.        1.先来看看实现UIViewControllerAnimatedTransitioning的自定义动画类 /** * 自定义的动画类 * 实现协议------>@protocol UIViewControllerAnimatedTransitioning * 这个接口负责切换的具体内容,也即&qu

ios7新特性实践

一 iOS 7 新特性:视图控制器切换API 二 iOS 7系列译文:认识 TextKit 三 iOS 7系列译文:iOS7的多任务处理 四 iOS7 最佳实践:一个天气应用案例(上) 五 iOS7 最佳实践:一个天气应用案例(下) ios7新特性实践,布布扣,bubuko.com

iOS7新特性

ios7.0中视图控制器中视图坐标布局问题 if ([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0) { self.edgesForExtendedLayout=UIRectEdgeNone;//ios 7中不调整屏幕坐标位置 } iOS6中 self.view的坐标是从导航栏下面开始的 (0,0,320,480) IOS7中 self.view是屏幕左上角开始的 默认也是(0,0,320,480)填充整个屏幕 如果你设置为

ios7新特性nsurlsession初探

ios7引入了nsurlsession,通过它可以支持后台相关的网络操作的新特性.让我们看看它有哪些好处: 1.后台上传下载: 2.不需要通过nsoperation,我们用nsurlsession的api就可以做到网络操作的暂停和恢复. 3.作为可配置的容器:例如你可以设置http头的一些属性并且保存在session里,你就不用重复去做配置了:don't repeat yourself~ 4.可以子类化并支持私有的存储: 5.对鉴权的回调做了改进,此前nsurlconnection的鉴权回调无法

iOS- 给App添加内购& 验证购买iOS7新特性

http://blog.csdn.net/tspangle/article/details/39315355 1.内购——应用内购买 我所说的内购——也可以说是应用内购买 大家都知道通过苹果应用程序商店有三种主要赚钱的方式: 1.直接收费(与国内大部分用户的消费习惯相悖,如果要收费,直接收高的,别收6块钱) 2.广告(降低用户体验 应用程序名称带Lite可以添加广告) 3.内购 至于设计哪些卖钱?产品经理需要认真考虑和调研的.记录用户行为是可以帮助产品经理确认哪些收费! 所以要做好游戏,一定要研

IOS7新特性 edgesForExtendedLayout

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. self.edgesForExtendedLayout = UIRectEdgeNone; 来解决UINavigationBar透明的问题.设置了UIRectEdgeNone之后,你嵌在

edgesForExtendedLayout ios7新特性导致autoLayout自动布局结果不正确

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. ? self.edgesForExtendedLayout = UIRectEdgeNone; ? 来解决UINavigationBar透明的问题.设置了UIRectEdgeNone之后

edgesForExtendedLayout ios7新特性用法摘录

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. 来解决UINavigationBar透明的问题.设置了UIRectEdgeNone之后,你嵌在UIViewController里面的UITableView和UIScrollView就不会