iOS开发专题

导航控制器的自定义转场动画-iOS

2017-02-07  本文已影响93人  BohrIsLay

这篇文章与我前面写的一篇文章"普通控制器的自定义转场动画的实现步骤-iOS"都是关于控制器的自定义转场动画的,前面一篇介绍了普通控制器的自定义转场动画的实现,这一篇则介绍导航控制器的自定义转场动画的实现。

在Object-C中,控制器的转场有两类,一类是导航控制器的push和pop,一类是普通控制器的present和dismiss,这里只讲导航控制器的转场动画,普通控制器的转场动画前面已经讲过。

当我们调用[self.navigationController pushViewController:vc animated:YES]或者[self.navigationController popViewControllerAnimated:YES]时,即可实现系统自带的导航控制器的push和pop转场动画,但是有时候你可能想要别的效果,这个时候就需要我们自定义控制器的转场动画了

当你了解后,你会发现,导航控制器的自定义转场动画,实现起来其实也很简单。以下的gif图里就是我实现的导航控制器的自定义转场动画,这也是调用[self.navigationController pushViewController:vc animated:YES]或者[self.navigationController popViewControllerAnimated:YES]实现的效果哦,跟系统的push,pop的效果明显不一样吧

NavigationControllerAnimatingTransition.gif
如果想直接看代码,到github下载demo,实现步骤如下:

1.push前的控制器遵守导航控制器协议UINavigationControllerDelegate

1.遵守协议.png

2..push前的控制器成为导航控制器的代理self.navigationController.delegate = self

2.成为代理.png

3.push前的控制器实现代理方法

-(id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController 
                                  animationControllerForOperation:(UINavigationControllerOperation)operation
                                                fromViewController:(UIViewController *)fromVC
                                                  toViewController:(UIViewController *)toVC

3.实现代理方法.png

需要注意的是,代理方法返回的是一个遵守UIViewControllerAnimatedTransitioning协议的对象,这个对象负责转场的动画控制,而这个协议里面又有两个方法需要实现

1.动画的时间:- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
2.动画的具体实现:- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext

不同的动画实现即控制着不同的效果,我这里push动画是透明度和视图的transform变化

透明度和transform属性变化的push.png

这样,导航控制器的push动画即实现完成。当push前的控制器调用[self.navigationController pushViewController:vc animated:YES]时,就会有push动画。当然现在还没有实现pop动画,pop动画是在push后的控制器里实现,实现步骤和push动画类似,也是上面几个步骤,具体可看代码。

聪明的你,了解实现步骤后是不是也很容易就可以做自己定制的push和pop动画了呢?

上一篇下一篇

猜你喜欢

热点阅读