willRotateToInterfaceOrientation未被调用

时间:2009-10-04 12:17:48

标签: iphone uiview uiviewcontroller rotation

我在视图控制器的YES函数中返回shouldAutorotateToInterfaceOrientation,我可以看到使用了返回YES的断点,但是willRotateToInterfaceOrientation方法不是被称为,也没有任何其他旋转方法。似乎在回归后YES没有任何反应!

有什么想法吗?

麦克

6 个答案:

答案 0 :(得分:19)

这是否将viewController视为某个其他根视图控制器的子视图,而不是导航控制器?如果是这样,那么调用不会传播到子视图控制器,这可能就是你的视图没有旋转的原因。

答案 1 :(得分:18)

我遇到了类似的问题并且看到了Daniel的答案,但是我在开发者文档中找不到任何确认。并不是说我不相信答案,但我真的不明白为什么定向调用不会传播。

有人给了我一个使用这样的东西的技巧:

[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectOrientation) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

答案 2 :(得分:4)

要查找的一件事是,我发现如果我UIPopoverController中有[UINavigationController viewDidAppear],则willRotateToInterfaceOrientationdidRotateFromInterfaceOrientation未被调用。看起来UIPopoverController是模态阻止旋转方法调用。

答案 3 :(得分:2)

是的,我也是。好的,它不会在子视图控制器中被调用 - 必须将其传递下去。可以处理。通知的想法很好除了,你只能得到“没有......”而不是“将......”(afaik),无论如何,这对于一个不应该存在的问题来说是一个混乱的解决方案。

我的错误是在我的loadView中调用[super loadView]Not supposed to do that。当我删除[super loadView]并自行分配视图willRotateToInterfaceOrientation开始工作时。

真正奇怪的是[super loadView]位于子视图控制器中,而且事件甚至没有达到顶级控件......

答案 4 :(得分:2)

如果您没有在任何视图控制器中的willAutoRotateToInterfaceOrientation上收到回调,请将视图控制器添加为根视图控制器的子视图控制器。

对于Eg;说self.viewController是您的根视图控制器,childViewController是您想要获得自动旋转回调的视图控制器,添加以下代码行;

[self.viewController addChildViewController:childViewController];

实际上,将子视图控制器添加到任何获得旋转回调的视图控制器也会起作用。

希望它有所帮助。

答案 5 :(得分:0)

Apple文档

  

在发布时,应用应始终以纵向方式设置其界面。在应用程序:didFinishLaunchingWithOptions:方法返回后,应用程序使用上述视图控制器旋转机制在显示窗口之前将视图旋转到适当的方向。

因此,如果您使用的是TabBarViewController,请注意在application:didFinishLaunchingWithOptions:方法中设置所选视图。