在iOS 6中定义-shouldAutorotate方法的位置?

时间:2013-03-15 08:27:33

标签: objective-c ios6 auto-rotation

我正在尝试定义shouldAutorrotate方法,但我不知道在哪里定义它,因为它永远不会被调用。我有一个UITabBarController,在我的项目中有三个选项卡(每个选项卡,带有一个根导航控制器)。我的目标是在某些特定情况下禁用自动旋转。

谢谢!

3 个答案:

答案 0 :(得分:1)

好的,解决了。我做了什么:在我最顶层的导航控制器中我定义了

-(BOOL)shouldAutorotate {return [self.visibleViewController shouldAutorotate];}

然后,在我的下一个viewController

-(BOOL)shouldAutorotate {return NO;}

谢谢你们!

答案 1 :(得分:0)

您可以在要为其禁用自动旋转的viewcontroller.m文件中编写该方法 这是iOS 6的代码:

#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate
{
   return NO;
}
#endif

答案 2 :(得分:0)

阅读iOS 6.0 Release Notes

  

iOS 6中的自动旋转正在发生变化。在iOS 6中,   shouldAutorotateToInterfaceOrientation:UIViewController的方法是   弃用。在它的位置,你应该使用   supportedInterfaceOrientationsForWindow:和shouldAutorotate方法。

     

更多责任转移到应用和应用代表。现在,   iOS容器(如UINavigationController)不咨询他们的   孩子们要确定他们是否应该自行旋转。默认情况下,   app和视图控制器支持的界面方向已设置   用于iPad的成语和UIInterfaceOrientationMaskAll   用于iPhone习语的UIInterfaceOrientationMaskAllButUpsideDown。

     

一个   视图控制器支持的接口方向可以转换   时间 - 甚至应用程序支持的界面方向可以转换   时间。系统询问最顶层的全屏视图控制器   (通常是根视图控制器)用于其支持的接口   设备旋转时或视图控制器时的方向   呈现全屏模态演示风格。此外,   仅当此视图控制器时才检索支持的方向   从shouldAutorotate方法返回YES。系统相交   视图控制器支持的方向,支持应用程序   方向(由Info.plist文件或应用程序确定   委托的应用程序:supportedInterfaceOrientationsForWindow:   方法)确定是否旋转。

     

系统确定是否   通过交叉返回的值来支持方向   app的supportedInterfaceOrientationsForWindow:带有值的方法   由最顶层的supportedInterfaceOrientations方法返回   全屏控制器。

     

setStatusBarOrientation:animated:方法   完全不被弃用。它现在只适用于   最顶层全屏视图的supportedInterfaceOrientations方法   控制器返回0.这使得调用者负责确保   状态栏方向是一致的。

所以我首先尝试在app delegate中实现该行为。如果这对您的用例来说太粗糙,我会尝试为各个内容视图控制器实现-shouldAutorotate(注意单r!)方法。如果这不起作用(参见上面的引用),请在容器控制器中实现此方法,即。标签栏控制器或导航控制器。

另见WWDC 2012会议#236,The Evolution of View Controllers on iOS