iOS自定义转场动画

473 查看

更新,更简单的自定义转场集成!

几句代码快速集成自定义转场效果+ 全手势驱动

写在前面

这两天闲下来好好的研究了一下自定义转场,关于这方面的文章网络上已经很多了,作为新手,我想通过这篇文章把自己这几天的相关学习心得记录一下,方便加深印响和以后的回顾,这是我第一写技术文章,不好之处请谅解,通过这几天的学习,我尝试实现了四个效果,废话不多说,先上效果图:

DEMO ONE:一个弹性的present动画,支持手势present和dismiss

弹性pop

DEMO TWO:一个类似于KeyNote的神奇移动效果push动画,支持手势pop

神奇移动

DEMO THREE:一个翻页push效果,支持手势PUSH和POP

翻页效果

DEMO FOUR:一个小圆点扩散present效果,支持手势dimiss

扩散效果

动手前

大家都知道从iOS7开始,苹果就提供了自定义转场的API,模态推送present和dismiss、导航控制器push和pop、标签控制器的控制器切换都可以自定义转场了,关于过多的理论我就不太多说明了,大家可以先参照onevcat大神的这篇博客:WWDC 2013 Session笔记 – iOS7中的ViewController切换,我想把整个自定义转场的步骤做个总结:

  1. 我们需要自定义一个遵循的协议的动画过渡管理对象,并实现两个必须实现的方法:
  2. 我们还需要自定义一个继承于UIPercentDrivenInteractiveTransition的手势过渡管理对象,我把它成为百分比手势过渡管理对象,因为动画的过程是通过百分比控制的
  3. 成为相应的代理,实现相应的代理方法,返回我们前两步自定义的对象就OK了 !模态推送需要实现如下4个代理方法,iOS8新的那个方法我暂时还没有发现它的用处,所以暂不讨论

    导航控制器实现如下2个代理方法

    标签控制器也有相应的两个方法
  4. 如果看着这些常常的代理方法名头疼的话,没关系,先在demo中用起来吧,慢慢就习惯了,其实哪种自定义转场都只需要这3个步骤,如果不需要手势控制,步骤2还可以取消,现在就让我们动手来实现效果吧

动手吧!

demo one

1、我们首先创建2个控制器,为了方便我称做present操作的为vc1、被present的为vc2,点击一个控制器上的按钮可以push出另一个控制器
2、 然后我们创建一个过渡动画管理的类,遵循协议,我这里是XWPresentOneTransition,由于我们要同时管理present和dismiss2个动画,你可以实现相应的两个类分别管理两个动画,但是我觉得用一个类来管理就好了,看着比较舒服,逻辑也比较紧密,因为present和dismiss的动画逻辑很类似,写在一起,可以相互参考,所以我定义了一个枚举和两个初始化方法: