[更新]iPhoneはMPMoviePlayerViewControllerを使用してムービーを横向きに回転できません。
すべての親ビューコントローラをすべての向きに変更するように変更しました。私のアプリの構造は次のとおりです:AppDelegate> RootViewController>ビデオ> VideoDetails> MPMoviePlayerViewController。
すべての向きをサポートするようにこれらをすべて変更すると、ビデオは横長で再生されます。しかし、すべてのオリエンテーションをサポートすることは、私が欲しいものではなく、他の問題を引き起こします。他にも何かできますか?
おかげで
[/更新]
私はMPMoviePlayerViewControllerのカスタムサブクラスを使用して動画を表示する肖像ベースのiPhoneアプリを持っています。ユーザーを押すが、私はこのクラスのインスタンスを作成して再生し、モーダルそれを提示すると、次のように:
- (IBAction) playPressed:(id)sender {
NSString *filepath = [[NSBundle mainBundle] pathForResource:self.currentVideoModel.videoFileName ofType:@"m4v"];
NSURL *fileURL = [NSURL fileURLWithPath:filepath];
// MovieViewController is just a simple subclass of MPMoviePlayerViewController
self.moviePlayerController = [[MovieViewController alloc] initWithContentURL:fileURL];
// full screen code.
[self.moviePlayerController.moviePlayer setScalingMode:MPMovieScalingModeFill];
[self.moviePlayerController.moviePlayer setFullscreen:TRUE];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController];
[self presentMoviePlayerViewControllerAnimated:self.moviePlayerController];
}
問題は、それが肖像画で罰金果たしていることですが、私が風景にiPhoneの電源を入れたときの映像は静止ポートレートで再生し、ない風景:(アプリのすべてのビューコントローラは唯一縦向きをサポート
マイMPMoviePlayerViewControllerサブクラスのみ向きの変更を可能にするために、次のメソッドをオーバーライドしていないが、それは全く影響を与えています。
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
私がしたにもプログラム的にビデオを回転しようとしましたが、絶対に運がないので、常にポートレートモードにとどまります。
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
[self.view setTransform:CGAffineTransformMakeRotation(M_PI/2)];
return true;
}
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
[self.view setTransform:CGAffineTransformMakeRotation(M_PI * 2)];
return true;
}
else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
[self.view setTransform:CGAffineTransformIdentity];
return true;
}
else return false;
}
ローテーションサポートは*ソートの* heirarchicalです。したがって、ムービープレーヤコントローラを提示していて、回転させない場合、最初のデバッグステップはムービープレーヤに接続するすべてのビューコントローラを 'shouldAutorotate..'メソッドでチェックし、' YES 'を返すようにすることです。 '(後で面倒を節約したい場合は、これを徐々に行うことができます)。それから、ポートレートにロックされるまで、一度に1つずつポートレートに切り替えて、あなたの回転を試みるときに 'UIKit'がチェックしているものを知っています。そこから行ってください。 – darvids0n
@ darvids0nありがとうございます。私は本当に他のビューにポートレート以外のものをサポートさせたくありませんが、私はそれを試してみて何が起こるか見るでしょう。 – bennythemink
@ darvids0n質問を更新しました。あなたが提案できるものは何ですか?アドバイスをいただきありがとうございます。 – bennythemink