我希望使用原生presentViewController:animated:completion:
,dismissViewControllerAnimated:completion:
方法简单地呈现视图控制器,但为此使用自定义动画。
执行此操作的常用方法是执行自定义动画(使用视图屏幕截图而不是查看自身)并在之后调用presentViewController:vc animated:NO completion:…
。
但在这种情况下,视图控制器生命周期消息不及时发送。 viewWillApper:
和viewDidAppear:
一起发送而不是正常方式:第一个在动画之前,最后一个在之后。他们还将animated
参数设置为NO
。
另一个坏处是在viewWillApper:
调用之前捕获的视图(用于动画)的屏幕截图。所以它可能会过时,这会导致动画结束时轻弹。
我在github / cocoapods上搜索了很多相关的项目(也是SO的答案),但没有找到任何具有正确生命周期的呈现视图控制器。 有时甚至更糟糕的解决方案,例如简单的视图更改,而不需要调用生命周期方法。
我知道的可能解决方案:
使用像here这样的棘手动画 - 我的动画无法以类似的方式实现
在撰写此问题时,我考虑了使用重写perform:
方法的自定义segue。但看起来并不容易。至少我不知道如何在没有故事板的情况下使用它以及如何以简单的方式解雇。
您是否知道如何在iOS6中使用自定义动画呈现视图控制器并使其生命周期快乐?
更新:最后我决定使用容器视图控制器。它能够自定义孩子的过渡并保护VC的生命周期。不好的一面:它不像iOS7中的自定义转换那么容易。它需要容器,使xib更难。并需要额外的代码来支持。