0

私は本当に短いイントロビデオで始まるユニバーサルアプリケーションに取り組んでいます。だから私は単にMPMoviePlayerViewControllerを追加し、それをモーダルに提示します。iPhoneでは、ビデオを横向きモードで再生しても、すべて正常に動作します。ただし、iPadでは、デバイスのインターフェイスの向きに関係なく、ビデオは常にポートレートモードで再生されます。何時間も検索して、CGAffineTransformationや新しいビューの追加など、さまざまなことを試しましたが、何も機能しないようです。これが私が使っているコードです:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:videoName ofType:@"mp4"];
    NSURL *fileURL = [NSURL fileURLWithPath:filePath];  

    self.startupController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
    [self.startupController.moviePlayer setControlStyle:MPMovieControlStyleNone];
    [self.startupController.moviePlayer setScalingMode:MPMovieScalingModeAspectFit];
    [self.startupController.moviePlayer setFullscreen:YES];        
    [self presentModalViewController:self.startupController animated:NO];

この問題を解決する方法を知っていますか?私の意見では、これはAppleが提供するシンプルな機能であるはずですが、最も簡単なことは、私が最も心配しなければならないことです...

4

1 に答える 1

3

これが私がそれをした方法です。まず、この通知を聞いてください

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

次に、これを実装します:

- (void)detectOrientation {
    NSLog(@"handling orientation");
    [self setMoviePlayerViewOrientation:[[UIDevice currentDevice] orientation]];
}


- (void)setMoviePlayerViewOrientation:(UIDeviceOrientation)orientation {
if (lwvc != nil)
    return;
if (moviePlayerController.playbackState == MPMoviePlaybackStateStopped) return;
//Rotate the view!
CGFloat degree = 0;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.1];
switch (orientation) {
    case UIDeviceOrientationPortrait:
    case UIDeviceOrientationPortraitUpsideDown:
        degree = 0;
        moviePlayerController.view.bounds = CGRectMake(0, 0, 320, height);
        break;
    case UIDeviceOrientationLandscapeLeft:
        degree = 90;
        moviePlayerController.view.bounds = CGRectMake(0, 0, height, 320);
        break;
    case UIDeviceOrientationLandscapeRight:
        degree = -90;
        moviePlayerController.view.bounds = CGRectMake(0, 0, height, 320);
        break;
    default:
        break;
}
lastOrientation = orientation;
CGAffineTransform cgCTM = CGAffineTransformMakeRotation((degree) * M_PI / 180);
moviePlayerController.view.transform = cgCTM;
[UIView commitAnimations];
[[UIApplication sharedApplication] setStatusBarOrientation:orientation];
}

つまり、トリックは変換を使用することです

于 2012-09-24T10:48:39.980 に答える