20

加载游戏中心时,其默认方向是纵向。为了将其锁定为横向模式,添加了一个类别。

@implementation GKMatchmakerViewController (LandscapeOnly)

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

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotate {
    return NO;
}
@end

它在 iOS 6 以下运行良好。但在 iOS6 中它显示错误。

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

请解释一个解决方案。

4

2 回答 2

39

最后,我按照 Apple 的 iOS 6发行说明中提到的解决方法避免了崩溃。

解决方法:

1.Apps should provide the delegate method application:supportedIntefaceOrientationsForWindow and ensure that portrait is one of the returned mask values.

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

    return UIInterfaceOrientationMaskAllButUpsideDown;
}

2. 当涉及到 UIBNavigationController(或 UIViewController)时,继承 UINavigationController/UIViewController 并覆盖supportedInterfaceOrientations。

 - (NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskLandscape;
    }

In buid summary supported orientations selected landscape right and landscape left.

现在游戏中心工作正常,没有崩溃。

于 2012-09-24T06:45:07.263 回答
0

必须添加1个小东西。在大约 2 天的时间里为那个愚蠢的问题而苦苦挣扎。如果上面没有帮助,并且你有 UINavigationController invovled(并且你已经做了子类)你需要以下内容(在 appDelegate 中):

[window setRootViewController:navigationController]; // use this
// instead of [self.window addSubview:navigationController.view];

thanx 2 http://grembe.wordpress.com/2012/09/19/here-is-what-i/

于 2012-11-16T11:02:10.130 回答