11

iOS 5中,我的应用程序使用了该方法来改变我的方向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

iOS 6中,我认为我应该这样做,但它什么也没做!我的应用程序旋转不是我想要的方式。

- (BOOL) shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight;
}
4

6 回答 6

28

这就是我添加我的viewController.

我替换了这一行代码:

[window addSubview:viewController.view];

通过这一行:

[window setRootViewController:viewController];
于 2012-09-21T20:27:39.790 回答
15

当设备改变方向时,在 iOS 6 中,系统会询问应用程序它支持哪个方向。应用程序将返回它接受的许多方向。

应用程序如何确定它的方向?

  1. 首先,应用程序检查它的 info.plist 方向(这对于确定使用哪个方向进行启动非常重要。
  2. 其次,它向它的应用程序委托询问它的方向,这可以通过-(NSUInteger)application:supportedInterfaceOrientationsForWindow:方法指定。这有效地覆盖了 info.plist 设置,此实现是可选的。默认情况下,iPad 应用程序面向所有方向,而 iPhone 几乎是上下颠倒的。
  3. 最后,应用程序委托查询它的最顶层视图控制器,这可以是 aUINavigationController或 a UIViewController... 等,然后它指定如何呈现以及是否要自动旋转。这些UIViewControllers可以使用shouldAutorotate:supportedInterfaceOrientations方法来告诉应用程序委托如何呈现它。

您必须确保设置窗口的根视图控制器。

此外,如果您正在全屏显示任何其他视图控制器,例如模态视图控制器,则这是负责确定方向变化与否的控制器。

于 2012-09-27T14:38:15.133 回答
2

对我来说,解决方案有效,情况有所不同,因为我有一个UINavigationController. 我的情况是我需要除一个之外的所有肖像窗口。我必须启用目标中的所有横向和纵向(否则它会在唯一的横向视图上崩溃)。

所以在这种情况下:

  1. UINavigationController为,创建一个子类
  2. 在那里插入旋转特定的东西
  3. 并使用子类而不是UINavigationController.
于 2012-09-27T14:24:21.120 回答
1

如果您使用的是 UINavigationController,它会将supportedInterfaceOrientations:消息发送到 UINavigationController 本身,而不是最顶层的视图控制器(即您实际希望它执行的操作)。

无需继承 UINavigationController 来修复它,您只需向 UINavigationController 添加一个类别即可

于 2013-07-28T19:11:21.003 回答
0

我在我的单例中创建了一个新变量:canRotate,当我希望视图控制器支持某些方向时,我将其设置为 YES。

在 appDelegate 我添加了这个:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if([[SharedData sharedInstance] canRotate])
    {
        return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
    }
    return UIInterfaceOrientationMaskPortrait;
}

就我而言,它有效。我有一个自定义选项卡栏,UINavigationviewControllers 作为子视图添加到 rootViewController。

于 2012-09-28T09:44:49.440 回答
0

我知道这听起来很简单,但是在我的 iPhone 上进行测试时,我绞尽脑汁想弄清楚方向问题——我在纵向模式下设置了物理自动锁定模式——所以我没有以编程方式改变任何事情——认为这应该是故障排除步骤 1 !

于 2013-04-30T16:43:11.090 回答