23

问题:如果用户未登录 GameCenter 帐户 - GameCenter 身份验证视图以纵向模式启动(在 ios 5 中有一个模式对话框)要求登录。但是如果我在 xcode(项目摘要)或 supportInterfaceOrientationsForWindow 中禁用纵向模式: (因为我的应用程序应该只在横向模式下运行)我得到:

由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”而终止应用程序,原因:“支持的方向与应用程序没有共同的方向,并且 shouldAutorotate 返回 YES”

如果我为 ipad/iphone 启用肖像(和/或注释掉supportedInterfaceOrientationsForWindow:),它不会崩溃,但我不希望启用肖像模式。

4

5 回答 5

27

在编写此问题并尝试代码时,我似乎找到了解决方案:启用项目摘要中的所有方向并删除 application:supportedInterfaceOrientationsForWindow。

将此代码添加到 ViewController:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

现在它可以无缝运行。

于 2012-09-14T15:54:32.373 回答
6

添加到应用委托:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)w {

return (NSUInteger)[application supportedInterfaceOrientationsForWindow:w] | (1<<UIInterfaceOrientationPortrait);

}
于 2012-12-15T06:27:20.937 回答
1

我发现问题出在我的游戏中心。在模拟器中我还没有初始化游戏中心时,它想弹出登录视图,但在纵向模式下。一旦达到这一点,如果我不允许纵向,它就会崩溃。操作系统中的奇怪错误,因为游戏中心应该采用允许的方向,只是为了符合我们横向用户界面的意图。

我还没有解决方案,但如果我找到它,我会发布。

于 2012-09-30T16:09:28.447 回答
0

捕捉异常对我来说似乎工作得很好:

@try {
    [rootNavigationController pushViewController:viewController animated:YES];
}
@catch (NSException *exception) {
    //somehow, catching this exception just allows the view controller to be shown?
}

在 iOS 6.0 中,会抛出异常,但如果您捕获它,则仍会显示 viewController,并且 GameCenter 将在横向上按预期运行。

另一种解决方案是针对 iOS 6.1 及更高版本,因为 Apple 通过该版本修复了该错误。

于 2014-02-16T18:08:12.923 回答
0

我遇到了和你一样的问题,我用一个有点丑陋的解决方法解决了这个问题,基本上我的应用程序中有一个全局变量,我用它来选择有效的界面方向是什么。在里面

    - (NSInteger)application : (UIApplication *)supportedInterfaceOrientationsForWindow:(UIWindow *)window{
          if(orientationIndicator == 1){
               return UIInterfaceOrientationMaskAllButUpsideDown;
          }
          else if(orientationIndicator == 2){
               return UIInterfaceOrientationMaskLandscape;
          }
     }

要声明全局变量,请将其放入您的 appDelegate.m 文件中:

          int orientationIndicator = 1;

要导入全局变量,请使用:

          extern int orientationIndicator;

然后您可以更改方向指示器的值,它将允许您在不同的界面类型中运行。所以我所做的就是让orientationIndicator = 1开始。当你验证玩家并启动登录视图控制器时,将方向指示器设置为2。当你关闭视图(验证播放器)时,你可以将它改回1 .

这是一个棘手的工作,但它对我有用。

希望这可以帮助!

于 2013-01-23T20:38:15.503 回答