美文网首页iOS动画
普通控制器的自定义转场动画的实现步骤-iOS

普通控制器的自定义转场动画的实现步骤-iOS

作者: BohrIsLay | 来源:发表于2017-02-07 13:46 被阅读101次

    在Object-C中,控制器的转场有两类,一类是导航控制器的push和pop,一类是普通控制器的present和dismiss,我们经常使用系统的API(如下所示)来实现控制器的转场动画

    1.导航控制器里使用到的转场动画代码

    [self.navigationController pushViewController:vc animated:YES]
    [self.navigationController popViewControllerAnimated:YES]

    2.普通控制器里使用到的转场动画代码

    [self presentViewController:secVC animated:YES completion:nil];
    [self dismissViewControllerAnimated:YES completion:nil];

    但是系统的转场动画可能有时候不是我们想要的效果,我们想自己定制控制器的转场动画,这就需要我们对控制器的转场动画的实现进行了解,本文只是针对普通控制器如何自定义实现转场动画的步骤进行陈述。

    自定义动画的效果很简单,如下。

    普通控制器转场动画效果图.gif

    一、自定义的方式present出一个控制器;
    二、自定义的方式dismiss刚才present的控制器;

    实现的步骤如下:

    1.第一个控制器:遵守控制器转场代理协议UIViewControllerTransitioningDelegate

    第一个控制器遵守控制器转场代理协议UIViewControllerTransitioningDelegate.png

    2.第一个控制器:实现控制器转场代理协议的present方法,和dismiss方法

    实现代理的present方法和dismiss方法

    3.点击present按钮时,让第二个控制器的转场代理transitioningDelegate为第一个控制器,并设置modal出的方式modalPresentationStyle为用户自定义,调用系统presentViewController方法[self presentViewController:secVC animated:YES completion:nil];

    设置第二个控制器的转场代理和modal方式,并调用转场方法.png

    看起来十分简单,就三个步骤,实现控制器转场代理协议的方法即可。

    需要说明的是,协议方法present和dismiss返回的是一个遵守控制器转场动画协议UIViewControllerAnimatedTransitioning的对象,这个对象控制着不同的转场动画的效果,而转场动画协议UIViewControllerAnimatedTransitioning负责转场动画的实现,这个协议有两个方法,一个是动画的时间,一个是动画的实现,需要用户自己定义

    转场动画协议的实现.png

    PresentAnimator对象的动画实现如下:

    Present动画实现的代码.png

    DismissAnimator对象的动画实现如下:

    Dismiss动画实现的代码.png

    代码详情,见demo

    相关文章

      网友评论

        本文标题:普通控制器的自定义转场动画的实现步骤-iOS

        本文链接:https://www.haomeiwen.com/subject/runxuttx.html