0

私は2つの状態の間を行き来するiPadアプリケーションを持っています.1つはSplitViewを使用し、もう1つはTableViewを使用しています。

現在、私は単一の UIWindow オブジェクトを持っており、次のコードでビューを切り替えます

-(void) switchToStateA {
[viewControllerB.view removeFromSuperview];
[window addSubview:viewControllerA.view];
}
-(void) switchToStateB {
[viewControllerA.view removeFromSuperview];
[window viewControllerB.view];
}

デバイスの向きを変更しない限り、すべて正常に動作します。向きを変更して状態を切り替えた後、変更中にアクティブでなかった状態は、元の状態のフレーム内に残ります (ディスプレイの端に黒い領域が残ります)。向きをもう一度変更すると、新しい状態が修正されます。

追加してみました

[viewControllerA.view setNeedsLayout];

ビューを交換した後ですが、効果はありませんでした。

バックグラウンド ビュー コントローラーが向きのコールバックを取得するようにするにはどうすればよいですか? または、状態を切り替えるときに「更新」を呼び出すにはどうすればよいですか?

4

2 に答える 2

1

これは私の推測ですが、ビュー コントローラーのビューをウィンドウから削除する代わりに、ビューを非表示に設定し、exchangeSubviewAtIndex:withSubviewAtIndex:どのビュー コントローラーのビューをユーザーに表示するかを変更するにはどうすればよいでしょうか。ビューにスーパービューがないView Controllerに回転イベントを送信しないようにOSが最適化しているのだろうか。

アニメーションを工夫して、上部のビューのアルファを 0 にフェードさせ、下部のビューのアルファを 1 にフェードさせてから場所を切り替えることもできます。

于 2010-10-07T04:11:32.477 に答える
0

デバイスの向きの変更は、分離された UIView ではなく、UIViewController によって処理されます。問題を解決する最も簡単な方法は、コントローラーのビューを、ウィンドウから決して削除しないダム コンテナーにすることです。コンテナー ビューは、コントローラーの許可に従って常に正しく回転します。次に、コンテナビューにサブビューを追加/削除して、サブビューも回転させます。コンテナー ビューにサブビューを追加する前に、サブビューのフレームと自動サイズ変更マスクを設定することを忘れないでください。

于 2010-10-07T05:10:46.947 に答える