4

我正在按照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:一种方法可以在适当的时候调用外观方法,但它需要两个视图控制器在起作用,并且通常在这里看起来不合适。当然,我可能会做这个把戏,喂它一个傻孩子,但说真的……

有什么我想念的吗?任何帮助将不胜感激。

4

1 回答 1

3

答案很有趣。

文档可能会这样说beginAppearanceTransition:animated:并且endAppearanceTransition在 iOS 6+ 中可用,但事实并非如此。这些方法也可以在 iOS 5 中使用:

- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (void)endAppearanceTransition __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

这个问题的答案也说明了同样的事情。案件破案!

于 2013-06-05T23:26:50.117 回答