iOS转场动画

在iOS系统中,优美的转场动画是构建一个优秀的app必不可少的因素。

转场动画,顾名思义,就是两个控制器在切换时产生的动画。

想要制作属于自己的转场动画最为简单的方式就是使用系统系统的转场方法:- (void)presentViewController:(UIViewController*)viewControllerToPresent animated: (BOOL)flag completion:(void(^)(void))completion;并将flag置为NO,然后实现自己的转场动画,在动画结束时,调用这个方法。

可以发现,使用这种方式是较为简洁,然而就代码来说,无疑是糟糕透顶,而且对复用来说也存在不小的问题。在这种情况下,我们可以使用另一种转场方式。

如果细心的同学会发现,在UIViewController中,有一个属性:transitioningDelegate,这个属性就是我们完成转场动画的关键所在。

在继承了UIViewControllerTransitioningDelegate 协议后,可以看到协议中有几个方法:

- (id)animationControllerForDismissedController:(UIViewController*)dismissed;和  - (id)animationControllerForPresentedController:(UIViewController*)presented presentingController:(UIViewController*)presenting sourceController:(UIViewController*)source;

从名字就可以看出,一个方法用于当控制器消失时返回转场对象,另一个用于当控制器跳转时返回转场对象。

接下来,我们需要构造自己的转场对象,并在这两个方法中返回,即可实现可重用且耦合性低的转场动画。

在建立我们自己的转场对象时,首先建立一个继承于NSObject对象的类,并实现UIViewControllerAnimatedTransitioning协议。重写其中的几个关键方法。

- (NSTimeInterval)transitionDuration:(id)transitionContext;和                                   - (void)animateTransition:(id)transitionContext;

第一个方法是返回动画的时间,第二个方法中定义我们所想要的转场效果。需要注意的是transitionContext参数,该属性实现了UIViewControllerContextTransitioning协议,通过这个参数,我们可以得到很多有用的信息,比如转场动画时的来源控制器和目标控制器,还有用于动画的对象。通过这些信息就可以根据我们自己的需求来定制转场动画。

最终实现的效果如下:

iOS转场动画_第1张图片

你可以在这里得到该项目。

你可能感兴趣的:(iOS转场动画)