我正在按照Apple 的指南构建我自己的自定义容器视图控制器。它似乎开箱即用,除了一个恼人的问题。
我究竟如何指定我的子视图控制器将接收viewWillAppear:
和viewDidAppear:
调用(及其disappear
对应对象)的时间?
假设我有一个孩子滑入父母的精美动画或类似的东西。很自然,我想在动画开始和结束时viewWillAppear:YES
被调用。viewDidAppear:YES
但是,默认情况下,当我的孩子的视图被添加到父母的视图中时,两者都会viewWillAppear:NO
同时被调用。viewDidAppear:NO
现在,我知道在 iOS 6 中添加了一些beginAppearanceTransition:animated:
方法endAppearanceTransition
,但我想支持 iOS 5。它们似乎也打算在高级情况下使用:
将子项添加到容器后,一旦发生需要转发消息的事件,容器就会自动将旋转和外观回调转发给子视图控制器。这通常是您想要的行为,因为它确保正确发送所有事件。但是,有时默认行为可能会以对您的容器没有意义的顺序发送这些事件。例如,如果多个子项同时更改其视图状态,您可能希望合并更改,以便外观回调以更合乎逻辑的顺序同时发生。为此,您需要修改容器类以接管外观或旋转回调的责任。
还有transitionFromViewController:toViewController:duration:options:animations:completion:
一种方法可以在适当的时候调用外观方法,但它需要两个视图控制器在起作用,并且通常在这里看起来不合适。当然,我可能会做这个把戏,喂它一个傻孩子,但说真的……
有什么我想念的吗?任何帮助将不胜感激。