自定义转场 - Modal和Push自定义转场 - 代码

前言

我们来聊聊Modal和Push自定义转场。分成四步走。

  • modal基本界面
  • modal转场动画
  • push基本界面
  • push转场动画

modal基本界面和push界面都是使用系统的搭个大环境而已。没有什么技术含量。
modal转场动画相对于这篇文章而言算作是重点。
push转场动画本质是和modal转场动画是一样的。只不过写代码的位置不一样。modal转场动画的代码可以复用,也不难。

modal基本界面

01

  • 创建了两个控制器的对应的文件。
    • 一个叫AViewController(视图为红色、以下简称A)。
    • 一个叫BViewController(视图为蓝色、以下简称B)。
  • 在这两个控制器中的右上角添加了两个按钮。
    • 图片是从网上随便找的。
    • 位置是直接用frame设置的,如果写项目,还是建议大家使用AutoLayout。
  • 在A的点击事件中,modal出B。
  • 在B的点击事件中,dismiss。
  • so easy。

modal自定义转场

自定义转场的步骤主要是分为两个步骤来说,一个是无动画的,一个是有动画的。
首先要明确一点的是我们在手机上看到的都是view不是controller。view是视图我们能看的到的。而controller是来管理一个视图的,也可以理解成就是个写代码的地方。

然后,我们开始。

  • 无动画
    • 新建一个转场的代理类(TTTransition)
    • 遵守 UIViewControllerTransitioningDelegate 协议
    • 在跳转到B之前,我们通过B控制器对象的transitioningDelegate属性进行设置。
    • 实现协议中的前两个方法
      • animationControllerForPresentedController
      • animationControllerForDismissedController
      • 这两个方法需要的返回类型是遵守了另外一个协议 UIViewControllerAnimatedTransitioning 的对象,注意是另外一个类型。不是我们刚刚遵守的 UIViewControllerTransitioningDelegate 协议了。名字都挺长,但是不是一个东西哦。
      • 一会儿再说这两个协议到底都是干什么的。
    • 新建两个做转场动画的类(TTPresentTransition,TTDissmissTransition)
    • 遵守刚刚提示我们要遵守的第二个协议,也就是 UIViewControllerAnimatedTransitioning 协议
    • 这个协议有两个必须要我们实现的方法。直接进头文件复制粘贴。
      • transitionDuration
      • animateTransition
      • 第一个方法看名字我们知道是在设置动画时间。但是,通过该方法的注释我们可以看到This is used for percent driven interactive transitions。说是使用在交互式转场的。目前我们还么有涉及到,我们先就把他当成动画的时间来写。
      • 第二个方法我们先什么都不写,反正方法是个void的。
    • 这时候我们要回到TTTransition的类中
      • animationControllerForPresentedController方法中创建一个TTPresentTransition对象进行返回
      • animationControllerForDismissedController方法中创建一个TTDissmissTransition对象进行返回
    • 此时就不应该有错误了。运行一下。
      • 结果应该是点击了A控制器的按钮,B怎么也不显示。如果做到这里,不要觉得不显示是有问题的。因为我们在animateTransition方法中还什么都没写呢。既然没反应,说明我们写的代码能够起作用。应该感到高兴才对。

未完待续