• iOS7 push/pop转场动画


    前言

    iOS 7之后,苹果提供了自定义转场动画的API,我们可以自己去定义任意动画效果。本篇为笔者学习pushpop自定义转场效果的笔记,如何有任何不正确或者有指导意见的,请在评论中留下您的宝贵意见!!!

    请注意:如果要求支持iOS 7以下版本,则不可使用此效果。

    实现目标效果

    我们本篇文章目标效果:

    image

    视图切换种类

    如下效果图,这是有两大类视图切换动画的,一种是交互式的,另一种就是自定义的。

    image

    本篇只讲其中的UIViewControllerAnimatedTransitioning协议,来实现pushpop动画效果。另外的几个,后面会继续学习总结!!!

    协议

    我们要实现pushpop自定义转场效果,我们必须要有一个遵守了UIViewControllerAnimatedTransitioning协议且实现其必须实现的代理方法的类。

    我们先来学习UIViewControllerAnimatedTransitioning协议:

    我们要实现目标效果,就需要一个定义一个类遵守UIViewControllerAnimatedTransitioning协议并实现相应的代理方法。

    遵守UIViewControllerAnimatedTransitioning协议

    下面,我们来定义一个转场类,这个类必须要遵守UIViewControllerAnimatedTransitioning协议,如下:

    我们只需要公开一个工厂方法来生成对象即可,调用更简单些。第个参数用于指定是哪种类型,是push还是pop,第二个参数是用于指定动画时长。

    实现文件

    我们一步步分析下面的关键代码:

    分析Push动画

    我们暂不细说UIViewControllerContextTransitioning协议,我们这里只使用到了-containerView这个代理方法,我们可以通过苹果提供的键来获取对应的控制器:

    我们可以看到这是在iOS 7.0以后才有的,因此系统版本要求是在iOS 7才能使用。

    我们这里通过:

    获取到了fromVC,也就是当前要从哪个控制器切换。

    然后通过:

    获取到了toVC,也就是切换到哪一个控制器。

    然后再通过

    获取containerView视图。这个是一个代理方法,可以获取到视图容器。

    下面我们获取fromVC所点击的图片控件,然后通过-snapshotViewAfterScreenUpdates:将所点击的图片控件截图并用于切换使用,参数设置为NO,否则动画会很生硬。最后,我们还要将这个所点击的图片控件的坐标转换成容器视图的坐标:

    将下来就是设置切换动画之前的状态:

    下面这两行是非常关键的,并且必须保证tempView在最上层,否则动画效果就没有了。先将目标控制器的视图添加到容器中,再添加源图片的截图到容器中,用于显示切换效果。

    我们在动画中,将初始的截图的frame改变成最终的效果的frame即可达到我们的目标效果。另外要注意还需要将坐标转换成容器的坐标:

    当动画完成以后,一定要调用:[transitionContext completeTransition:YES],设置切换动画已经完成,否则想要pop回去就不能了。

    分析pop动画

    我们只讲不同于push部分的代码,我们添加了打印容器中的视图的代码:

    打印结果:

    从打印结果分析出来,在pop之前,第一个就是fromVC.view,第二个就是上次push时的截图。在动画完成之后,只剩下toVC.view了。

    我们还需要将toVC.view放在容器最上层:

    动画完成后,一定要将tempView移除:

    如果不移除,这个tempView会与所点击的图片控件等大小,位置一样,会挡住原图片控件,手势也就无法响应。我们一定要注意移除。动画完成后,也一定要设置[transitionContext completeTransition:YES]

  • 相关阅读:
    Android Gradle使用总结
    Jenkins实现Android自动化打包
    RxJava 2.x 使用最佳实践
    Android 路由框架ARouter最佳实践
    Android 加载GIF图最佳实践
    Java 锁机制 synchronized
    Fiddler抓包使用教程-断点调试
    Fiddler抓包使用教程-Android应用抓包
    Fiddler抓包使用教程-QuickExec
    Fiddler抓包使用教程-模拟低速网络环境
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5339667.html
Copyright © 2020-2023  润新知