MPMoviePlayerViewController плохо отображается при воспроизведении видео - PullRequest
1 голос
/ 10 октября 2011

Я пытаюсь показать видео в своем приложении.Приложение скрывает верхнюю панель 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 Ответ

0 голосов
/ 10 октября 2011

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

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

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

Во-первых, верхняя полоса с сетьюзначки индикации и другая информация - это строка состояния (и ничего больше).Кажется, ваша проблема связана с ViewController больше, чем с MediaPlayer.Другими словами, если бы вы попытались «подтолкнуть» какой-нибудь другой 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];

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

Надеюсь, это поможет, ЭГ:)

...