8

[更新]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; 

}

+0

ローテーションサポートは*ソートの* heirarchicalです。したがって、ムービープレーヤコントローラを提示していて、回転させない場合、最初のデバッグステップはムービープレーヤに接続するすべてのビューコントローラを 'shouldAutorotate..'メソッドでチェックし、' YES 'を返すようにすることです。 '(後で面倒を節約したい場合は、これを徐々に行うことができます)。それから、ポートレートにロックされるまで、一度に1つずつポートレートに切り替えて、あなたの回転を試みるときに 'UIKit'がチェックしているものを知っています。そこから行ってください。 – darvids0n

+0

@ darvids0nありがとうございます。私は本当に他のビューにポートレート以外のものをサポートさせたくありませんが、私はそれを試してみて何が起こるか見るでしょう。 – bennythemink

+0

@ darvids0n質問を更新しました。あなたが提案できるものは何ですか?アドバイスをいただきありがとうございます。 – bennythemink

答えて

10

[EDIT]以下のソリューションは、iOS5を上完璧に働いたが、もはやiOS6で動作します。私は将来的にこの問題を調べる時間があるかもしれません。([/ EDIT]

OK私はそれを修正しました。iOSがどのように方向変化をアプリケーションに通知するかを誤解していました。それはあなたのビューの階層に従っていると思っていましたが、それはあなたのビューの階層に従っていますし、向きの変化を子ビューコントローラに伝えるのはあなた次第です。設定:

ウィンドウ> RootViewController>タブバーコントローラ>ナビゲーションコントローラ>ビューコントローラ> MPMoviePlayerViewController

私は、ポートレートモードでのみtrueを返すようにタブバーコントローラをサブクラス化しました。私はルートビューコントローラshouldAutoRotateToOrientationメソッドからこれを返しました。これにより、すべてのビューがポートレートのみになります。

次に、RootViewControllerから呼び出されたpresentMoviePlayerViewControllerAnimatedメソッドを使用してモーダルで映画を紹介しました。これは自動的に、カスタムMPMoviePlayerViewControllerのshouldAutoRotateToOrientationメソッドと呼ばれ、ランドスケープとポートレートの両方でYESに設定されています:)

関連する問題