3

背景:我想确保我的 viewController 在它出现时正确旋转。我的 viewController 具有出色的代码来管理可见时的旋转和方向。

问题:给定 NavigationController 中的两个 viewController,viewC1并且viewC2. 我做了以下事情:

1.) 将 rootViewController 设置为viewC1

2.) 推viewC2入 NavigationController

3.) 旋转

4.) 流行音乐viewC2

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

我能做些什么来确保viewC1调用willAnimateRotationToInterfaceOrientation重建自身以在新的轮换中正确显示?

附加信息: 这是所有代码(没有故事板/xib)。我对所有观点都有shouldAutorotateToInterfaceOrientation回报。YESwillAnimateRotationToInterfaceOrientation用来管理我所有的轮换。

哦,请不要黑客。例如,从轮换中复制代码,然后手动检查轮换并在viewDidAppear.

4

1 回答 1

1

想想方法的名称,以及你想要实现的目标。

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

您说您不想要 hack,但您描述为 hack 的方法可能是最合适的做法。拥有一个名为 like 的通用方法 -(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { ... } 并不是一个坏主意。这可以是整个视图控制器的方向变化转换的处理程序。

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

-(void) viewWillAppear:(BOOL)animated

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

在这两种情况下,请致电updateLayoutForOrientation:animated:为您完成工作。

于 2012-05-31T17:13:48.787 回答