20

Game Center が読み込まれると、デフォルトの向きは縦になります。ランドスケープモードでロックするために、カテゴリを追加しました。

@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' が原因でアプリを終了しています。

解決策を説明してください。

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が呼び出されている(そしてすでにサブクラス化されている)場合は、(appDelegateで)次のものが必要です。

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

ありがとう2http: //grembe.wordpress.com/2012/09/19/here-is-what-i/

于 2012-11-16T11:02:10.130 に答える