MPMoviePlayerController не закрывается на iOS5.0

Я запускаю MPMoviePlayerController в полноэкранном режиме, а затем закрываю его кнопками по умолчанию. Он отлично работает на iOS4.3, но оставляет черный экран на iOS5.0 :(

Я делаю что-то неправильно? вот мой код:

Чтобы показать игроку:

- (void)showVideo {

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:theURL];  

// Register to receive a notification when the movie has finished playing.  
[[NSNotificationCenter defaultCenter] addObserver:self  
                                         selector:@selector(moviePlayBackDidFinish:)  
                                             name:MPMoviePlayerPlaybackDidFinishNotification  
                                           object:moviePlayer];      



moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
moviePlayer.shouldAutoplay = YES;  
moviePlayer.view.frame = [[UIScreen mainScreen] applicationFrame];
moviePlayer.view.transform = CGAffineTransformMakeRotation(1.57079633);    

[self.view addSubview:moviePlayer.view];  

[moviePlayer setFullscreen:YES animated:NO];  
}

Чтобы закрыть плеер:

- (void) moviePlayBackDidFinish : (NSNotification *) notification
{
MPMoviePlayerController *moviePlayer = [notification object];  
[[NSNotificationCenter defaultCenter] removeObserver:self  
                                                name:MPMoviePlayerPlaybackDidFinishNotification  
                                              object:moviePlayer];  

[moviePlayer.view removeFromSuperview];

[moviePlayer stop];
[moviePlayer release];  

//otherwise the status bar hides or changes color from time to time 
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}

person Daniel    schedule 17.10.2011    source источник


Ответы (3)


Я пытался решить ту же проблему после обновления до iOS5.

  • вот что я придумал на данный момент:

Это ошибка в MPMoviePlayerController после перехода в полноэкранный режим. По сути, вы не можете выйти из полноэкранного режима. Но это должно быть решено, если мы просто удалим MPMoviePlayerController. Но тут не повезло...

Может быть, основной вид не начинает перерисовываться после перехода в полноэкранный режим с видеоплеером? (Приостановка перерисовки представлений в полноэкранном режиме должна улучшить производительность воспроизведения видео. Насколько я знаю, так и должно быть.)

  • Вот решение: (спасибо, иди в мой колледж, у которого была первоначальная проблема)

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

//instead of going to fullscreen
//[moviePlayer setFullscreen:YES animated:YES];    
[moviePlayer.view setFrame:self.view.bounds];

//when the movie has finished playing release it
  • Решение проблемы ротации:

Напишите код ротации :)

person SpittingLlama    schedule 18.10.2011
comment
Элементы за ним, кажется, рисуются (некоторые элементы становятся видимыми на мгновение при вращении) - person Daniel; 18.10.2011
comment
Я думаю, это будет лучшее решение :( Я не могу поверить, что Apple SDK проходит через контроль качества. У них вообще есть отдел контроля качества? - person Daniel; 19.10.2011
comment
Если я найду лучшее решение этой проблемы, я добавлю его. Но я занят скучным дерьмом с базой данных. - person SpittingLlama; 19.10.2011
comment
Я нашел лучшее решение. Используйте PresentMoviePlayerViewControllerAnimated. - person Daniel; 20.10.2011
comment
спасибо, на выходных проверю. Я вернусь со своим основанием ;) - person SpittingLlama; 21.10.2011

изменять

player.controlStyle = MPMovieControlStyleFullscreen; 

to

player.controlStyle = MPMovieControlStyleDefault; 

и в MPMoviePlayerDidExitFullscreenNotification

 [player setControlStyle:MPMovieControlStyleNone];
person Vinay    schedule 26.12.2011
comment
Это исправило это для меня. Я специально не устанавливал стиль управления. Установка его на player.controlStyle = MPMovieControlStyleDefault устранила проблему отсутствия видео. Спасибо ! - person bartvdpoel; 20.04.2012
comment
У меня была эта проблема на iOS6, в то время как iOS5 работал нормально. Это решение - установить стиль управления на None - исправило это для меня. Спасибо! - person radiospiel; 26.01.2013

person    schedule
comment
не имеет значения. Кроме того, не странно ли посылать сообщение в представление объекта, который вы только что выпустили? - person Daniel; 17.10.2011
comment
Фактически, это решение может вызвать ошибку по причине, предложенной @dkk. Вы можете обнаружить, что в определенных ситуациях у вас возникают сбои. - person Dan Hanly; 18.10.2011
comment
На самом деле addSubview увеличивает количество сохранений объекта, поэтому отправка элемента управления Release уменьшает его количество сохранения на 1, но освобождается после удаления из Superview. Если сделать наоборот, ничего не изменится. Спасибо за минусование, не зная управления памятью... - person Lefteris; 18.10.2011
comment
Лол, не беспокойся. Вы правы в своем комментарии addSubview, мой плохой;) - person Dan Hanly; 18.10.2011
comment
@Lefteris: наоборот, делает то же самое. Если вы сначала удалитеFromSuperview, счетчик сохранения уменьшится, а выпуск уменьшится еще на один. Мне просто кажется более логичным называть релиз последним, может быть, это мой личный вкус. (тоже не минусовал: P) - person Daniel; 18.10.2011