23

問題:ユーザーがGameCenterアカウントにログインしていない場合-GameCenter認証ビューがポートレートモードで起動され(iOS 5ではモーダルダイアログがありました)、ログインを求められます。ただし、xcode(プロジェクトの概要)またはsupportedInterfaceOrientationsForWindowでポートレートモードを無効にした場合: (私のアプリはランドスケープモードでのみ実行されることになっているため)私は次のようになります:

キャッチされなかった例外'UIApplicationInvalidInterfaceOrientation'が原因でアプリを終了しています、理由:'サポートされている向きにはアプリケーションとの共通の向きがなく、shouldAutorotateはYESを返します'

Portrait for ipad / iphoneを有効にした場合(および/またはsupportedInterfaceOrientationsForWindow :)をコメントアウトした場合、クラッシュすることなく機能しますが、Portraitモードを有効にしたくありません。

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

私の場合、問題はGameCenterから発生していることがわかりました。シミュレーターでゲームセンターをまだ初期化していない場合、ログインビューをポップアップしたいのですが、ポートレートモードです。このポイントに達すると、縦向きを許可しないとクラッシュします。ゲームセンターは、ランドスケープユーザーインターフェイスの意図に沿った方向にのみ許可された方向をとる必要があるため、OSの奇妙なバグ。

私はまだ解決策を持っていませんが、見つけたら投稿します。

于 2012-09-30T16:09:28.447 に答える
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 に答える
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は横向きで期待どおりに動作します。

Appleがそのリリースでバグを修正したので、別の解決策はiOS6.1以降をターゲットにすることです。

于 2014-02-16T18:08:12.923 に答える