iOS:ViewDidAppear上的方向检查旋转

时间:2012-05-31 16:09:36

标签: ios xcode ipad rotation orientation

后台:我想确保我的viewControllers在出现时正确旋转。我的viewControllers具有很好的代码,可以在可见时管理旋转和方向。

问题:在NavigationController中给出两个viewControllers,viewC1viewC2。我做了以下事情:

1。)将rootViewController设置为viewC1

2.。)将viewC2推入NavigationController

3。)旋转

4.。)Pop viewC2

5.。viewC1仍然停留在旧方向外观中(如willAnimateRotationToInterfaceOrientation中的转换代码中未调用),并采用新方向。

我该怎么做才能确保viewC1调用willAnimateRotationToInterfaceOrientation重新构建自己以便在新轮换中正确查看?

其他信息: 这是所有代码(没有storyboard / xib)。我在所有观看次数上都shouldAutorotateToInterfaceOrientation返回YES。我使用willAnimateRotationToInterfaceOrientation来管理我的所有轮换。

哦,请不要乱砍。例如,从旋转中复制代码,然后手动检查轮换并在viewDidAppear中进行管理。

1 个答案:

答案 0 :(得分:1)

考虑方法的名称,以及您想要实现的目标。

willAnimateRotationToInterfaceOrientation表示视图控制器控制的视图即将为特定方向设置动画。如果您的视图位于导航堆栈的中间,则它不会显示在屏幕上。制作不在屏幕上的东西是昂贵的,并且最终毫无价值。所以,这种特殊的方法是不可能的,但剩下的问题是在UIKit中没有其他更合适的方法。原因是当它在屏幕外是无价值的时候旋转某些东西(即使没有动画)。当视图出现时,开发人员有责任处理方向的变化(“按需转换”)。

你说你不想要黑客,但你所描述的黑客攻击方法可能是最合适的方法。有一个类似的通用方法 -(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { ... } 这不是一个坏主意。这可以是整个视图控制器的方向更改转换的处理程序。

您需要检查/处理方向问题的地方是

-(void) viewWillAppear:(BOOL)animated

-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration

并且在这两个方面,请致电updateLayoutForOrientation:animated:为您完成工作。