MPMoviePlayerControllerを拡張しているカスタムクラスがあるので、電話の向きに合わせて回転できます。私のアプリは、ビデオの再生中の他のビューでの回転をサポートしていません。これはうまく機能します...しばらくの間。アプリが削除されて再インストールされるまで、ランダムにポートレート方向でのみ再生されます。他の誰かがこのようなものを見たことがありますか?しばらくこれを追いかけていて、直ると思う度に戻ってきます。
ありがとう。
MPMoviePlayerControllerを拡張しているカスタムクラスがあるので、電話の向きに合わせて回転できます。私のアプリは、ビデオの再生中の他のビューでの回転をサポートしていません。これはうまく機能します...しばらくの間。アプリが削除されて再インストールされるまで、ランダムにポートレート方向でのみ再生されます。他の誰かがこのようなものを見たことがありますか?しばらくこれを追いかけていて、直ると思う度に戻ってきます。
ありがとう。
私はまったく同じことをしました。私のアプリケーションはタブ ベースで、ムービー プレーヤー以外の回転をサポートしていません。これが私のコードです。一貫して回転するムービーの再生中に使用しています。この解決策を思い付くために、ムービー プレーヤー ビューが回転せず、MPMoviePlayer がボタン発行リンクを実行したことを使用しました。幸運を!
使用法:
CustomMoviePlayer* cPlayer = [[CustomMoviePlayer alloc] init];
[cPlayer playMovie:movieFilePath onViewController:self];
CustomMoviePlayer.h
#import <MediaPlayer/MediaPlayer.h>
@interface CustomMoviePlayer : UIViewController
@property(nonatomic, retain) MPMoviePlayerController* moviePlayer;
-(void)playMovie:(NSString*)filePath onViewController:(UIViewController*)view;
@end
CustomMoviePlayer.m
#import "CustomMoviePlayer.h"
#define degreesToRadian(x) (M_PI * (x) / 180.0)
#define radianToDegrees(x) ((x) * 180.0/M_PI)
@implementation CustomMoviePlayer
-(void)playMovie:(NSString*)filePath onViewController:(UIViewController*)controller {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotateMoviePlayer) name: UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
NSURL *url = [NSURL fileURLWithPath:filePath];
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
self.moviePlayer.controlStyle = MPMovieControlStyleDefault;
self.moviePlayer.shouldAutoplay = YES;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerDidExitFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:moviePlayer];
[controller.view addSubview:moviePlayer.view];
[self.moviePlayer setFullscreen:YES animated:YES];
}
- (void)moviePlaybackComplete:(NSNotification *)notification {
[self cleanupOnMovieComplete];
}
- (void)MPMoviePlayerDidExitFullscreen:(NSNotification *)notification {
[self cleanupOnMovieComplete];
}
- (void)cleanupOnMovieComplete {
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:moviePlayer];
if(_moviePlayer != nil) {
[_moviePlayer.view removeFromSuperview];
[_moviePlayer release];
_moviePlayer = nil;
}
/* Transform window to identity */
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
UIWindow *window = [UIApplication sharedApplication].keyWindow;
if (!window)
window = [[UIApplication sharedApplication].windows objectAtIndex:0];
[window setTransform:CGAffineTransformIdentity];
}
-(void)rotateMoviePlayer {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation != UIDeviceOrientationUnknown) {
CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadian(0));
UIWindow *window = [UIApplication sharedApplication].keyWindow;
if (!window)
window = [[UIApplication sharedApplication].windows objectAtIndex:0];
switch (orientation) {
case UIDeviceOrientationLandscapeLeft:
transform = CGAffineTransformMakeRotation(M_PI / 2);
[window setTransform:transform];
break;
case UIDeviceOrientationLandscapeRight:
transform = CGAffineTransformMakeRotation(-M_PI / 2);
[window setTransform:transform];
break;
case UIDeviceOrientationPortraitUpsideDown:
transform = CGAffineTransformMakeRotation(M_PI);
[window setTransform:transform];
break;
case UIDeviceOrientationPortrait:
[window setTransform:CGAffineTransformIdentity];
break;
}
}
}
@end