MPMoviePlayerViewController плохо отображается при воспроизведении видео

#objective-c #video #mpmovieplayercontroller

#objective-c #Видео #mpmovieplayercontroller

Вопрос:

Я пытаюсь показать видео в своем приложении. Приложение скрывает верхнюю панель iPhone. Проигрыватель, похоже, работает нормально. Есть только одна досадная проблема: когда проигрыватель показывает видео, он иногда показывает верхнюю панель, а иногда скрывает ее. Когда он скрыт, панель видеопроигрывателя немного выдвигается (того же размера, что и панель, которая была там раньше). Является ли ошибка Apple? Я делаю что-то не так? Вот мой код:

 - (void) showFullscreenMediaWithURL: (NSURL *) mediaURL
{
    MPMoviePlayerViewController *ctrl = [[MPMoviePlayerViewController alloc] initWithContentURL: mediaURL];
[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(playbackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:ctrl.moviePlayer];
    ctrl.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    ctrl.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [ctrl setWantsFullScreenLayout:YES];
    [self presentMoviePlayerViewControllerAnimated:ctrl];  
    [ctrl release];
}

-(void) playbackDidFinish:(NSNotification*)aNotification
{
   NSLog(@"Finished playback");  
   MPMoviePlayerController *player = [aNotification object];
   [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:player];
   [player stop];
   [self dismissMoviePlayerViewControllerAnimated];
   [[captureManager session] startRunning];
  

}

Ответ №1:

если под верхней панелью iPhone вы подразумеваете строку состояния iPhone, то решение должно быть простым. Непосредственно перед present / dismissMoviePlayerViewControllerAnimated добавьте следующее:

 // Hide Status Bar        
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
// Show Status Bar
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
  

Обновление: я вижу, в чем, по-видимому, ваша проблема.

Во-первых, верхняя панель со значками сетевой индикации и другой информацией — это строка состояния (и ничего больше). Ваша проблема, похоже, больше связана с ViewController, чем с медиаплеером. Другими словами, если бы вы попытались «включить» какой-либо другой ViewController на весь экран (как у проигрывателя), у вас возникла бы точно такая же проблема.

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

  1. Настройте полноэкранный RootViewController, который будет загружен в applicationDidFinishLaunchingWithOptions в вашем AppDelegate.
  2. При инициализации RootViewController установите ваш ViewController по умолчанию (тот, который вы использовали для загрузки из AppDelegate). Убедитесь, что рамка RootViewController.view заполняет экран.
  3. Создайте 2 сообщения в RootViewController: LoadFullscreen:ViewController и dismissFullscreen, используя present / dismissModelViewController. отсюда следует вызывать сообщения setStatusBarHidden.
  4. Чтобы включить проигрыватель на весь экран, создайте ViewController проигрывателя и выполните [RootViewController LoadFullscreen:player];

Есть несколько других способов, но, как правило, это лучшая практика и метод, который я рекомендую. Это относительно «много кода» для реализации, поэтому я не смог помочь вам с code snippers, но общая идея относительно проста.

Я надеюсь, что это поможет, например 🙂

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

1. Я уже пробовал это. Это не работает. Все мое приложение не отображает строку состояния (оно скрыто при запуске приложения). Когда видео показывается, я вижу, что панель опускается без строки состояния. Когда я нажимаю на экран, отображается строка состояния.

2. Извините, все еще не могу понять, что вы имеете в виду. Экранное видео с симулятором iPhone было бы прекрасно… для этого вы можете использовать встроенное quicktime

3. Могу ли я опубликовать вложение изображения здесь? в любом случае, это очень просто: при просмотре видео вы все равно можете видеть верхнюю панель iPhone. Иногда он просто есть, а иногда его там нет, но пространство, предназначенное для панели, есть. Я не могу скрыть верхнюю панель: либо есть верхняя панель, либо есть место для панели. Кстати, на месте для панели вы также можете увидеть видео.