2012-09-24 2 views
0

정말 짧은 소개 비디오로 시작하는 보편적 인 응용 프로그램을 만들고 있습니다. 그래서 간단히 MPMoviePlayerViewController를 추가하고 모달로 표현합니다. iPhone에서는 풍경 모드로 비디오를 재생할 때도 정상적으로 작동합니다. 그러나 iPad에서는 비디오가 세로 방향으로 재생됩니다. 나는 몇 시간 동안 수색을하고 CGAffineTransformation과 같은 다른 많은 것들을 시도하거나 새로운 뷰를 추가했지만 아무 것도 효과가없는 것 같습니다. 다음은 함께 작업하는 코드입니다.iOS : iPad에서 MPMoviePlayerViewController의 방향을 변경하는 방법은 무엇입니까?

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]; 

이 문제를 해결할 수있는 아이디어가 있습니까? 내 의견으로는 이것은 애플이 제공하는 단순한 기능이어야하지만 때로는 가장 쉬운 것들은 내가 가장 걱정해야만하는 것들이다. ...

답변

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]; 
} 

그래서 트릭 그냥

+0

는 신속한 답변에 감사드립니다 변환을 사용하고 있습니다. 하지만이게 내 문제를 해결할 수 있을까? UIDeviceOrientationDidChangeNotification 장치의 방향이 변경되지 않기 때문에 절대로 호출되지 않는다고 생각합니다. 앱은 단순히 다른 방향에서 시작됩니다. 내 문제를 이해합니까? – Bautzi89

+0

나는 그것을 마침내 관리했다. 고마워. 장치 방향을 관찰 할 필요가 없었습니다. 방금 MPMoviePlayerViewController를 호출 한 후 전환하고 함수를 사용했습니다. 잘 했어! – Bautzi89