iOS中的转场研究(1)
2015-01-04 12:56
211 查看
场景转换是iOS开发中最基本的需求。为了让自己的App更加的酷炫,我们往往需要定制一些转场效果。在iOS中,可以通过多种方式设定转场效果。这里简单列表如下:
Modal presentation
设定ViewController的
这种方式也对应Storyboard中对应的segue transition的设置。这个属性是一个枚举类型,其值代表已经定制的几种转场风格。这种方式也是最简单的转场,不带有任何自定义的转场效果代码。
使用UIView的animation API实现自定义的动画。
这种方式是比较常见实现方式。除了官方的文档以外,大量的Blog文章都会详细讲解这些API的用法。UIView的animation API的使用比较直观,相对来说也是一种比较容易学习的动画实现方式。
Navigation View Controller presentation
使用UIView的animation API。
与Modal presentation相同,尽管在Storyboard中有专门为Navigation View Controller定制的Push segue(iOS8中被Show segue取代,因为后者支持iOS8中引进的Adaptive AutoLayout),但是Push segue并没有transtion属性,所以如果需要定制转场效果,可以使用UIVIew,使用方法和Modal presentation相同。
使用CATransition类。
我们注意到,转场往往发生在流程切换的时候。所以上面的转场效果代码,往往会放在自定义的转场方法中(多见于使用Nib开发)或放在自定义的UIStoryboardSegue类中(多见于使用Storyboard开发)。所以很多时候,我们往往会碰到原生的转场方法与定制的动画效果有一定冲突。因为像
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所需的方法带来的。我将在下篇文章讨论这个问题。
Modal presentation
设定ViewController的
modalTransitionStyle属性。
这种方式也对应Storyboard中对应的segue transition的设置。这个属性是一个枚举类型,其值代表已经定制的几种转场风格。这种方式也是最简单的转场,不带有任何自定义的转场效果代码。
使用UIView的animation API实现自定义的动画。
这种方式是比较常见实现方式。除了官方的文档以外,大量的Blog文章都会详细讲解这些API的用法。UIView的animation API的使用比较直观,相对来说也是一种比较容易学习的动画实现方式。
Navigation View Controller presentation
使用UIView的animation API。
与Modal presentation相同,尽管在Storyboard中有专门为Navigation View Controller定制的Push segue(iOS8中被Show segue取代,因为后者支持iOS8中引进的Adaptive AutoLayout),但是Push segue并没有transtion属性,所以如果需要定制转场效果,可以使用UIVIew,使用方法和Modal presentation相同。
使用CATransition类。
CATransition看起来更像为Navigation View Controller和TabBar View Controller这样的容器Controller定制的转场效果类。提供了很多内置的的动画效果。CATransition还可以结合CoreImage的滤镜CIFilter共同实现很炫的场景转换。若想详细了解CATransition的用法,可以读一读苹果的文档。
我们注意到,转场往往发生在流程切换的时候。所以上面的转场效果代码,往往会放在自定义的转场方法中(多见于使用Nib开发)或放在自定义的UIStoryboardSegue类中(多见于使用Storyboard开发)。所以很多时候,我们往往会碰到原生的转场方法与定制的动画效果有一定冲突。因为像
presentViewController:animated:completion:这类方法本身就自带有内置的动画效果,自定义的动画效果往往在这个方法之外。所以很多时候需要用一些trick来避免这些问题。因此代码的可读性往往不会很好,并且写的不好的时候还会带来效率方面的问题。
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所需的方法带来的。我将在下篇文章讨论这个问题。
相关文章推荐
- iOS中的转场研究(3)
- iOS中的转场研究
- iOS中的转场研究(2)
- iOS框架研究 之 UIResponder 可以接收事件的对象(一)
- CATransition转场动画-IOS开发
- IOS SDK 兼容性 研究
- CATransition转场动画-IOS开发
- IOS SDK 兼容性 研究
- 几天研究了一下IOS中soundtouch
- IOS SDK 兼容性 研究
- iOS工程中的info.plist文件的完整研究
- 基于rtsp的手机视频点播实现和研究(扩展支持android, ios平台)
- 【iOS开发】---- 转场动画 CATransition
- IOS——关于UIView的autoresizingMask属性的研究
- ios程序入口main及UIApplicationMain的研究
- IOS-转场动画Quartz Core的Core Animation函数包
- iOS工程中的info.plist文件的完整研究
- 新浪微博iOS版SDK“宝玉XP”框架研究的 学习笔记
- 小研究ios扫描二维码(zbar库)
- iOS后台多任务研究