1

基本タブバーテンプレートを使用して作成したiPad用タブバーアプリケーションがあります。いくつかのカスタムビューコントローラー(各タブに1つ、対応するNIBにそれぞれ1つ)を追加し、モーダルビューとして使用するNIB付きの追加のビューコントローラーも追加しました。私は、デバイスを回転させるまで、すべてがうまく動作します。ビューが回転しないのはなぜですか?

私のアプリは唯一縦向きをサポートしていますので、私はすべての私のビューコントローラでこれを持っていた:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIDeviceOrientationLandscapeLeft) && 
    (interfaceOrientation != UIDeviceOrientationLandscapeRight); 
} 

逆さにしたときただし、アプリは、シミュレータやデバイスに回転しないでしょう。私はすべての私のビューコントローラが上記のコードを持っていることを二重と三重にチェックしました。

私は全てのNIBを調べ、それらのすべてに "Rotate Subviews"が表示されていることを確認しました。 NIBの設定をデフォルトから変更したわけではありません。タブビューに表示するために必要な基本的な事項は別として、

私はこれにすべての私のビューコントローラにコードを変更してみました:

- (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation 
{ 
    return UIInterfaceOrientationIsPortrait(interfaceOrientation); 
} 

それは何の違いを作っていません。私は、すべてのView Controllerで同じメソッドが使用されていることを確かめました。他に何ができるのか分かりません。私はそれが上下逆さまに回転してはならない理由を見ることができません。

これについてのお手伝いがあれば幸いです。

答えて

1

私のView Controllerの1つがIBの関連するタブに接続されていませんでした。まだ画像を追加していないか、View Controllerのコードを書いていないので、IBで関連付けられていないことに気付かなかった。 I がshouldAutorotateToInterfaceOrientationメソッドを実行しましたが、IBで接続が確立されるまで有効ではないようです。

ありがとうございました。それは今では非常にイライラしている問題です。

0

「すべてのビューコントローラ」にタブバーコントローラが含まれていますか?

shouldAutoRotateToInterfaceOrientationの唯一のビューコントローラであるタブバーのアプリケーションでは、まったく評価されません。

+0

ありがとうございました。つまり、別のタブバーコントローラはありません。私は、MainWindow.xibのIBでそれを持っていますが、実装ファイルがありません。だから、私はそのコントローラのshouldAutoRotateToInterfaceOrientationをどのように設定するのですか? – beev

+1

それを作成してください。実装された唯一のメソッドがshouldAutoRotateToInterfaceOrientiationであっても。 –

+0

IBをお持ちの場合は、どのようなクラスを割り当てましたか?デフォルト値はUITabBarControllerです。それは1つがあることを意味します。あなたはそれをサブクラス化せず、独自のタブバーコントローラを使用しませんでした。データ構造によっては、タブバーコントローラにdidReceiveMemoryWarningを実装することもできます。 –

0

あなたが持っている最初のスニペットは、論理的に間違っています:

ここ
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation 
{ 
    return (orientation != UIDeviceOrientationLandscapeLeft) && 
      (orientation != UIDeviceOrientationLandscapeRight); 
} 

UIDeviceOrientationLandscapeLeftUIDeviceOrientationのインスタンスであるのに対し、orientationUIInterfaceOrientationのインスタンスです。 2つは同じタイプではないので、比較するべきではありません。

代わりに、あなたはUIInterfaceOrientationオプションを使用する必要があります

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

の方法

typedef enum { 
    UIInterfaceOrientationPortrait   = UIDeviceOrientationPortrait, 
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, 
    UIInterfaceOrientationLandscapeLeft  = UIDeviceOrientationLandscapeLeft, 
    UIInterfaceOrientationLandscapeRight  = UIDeviceOrientationLandscapeRight 
} UIInterfaceOrientation; 

変更を(肯定的ではなく、負に入れたときにコードが私にはもっと読みやすいようです)

+0

申し訳ありませんが、私は何とか最初の例の質問に間違ったビットのコードを貼り付けることができました。実際に自分のコードにあったものを反映するように変更しました。私はそれをあなたが提案したものに変更しようとしましたが、これは風景の方向のみを使用すると予想しますが、それでもポートレートで起動し、まったく回転しません。まったく同じコードを使用していて、正しく回転している他のアプリが2つあるため、奇妙です。 – beev

関連する問題