MPMoviePlayerController не будет автоматически изменять поворот на альбомную ориентацию

#iphone #objective-c #video #orientation

#iPhone #objective-c #Видео #ориентация

Вопрос:

Эй,
у меня есть мое приложение с навигацией по панели вкладок и всем остальным в портретном режиме, где поворот не поддерживается. Теперь я должен транслировать это видео, которое должно быть альбомным. Я использую MPMoviePlayerController, который в принципе работает нормально, но, хотя говорят, что он автоматически переключается в альбомный режим, он остается в портретном режиме.

 - (IBAction) openFourthInfo:(id)sender{
NSURL *url = [NSURL URLWithString:@"http://my-video.mp4"];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];  

[[NSNotificationCenter defaultCenter] addObserver:self  
                                         selector:@selector(moviePlaybackComplete:)  
                                             name:MPMoviePlayerPlaybackDidFinishNotification  
                                           object:player]; 

[[NSNotificationCenter defaultCenter] addObserver:self  
                                         selector:@selector(userPressedDone:)  
                                             name:MPMoviePlayerWillExitFullscreenNotification  
                                           object:player]; 

[self.view addSubview:player.view];  
[mainView setHidden:YES]; //Need to hide another subview here

player.fullscreen = YES;  
[player play];
}
  

Так я вызываю проигрыватель. В userPressedDone: и moviePlaybackComplete: я в основном просто устанавливаю mainView.setHidden = YES; , удаляю наблюдателя, удаляю и выпускаю проигрыватель.

Ничего экстраординарного. Есть идеи, почему плеер остается в портретном режиме? Я пытался

 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES]; 
  

Он анимировал меняющуюся строку состояния, но вид остался прежним. Добавив

 [[player view] setBounds:CGRectMake(20, 0, 480, 320)];
[[player view] setCenter:CGPointMake(160, 240)];
[[player view] setTransform:CGAffineTransformMakeRotation(M_PI / 2)]; 
  

ничего не происходит. Заменяя player view на self view , я просто поворачиваю родительский вид, а не вид проигрывателя.

В чем проблема и как я могу ее решить? Я пытаюсь примерно с 5 часов -.
Спасибо!

Ответ №1:

MPMoviePlayerController больше не работает в альбомной ориентации по умолчанию, поэтому, чтобы заставить его работать в альбомной ориентации, вам нужно применить преобразование к представлению.

 UIView * playerView = [moviePlayerController view];
[playerView setFrame: CGRectMake(0, 0, 480, 320)];

CGAffineTransform landscapeTransform;
landscapeTransform = CGAffineTransformMakeRotation(90*M_PI/180.0f);
landscapeTransform = CGAffineTransformTranslate(landscapeTransform, 80, 80);

[playerView setTransform: landscapeTransform];
  

Кроме того, если вам нужны обычные полноэкранные элементы управления, используйте следующий пример.

 moviePlayerController.fullscreen = TRUE;
moviePlayerController.controlStyle = MPMovieControlStyleFullscreen;
  

Комментарии:

1. Спасибо за быстрый ответ, это помогло! Но вот так кнопка «Готово» исчезла, так что нет возможности прервать просмотр фильма.. как мне вернуть его обратно?

2. Еще раз спасибо! moviePlayerController.fullscreen = TRUE; сломает его, показывая MainView, и не поворачивайте вид, не учитывая это, он отлично работает! Спасибо!

3. если он не сочетается с другим языком, тогда он должен быть moviePlayerController.fullscreen = YES;