2 つの ViewController を使用します。MainView と FlipViewController。MainView には一連のボタンとコントロール、およびグラフィックス ディスプレイが含まれており、FlipView には設定が含まれています。
MainView は、向きに応じて異なる XIB を読み込み、サポートするさまざまなボタンとグラフィックス画面を容易にします。これにより、物事をさまざまにレイアウトする柔軟性が大幅に向上します。プロジェクトは、StoryBoarding 機能が Xcode に追加される前に最初に作成されました。
通常の使用例は、MainView の縦向きモードで開始し、FlipView をビューに回転させるボタンをタッチすることです。私は FlipView で何かを行い (プログラムの側面を構成します)、変更をコミットします。これにより、MainView に戻ります。これまでのところ、すべて順調です。
この問題は、FlipView に入ってからデバイスを回転させて、FlipView が別の向きになると発生します。ポートレートをランドスケープに回転させたとしましょう。次に、FlipView から MainView に戻ります。この時点で、MainView は、FlipView が実行した Rotation を認識していません。そのため、Portrait XIB を使用して MainView を Portrait で表示しています。
MainView の willRotateToInterfaceOrientation は、FlipViewController から戻った後に呼び出されることはありません。したがって、方向の変更を検出することはなく、その結果、その方向の誤った XIB が保持されます。willRotateToInterfaceOrientation... の方向ハンドラーのサンプルを次に示します。
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
// if portrait, load the portrait XIB for Pad or Phone
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[[NSBundle mainBundle] loadNibNamed:@"MainViewiPad" owner:self options:nil];
}else{
[[NSBundle mainBundle] loadNibNamed:@"MainView" owner:self options:nil];
}
[self viewDidLoad];
intorient = 1;
else.... handle Landscape...
そこで私は、viewWillAppear ルーチンを試し、MainView に回転を認識させ、システムごとに実行させる方法を見つけようとしました。しかし、これまでのところ、システムをこのように機能させる方法がわかりません。viewWillAppear が呼び出されたときに、正しい向きのリロードを強制するコードを生成する必要があると思います。しかし、これは正しく機能していません。なぜなら、変更が時間内にロードされないようであり、viewWillAppear メッセージ内から新しい XIB をリロードしようとするのは正しくないようです。
この動作を理解するための助けをいただければ幸いです。