我正在关注Apple's guide来构建我自己的自定义容器视图控制器。除了一个恼人的问题外,它似乎开箱即用。
我究竟如何指定我的子视图控制器何时会收到viewWillAppear:
和viewDidAppear:
来电(以及他们的disappear
对方)?
让我说我有一个儿童滑入父母或类似的动画。很自然地,我希望在动画开始时调用viewWillAppear:YES
,在结尾调用viewDidAppear:YES
。但是,默认情况下,当我的孩子的视图被添加到父视图中时,viewWillAppear:NO
和viewDidAppear:NO
会同时被调用。
现在,我知道在iOS 6中添加了beginAppearanceTransition:animated:
和endAppearanceTransition
方法,但我想支持iOS 5.看起来它们似乎也适用于高级案例:
将容器添加到容器后,容器会自动添加 将轮换和外观回调转发到子视图 一旦发生需要消息的事件,控制器就会出现 转发。这通常是您想要的行为,因为它可以确保 所有事件都已正确发送。但是,有时默认 行为可能会按照无意义的顺序发送这些事件 你的容器。例如,如果同时有多个孩子 更改其视图状态,您可能希望合并更改 外观回调都是在同一时间发生的 逻辑顺序。为此,您需要修改要采用的容器类 对外观或轮换回调负责。
还有transitionFromViewController:toViewController:duration:options:animations:completion:
方法在适当的时候调用外观方法,但它需要两个视图控制器在运行,并且通常在这里看起来不合适。当然,我可以做这个伎俩并喂它一个虚拟的孩子,但是认真地......
有什么我想念的吗?任何帮助将不胜感激。
答案 0 :(得分:3)
答案有点有趣。
文档可能会说在iOS 6+中可以使用beginAppearanceTransition:animated:
和endAppearanceTransition
,但事实并非如此。这些方法也可以在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);
This question's answer也说明了同样的事情。案件解决了!