willRotateToInterfaceOrientation:duration:从模态中解除后不调用iOS5

时间:2011-11-28 09:47:14

标签: cocoa-touch ios5 orientation

我的主要UIViewController会覆盖willRotateToInterfaceOrientation:duration:以使背景视图适应正确的方向。这样在停留在视图中时效果很好。

但在我的应用程序中,某些用户操作的结果可能导致呈现另一个“女儿”UIViewController。当用户完成该女儿UIViewController时,她通常会返回主视图控制器。我的代码调用dismissModalViewControllerAnimated:来执行此操作。

当女儿UIViewController在屏幕上时,用户更改iPad方向时会出现此问题。然后,主UIViewController将永远不会看到对willRotateToInterfaceOrientation:duration:的任何调用,并且其背景视图将是不正确的。

此设置在iOS 4中正常运行:dismissModalViewControllerAnimated:的iOS 4实施调用了UIWindow的{​​{1}},其_setRotatableClient:toOrientation:updateStatusBar:duration:force:调用了willRotateToInterfaceOrientation:duration:

显然,iOS 5的此行为已更改。

在iOS5下我的视图不在屏幕上时,我期望如何实现方向更改?我应该查询UIViewController中的当前方向吗?我这样做了,它解决了这个问题就好了,但我可能错过了一些东西。

1 个答案:

答案 0 :(得分:2)

尝试通过Notification Center处理界面更改,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification 
                                           object:nil];

在“orientationChanged”方法中做与界面相关的东西