在iOS< 7中使用自定义转换/动画呈现视图控制器的正确方法

时间:2013-11-13 20:00:41

标签: ios animation uiviewcontroller transition

我希望使用原生presentViewController:animated:completion:dismissViewControllerAnimated:completion:方法简单地呈现视图控制器,但为此使用自定义动画。

执行此操作的常用方法是执行自定义动画(使用视图屏幕截图而不是查看自身)并在之后调用presentViewController:vc animated:NO completion:…

但在这种情况下,视图控制器生命周期消息不及时发送viewWillApper:viewDidAppear:一起发送而不是正常方式:第一个在动画之前,最后一个在之后。他们还将animated参数设置为NO

另一个坏处是在viewWillApper:调用之前捕获的视图(用于动画)的屏幕截图。所以它可能会过时,这会导致动画结束时轻弹。

我在github / cocoapods上搜索了很多相关的项目(也是SO的答案),但没有找到任何具有正确生命周期的呈现视图控制器。 有时甚至更糟糕的解决方案,例如简单的视图更改,而不需要调用生命周期方法。


我知道的可能解决方案

  • iOS7 - 我不能,我也需要在iOS6中
  • 在包含的视图控制器之间使用转换 - 不像“模态呈现”那样简单和可重用
  • 使用像here这样的棘手动画 - 我的动画无法以类似的方式实现

  • 在撰写此问题时,我考虑了使用重写perform:方法的自定义segue。但看起来并不容易。至少我不知道如何在没有故事板的情况下使用它以及如何以简单的方式解雇。


您是否知道如何在iOS6中使用自定义动画呈现视图控制器并使其生命周期快乐?


更新:最后我决定使用容器视图控制器。它能够自定义孩子的过渡并保护VC的生命周期。不好的一面:它不像iOS7中的自定义转换那么容易。它需要容器,使xib更难。并需要额外的代码来支持。

0 个答案:

没有答案