IOS 3.2以降、MPMoviePlayerControllerクラスを使用すると、ビュー階層にムービーを埋め込むことができます。今、私はこの問題に直面しています。MPMoviePlayerControllerのインスタンスを配置してポートレートビューを作成します。ユーザーが「フルスクリーン」ボタンをタッチすると、このビューはフルスクリーンモードになりますが、ビューは縦向きのままです。ユーザーがデバイスを回転させても、アプリが横向きのインターフェースの向きを禁止しているため、フルスクリーンのムービービューは自動回転しません。そのため、ムービープレーヤーの全画面表示の自動回転を許可するために、ビューコントローラーshouldAutorotateToInterfaceOrientation:メソッドを変更して、ムービープレーヤーが全画面モードの場合にのみ横向きにYESを返します。これは完全に機能します。ユーザーが全画面で入力してから横向きに回転すると、プレーヤーは横向きに自動回転し、画面全体に表示されます。
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
//return (interfaceOrientation == UIInterfaceOrientationPortrait);
if(UIInterfaceOrientationIsPortrait(interfaceOrientation)) {
return(YES);
}
if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
return([movieController isFullscreen]);
}
return(NO);
}
横向きのままで全画面表示の[完了]ボタンをタッチすると、問題が発生します。全画面が閉じてから、元のビューが自動回転します。ただし、この自動回転は必要ありません。
部分的ですが、受け入れられない解決策は、「MPMoviePlayerDidExitFullscreenNotification」をリッスンし、インターフェイスが横向きに回転している場合は、文書化されていないプライベート関数を使用するように方向を変更することです。
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]
これは機能しますが、このメソッドの使用は禁止されているため、受け入れられません。
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
を使用して方向を強制しようとしましたが、タブバーを使用しているため、これは機能しません(UITabBarは横向きのままです)。
ご協力いただきありがとうございます
MPMovieplayer用に別のビューコントローラーを使用できます。オーバーライドする必要はありません
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
元のViewControllerで。
MPMoviePlayerViewController を使用している場合、メソッドshouldAutorotateToInterfaceOrientation:
はデフォルトでYESを返すため、すべてがすでに適切に設定されています。サブビューとして使用したり、presentMoviePlayerViewControllerAnimated:
これをチェックしてください: MPMoviewPlayerControllerフルスクリーン再生回転と基になるUIViewController、ポートレートモードのみ(回転は許可されていません)
少し違う問題かもしれませんが、解決策は同じかもしれません。