场景转换是iOS开发中最基本的需求。为了让本身的App更加的酷炫,咱们每每须要定制一些转场效果。在iOS中,能够经过多种方式设定转场效果。这里简单列表以下:html
Modal presentationios
modalTransitionStyle
属性。Navigation View Controller presentationapp
CATransition
看起来更像为Navigation View Controller和TabBar View Controller这样的容器Controller定制的转场效果类。提供了不少内置的的动画效果。CATransition还能够结合CoreImage的滤镜CIFilter共同实现很炫的场景转换。若想详细了解CATransition的用法,能够读一读苹果的文档。咱们注意到,转场每每发生在流程切换的时候。因此上面的转场效果代码,每每会放在自定义的转场方法中(多见于使用Nib开发)或放在自定义的UIStoryboardSegue类中(多见于使用Storyboard开发)。因此不少时候,咱们每每会碰到原生的转场方法与定制的动画效果有必定冲突。由于像presentViewController:animated:completion:
这类方法自己就自带有内置的动画效果,自定义的动画效果每每在这个方法以外。因此不少时候须要用一些trick来避免这些问题。所以代码的可读性每每不会很好,而且写的很差的时候还会带来效率方面的问题。ide
iOS7之后,苹果引进了新的Transition API。这些API的使用方式,苹果没有给出一个官方的Guide,可是在网上,已经有不少Blog和教程讲解如何使用这些API,好比这篇文章。
新的Transition API彻底改变了上面提到的动画与原生转场接口不兼容的问题。在新的API中,咱们能够将动画效果代码单独封装到animator对象中,在设定好View Controller的transitoningDelegate后,再调用原生的转场方法,就会自动使用定制的动画效果。考虑到如今大部分App已经逐渐放弃了对iOS6的支持,因此这种方法是目前推荐的转场效果定制方法。单独封装的动画效果类在代码管理上也更加方便。学习
这里须要注意的一点,iOS6中引入的Storyboard Unwind Segue每每都须要一个Container View Controller。一个很常见的问题就是新手在定制Segue的时候每每会发生自定义的Unwind Segue不起做用。这个问题通常都是因为没有正确实现Container View Controller所需的方法带来的。我将在下篇文章讨论这个问题。动画