问题:如果用户没有登录到GameCenter的帐户 - GameCenter的认证观点在纵向模式下启动(在iOS 5中有一个模式对话框)要求登录,但如果我在Xcode(项目概要)或supportedInterfaceOrientationsForWindow禁用人像模式: (因为我的应用程序应该在横向模式下只运行),我得到:
终止应用程序由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”,理由是:“支持的方向与应用程序中没有共同的方向,并shouldAutorotate是返回YES”
如果我能为人像的iPad / iPhone(和/或注释掉supportedInterfaceOrientationsForWindow :)它的工作原理没有崩溃,但我不希望启用肖像模式。
在写这个问题,并与实验代码,似乎我已经找到了解决方案:能够在项目总结所有方向和删除应用程序:supportedInterfaceOrientationsForWindow。
该代码添加到ViewController中:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
现在,它无缝工作。
添加到应用程序委托:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)w {
return (NSUInteger)[application supportedInterfaceOrientationsForWindow:w] | (1<<UIInterfaceOrientationPortrait);
}
我发现这个问题是从游戏中心未来在我的情况。 当在模拟器上我没有做游戏中心尚未初始化,它想弹出登录视图,但在肖像模式。 一旦达到这一点,崩溃,如果我不允许纵向。 在OS作为游戏中心应采取允许定向奇怪的错误仅是内嵌在我们的景观用户界面的意图。
我没有解决办法,但如果我找到它,我将发布。
我有同样的问题,因为你和我一个有点丑陋的工作围绕固定它,基本上我有我的应用程序的全局变量,我用它来选择有效的接口方向是什么。 在里面
- (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 。
这是一个粘糊糊的解决办法,但它很适合我。
希望这可以帮助!
捕捉异常似乎只是正常工作对我来说:
@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以上,苹果固定由释放的错误。
文章来源: GameCenter authentication in landscape-only app throws UIApplicationInvalidInterfaceOrientation