1

ほとんどの場合、私は物事をよく理解しています。1 つの小さな問題に頭を悩ませているようには見えません。この問題の概要をできる限り詳しく説明します。現時点では、質問をするためにコードを投稿する必要はないと思いますが、お気軽に質問してください。

ほとんどのアプリケーションと同様に、私のアプリケーションはデフォルトで縦表示になっています。メインのインタラクション領域では、ユーザーがデバイスを回転させたときに、主要なものを変更するコードを提供する必要はありません。代わりに、ビュー スタックの上に新しいビューを配置するからです。これはうまく機能し、ユーザーがデバイスを横向きモードで操作できる 2 つの方法のうちの 1 つです。

2 つ目は、UIWebView を使用してアプリ内から YouTube ビデオを再生する (このメイン インタラクション エリアから) モーダルに表示された画面を使用するもので、これもうまく機能します。

この問題は、ユーザーが横向きモードでモーダル ビュー コントローラーを閉じると発生します。ユーザーがランドスケープ モード用に調整されたコンテンツでメイン インタラクション エリアに戻り、このメイン インタラクション エリアのビュー コントローラーから通常呼び出されるデリゲート メソッドが呼び出されない場合、このデリゲート メソッドを使用してランドスケープを正常に変更します。 :

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { }

正確に何が起こっているかのスクリーンショットを含めます。

主なインタラクション エリア

ポートレート モードのメイン インタラクション エリアのスクリーンショット。

横長モード

ランドスケープ モードでのメイン インタラクション エリアのスクリーンショット。

モーダルから戻ったときの横向きモード

ランドスケープ モードでモーダル ビュー コントローラーを閉じてメインのインタラクション エリアに戻った後のメインのインタラクション エリアのスクリーンショット (コンテンツが中央に配置され、上部が切り取られ、伸びていないことに注意してください (私が要求しているわけではありません)それを行う)

理想的には、この状況では、ランドス ケープ モードからメイン画面に戻り、スクリーンショット 3 ではなくスクリーンショット 2 をユーザーに表示したいと考えています。

助言がありますか?繰り返しますが、コードを投稿できてうれしいです。前もって感謝します。

編集

答え:

非常に単純なので、ランドスケープ ビューをビュー スタックの一番上に配置するコードを独自のメソッド内で使用しました。次に、そのメソッドを、前に休ませたデリゲート メソッドと ViewWillAppear の両方で呼び出します。

4

1 に答える 1

2

willRotateToInterfaceOrientation:ビュー コントローラが画面の最上位ビューを制御している場合にのみ、システムはそのビュー コントローラに送信します。モーダルView Controllerを提示しているので、モーダルView Controllerは取得willRotateToInterfaceOrientation:しますが、(非表示の)View Controllerは取得しません。

viewWillAppear:モーダルView Controllerが消えているためにView Controllerのビューが再表示されようとしているときに、システムはView Controllerに送信します。したがって、実装する必要がありますviewWillAppear:。そのメソッドで、インターフェイスが横向きになっているかどうかを確認します。ある場合は、横向きのビューを表示します。それ以外の場合は、横向きビューを非表示にします。

于 2012-08-09T17:10:08.957 に答える