0

プロジェクトには次のコントローラーとビューがあります。

PortraitController.m
PortraitView.xib
LandscapeController.m
LandscapeView.xib

ポートレートコントローラはポートレートビューのコントローラとして使用され、ランドスケープコントローラはランドスケープビューのコントローラとして使用されます。

両方のコントローラーを切り替えて、デバイスの向きが変わったときに表示する必要があります。 このアプローチはAppleによってアドバイスされていますが、これらはこれの使用可能な一般的な例を提供していません!

さまざまな例を見つけましたが、それらは私が必要としているものではありません-1つのコントローラー+同じxib内の2つのビュー、ナビゲーションコントローラーからのプッシュ+ポップ、前のビューの上に2番目のビューを配置します...それらのどれも私が必要とするものではありません。

デバイスの向きが変わったときに、これら2つのコントローラーとビューの組み合わせを(アニメーションで)切り替える最も簡単な方法は何ですか?

iOS5とiOS6の両方で機能するソリューションはありますか?

4

2 に答える 2

3

Appleが提供する例では、ストーリーボードのセグエメカニズムを使用して、あるビューから別のビューに移動します。UINAvigationViewControllerアプローチを使用する必要があるNIBファイルを使用している場合は、あるUIControllerViewから別のビューに移動する遷移を設定することもできます。

たとえば、このコードは、ページめくりアニメーションを使用して、あるUIViewControllerから別のUIViewControllerに切り替わります。

[UIView  beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController:yourViewController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:navController.view cache:NO];
[UIView commitAnimations];

あるビューまたは別のビューをいつプッシュするかを知る(またはストーリーボードに切り替える場合はセグエを使用する)という事実を実現するために、ナビゲーションコントローラーまたは現在のビューからUIDeviceOrientationDidChangeNotificationイベントをリッスンするように登録し、画面を処理する特定のメソッドを登録できます。たとえば回転

-(void)viewWillAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToChangeViewController) name:UIDeviceOrientationDidChangeNotification object:nil];

}

-(void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}

イベントの登録を解除することは非常に重要です

これがあなたが意図していることを達成する方法についての洞察をあなたに与えることができることを願っています

于 2013-01-22T21:00:10.567 に答える
2

問題に対する適切なアプローチは次のとおりです。 回転してさまざまなiOSビューを表示します。NSNotificationCenterを使用すると、回転イベントを管理し、コントローラーをプッシュ/ポップしたり、必要なビューを変更したりできます。これがお役に立てば幸いです。

于 2013-01-31T23:16:33.733 に答える