11

私は、ユーザーがビデオを視聴できるようにするユニバーサル ipad/iphone アプリを持っており、それを全画面モードに拡張できます。

を実装(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)durationしました。そのメソッドで、ビュー要素が横向きか縦向きかに応じて、ビュー要素に対してさまざまな setFrame 呼び出しを実行します。

通常の使用ではすべて正常に動作しているように見えます。つまり、前後に回転すると正常に動作します。

しかし、ユーザーが縦向きモードで開始し、ビデオを開始し、全画面表示モードに移行し、横向きに切り替えた後、ビデオが停止した場合、多くの場合、要素のサイズが適切に変更されません。それらは、ポートレート モードであるかのように、サイズが固定されているように見えます。

次にポートレート モードに切り替えてからランドスケープに戻すと、ビューが正しくリセットされます。

奇妙な部分は、私が実装(void)exitedFullscreen:(NSNotification*)notificationし、そこに向きを出力したところ、正しく表示されたことです。現在の向きに基づいてビュー要素をリセットするコードも呼び出しますが、まだこの問題が発生しています。

別の関連する問題は、回転を処理するときに、ビューが画面の上に行きすぎて、実際にはデバイスの上部にあるステータス バーの下に移動することがあります。

編集これが最新の例です。全画面ビデオの再生中に横向きモードに回転し、全画面ビデオを終了すると、ビューの上部にあるナビゲーション バーに問題が発生します。

全画面ビデオ中に回転すると、ナビゲーション バーがステータス バーの下に移動します。

4

6 に答える 6

2

これを解決する方法の 1 つは、ナビゲーション ビュー コントローラーを使用する代わりにビュー コントローラーをモーダルに表示することです。

問題 pushViewController from Landscape to Portraitでの Kenny の回答を参照してください。

于 2012-04-26T09:22:35.350 に答える
1

ビューの上部にあるナビゲーション バー。このコードを使用して解決しました->

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];

ローテーション後にこれを使用します。

于 2012-04-25T11:17:59.957 に答える
1

別のコントローラーがファーストレスポンダーであるため、ViewController が回転していない可能性があります。これを回避するためにできることは、ビュー コントローラーをデバイスの回転の変更に登録し、そのような通知を受け取ったときに呼び出すセレクターに回転を実装することです。

appDelegate で:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

ビューコントローラーで

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:)name:UIDeviceOrientationDidChangeNotification object:nil]; 

回転したときは、向きを確認できます

    [[UIDevice currentDevice] orientation]
于 2012-04-20T12:05:57.380 に答える
0

メイソン、ログに記録して、メソッド willAnimateRotationToInterfaceOrientation:duration: が各状態遷移後に呼び出されるかどうかを確認しましたか?

于 2012-04-20T07:31:32.123 に答える
0

ファーストレスポンダーとして機能する別のコントローラーがある場合、向きが正しく更新されない場合があります。viewWillAppear:これを克服する最善の方法は、View Controller の現在の向きを使用してメソッドで画面の向きを設定するために使用する関数を呼び出すことです。[self interfaceOrientation]

サブクラス化されたサブビューを使用する場合は、メソッド layoutSubviews を再実装し、setNeedsLayout を呼び出す必要がある場合があります。これを引き起こしている可能性のあるもう1つのことは、ビデオをファーストレスポンダーとして持っているビューコントローラーを辞任することです(どこかでメトンresignfirstresponderを使用しているかどうかを検索し、それなしでどのように機能するかを試すことができます). これが機能しない場合、私にはわかりませんが、これは非常にトリッキーであり、実装方法に依存している可能性があります。ただし、ビューの自動回転とサイズ変更は、ビュー エディターのサイズ インスペクターによって処理されるようになったため、多くのコードは必要ありません。

これでいいと思います。

于 2012-04-20T11:03:28.630 に答える
0

私には、この最新のスクリーンショットは向きの変更の問題のようには見えません。ナビゲーション バーは、基本的にステータス バーの高さによってオフになっています。

フルスクリーン ビデオ (ステータス バーなし) の再生中にビューのフレームを使用していて、ステータス バーが戻るとすぐに失敗するため、位置の計算が失敗する可能性がありますか?

于 2012-04-24T14:11:53.657 に答える