iOS中的转场研究(1)

场景转换是iOS开发中最基本的需求。为了让本身的App更加的酷炫,咱们每每须要定制一些转场效果。在iOS中,能够经过多种方式设定转场效果。这里简单列表以下:html

  • Modal presentationios

    1. 设定ViewController的modalTransitionStyle属性。
      这种方式也对应Storyboard中对应的segue transition的设置。这个属性是一个枚举类型,其值表明已经定制的几种转场风格。这种方式也是最简单的转场,不带有任何自定义的转场效果代码。
    2. 使用UIView的animation API实现自定义的动画。
      这种方式是比较常见实现方式。除了官方的文档之外,大量的Blog文章都会详细讲解这些API的用法。UIView的animation API的使用比较直观,相对来讲也是一种比较容易学习的动画实现方式。
  • Navigation View Controller presentationapp

    1. 使用UIView的animation API。
      与Modal presentation相同,尽管在Storyboard中有专门为Navigation View Controller定制的Push segue(iOS8中被Show segue取代,由于后者支持iOS8中引进的Adaptive AutoLayout),可是Push segue并无transtion属性,因此若是须要定制转场效果,可使用UIVIew,使用方法和Modal presentation相同。
    2. 使用CATransition类。
      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所需的方法带来的。我将在下篇文章讨论这个问题。动画

相关文章
相关标签/搜索