3

背景: viewController が表示されたときに適切に回転するようにしたいと考えています。私のviewControllerには、表示されているときの回転と向きを管理する優れたコードがあります。

問題: NavigationController に 2 つの viewController がありviewC1viewC2. 私は次のことをしました:

1.) rootViewController をviewC1

viewC22.) NavigationController にプッシュします。

3.) 回転

4.) ポップviewC2

5.)は、新しい向きでviewC1古い向きの外観のまま (変換コード が呼び出されなかったため) のままです。willAnimateRotationToInterfaceOrientation

新しいローテーションで正しく見えるように自分自身を再構築するためのviewC1呼び出しを確実にするにはどうすればよいですか?willAnimateRotationToInterfaceOrientation

追加情報: これはすべてコードです (ストーリーボード/xib はありません)。私はすべてのビューにshouldAutorotateToInterfaceOrientation戻りました。私はすべてのローテーションを管理するためYESに使用します。willAnimateRotationToInterfaceOrientation

ああ、ハックしないでください。たとえば、ローテーションからコードをコピーし、ローテーションを手動で確認して で管理しviewDidAppearます。

4

1 に答える 1

1

メソッドの名前と、何を達成しようとしているのかを考えてください。

willAnimateRotationToInterfaceOrientationビュー コントローラによって制御されるビューが特定の向きにアニメーション化されようとしていることを示します。ビューがナビゲーション スタックの途中にある場合、そのビューは画面に表示されていません。画面に表示されていないものをアニメーション化するのはコストがかかり、最終的には価値がありません。したがって、その特定の方法は問題外ですが、残っている問題は、UIKit には他に適切なものがないことです。その理由は、画面外にあるときに(アニメーション化されていなくても)何かを回転させることは価値がないためです。ビューが表示されたときに方向の変更を処理するのは、開発者の責任です (「必要に応じて変換」)。

あなたはハッキングをしたくないと言っていますが、あなたがハックとして説明した方法はおそらく最も適切なことです。のような名前の汎用メソッドを持つこと -(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { ... } は、悪い考えではありません。これは、ビュー コントローラー全体の方向変更変換のハンドラーになることができます。

オリエンテーションの問題を確認/処理する必要がある場所は次のとおりです。

-(void) viewWillAppear:(BOOL)animated

-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration

updateLayoutForOrientation:animated:そして、これらの両方で、あなたのために仕事をするために電話してください。

于 2012-05-31T17:13:48.787 に答える