2012-09-14 7 views
23

問題: ユーザーがGameCenterアカウントにログインしていない場合、GameCenter認証ビューはポートモードで起動します(ios 5ではモーダルダイアログが表示されます)。 supportedInterfaceOrientationsForWindow Xcodeの(プロジェクト概要)または中ポートレートモードを無効にします(私のアプリは、ランドスケープモードで実行することになってONLY)私が手:ランドスケープ専用アプリのGameCenter認証でUIApplicationInvalidInterfaceOrientationがスローされます

が原因、理由「UIApplicationInvalidInterfaceOrientation」キャッチされない例外にアプリを終了:「サポートされている向きがいますアプリケーションの一般的な方向はなく、shouldAutorotateはYESを返す '

ipad/iphoneのPortraitを有効にした場合(および/またはsupportedInterfaceOrientationsForWindowをコメントアウトした場合)、クラッシュすることなく動作しますが、ポートレートモードを有効にしないようにします。

+0

解決方法が見つかりましたが、これはバグのように聞こえます。アップルでhttp://bugreporter.apple.comに登録してください。 –

+0

[iOS 6.0リリースノート](https ://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html)を参照してください。 [この回答](http://stackoverflow.com/a/12560069/1719)は公式の回避策があります。 – voyce

答えて

27

この質問を書いてコードを試してみたところ、解決策が見つかりました: プロジェクト概要ですべての方向を有効にし、アプリケーション:supportedInterfaceOrientationsForWindowを削除しました。

はViewControllerをにこのコードを追加します。

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

は、今ではシームレスに動作します。

+0

回避策を文書化しています –

+1

これは私のiOS 6シミュレータでは機能しません。 –

+0

どのくらい正確ですか?多分あなたは何かを忘れてしまったでしょうか?概要?あるいは、あなたは多くのビューを持っているかもしれません(私のアプリケーションがOpenGLビューを使用している間に1つしかありません)? – Tertium

1

この問題は、私のケースではゲームセンターから発生していることがわかりました。シミュレータでまだGame Centerを初期化していないときは、ログインビューをポップアップしたいのですが、ポートレートモードにします。このポイントに達すると、私はポートレートの向きを許可しないとクラッシュします。ゲームセンターとしてのOSの不思議なバグは、許可されたオリエンテーションをランドスケープユーザーインターフェイスの意図とインラインでしか取らないようにする必要があります。

解決策はまだありませんが、見つけたら投稿します。

+1

はい、記事タイトルに書かれているように、「GameCenter認証は横長のみ」に表示されます。 GCにはios6のiphoneの認証画面用のランドスケープ資産がないようですので、実際の解決策を見つけることはできません - ここで説明した回避策のみを探してください。そのため、ポートレートモードでアプリを起動できるようにする必要があります。ただし、ポートレートモードを使用しない場合は、メインビューでポートレートを無効にする必要があります。ちなみに、ios6のipadにはこのような問題はありません。 – Tertium

6

アプリデリゲートに追加:

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

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

} 
0

を基本的に私は何を選択するために使用する私のアプリでグローバル変数を持って、私はあなたと同じ問題を持っていたし、私の周りちょっと、醜い仕事でそれを固定しました有効なインターフェイスの向きです。

  extern int orientationIndicator; 

は、その後、あなたが値を変更することができます。

  int orientationIndicator = 1; 

は、グローバル変数の使用をインポートするには:

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

では、あなたのappDelegate.mファイルでこれを置くグローバル変数を宣言するために、さまざまなインターフェイスタイプで実行することができます。あなたがプレイヤーを認証し、ログインビューコントローラーを開始すると、方向インジケーターが2に設定されます。ビューを閉じる(プレーヤーを認証する)と、1に戻すことができます。

これは周りの粘り気のある作業ですが、それは私のために働いています。

希望すると便利です。例外をキャッチ

0

が私のためにうまく動作するように表示されます。

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

、例外がスローされますが、あなたはそれをキャッチした場合、その後のViewControllerはまだ表示されますとで期待どおりゲームセンターが動作します横向き。

代わりに、Appleがそのリリースでバグを修正したため、iOS 6.1以上をターゲットにすることもできます。

関連する問題