MPMoviePlayerController может выйти из полноэкранного режима, но верхняя панель пропала - PullRequest
3 голосов
/ 28 декабря 2010

Я транслирую фильм на iPad, используя MPMoviePlayerController.

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

Если пользователь затем нажимает «, выход из полноэкранного режима » или «Готово», анимация фильма возвращается к небольшому кадру (собственное поведение), НО - верхняя панель (панель навигации) ушел . Кроме того, видимые виды переместились вверх, позади и за строкой состояния.

Обратите внимание, что я вообще не касался верхней панели. Я не спрятал его вручную.

Я попытался восстановить панель навигации, отправив setNavigationBarHidden:animated в контроллер навигации текущего view-контроллера, а также в контроллер навигации tabbarcontroller. Я положил это в ответ на MPMoviePlayerDidExitFullscreenNotification (он срабатывает). Нет эффекта. Однако если мы вернемся к портрету, он мгновенно вернется.

Мои вопросы:

  • Почему верхняя панель не возвращается, когда пользователь выходит из полноэкранного режима?
  • Как мы можем вернуть верхнюю планку?

С уважением, Timo

P.S. Я продолжу экспериментировать со странностями, описанными в этом ТАК. Может быть связано.

Ответы [ 3 ]

3 голосов
/ 21 февраля 2011

Поскольку это, похоже, ошибка в SDK Apple (см. Пост-сценарий ниже), я обошел ее.

Когда вы получите MPMoviePlayerDidExitFullscreenNotification, выполните следующие действия:

  1. Отправка [setNavigationBarHidden:YES animated:NO] на панель навигации.
  2. Отправка [setNavigationBarHidden:NO animated:YES] на панель навигации.

Будет небольшой сбой, а именно, анимация полосы вниз,Тем не менее, это намного лучше, чем исчезновение вашего бара и удивление пользователя!

Кажется, animated:YES необходимо, чтобы бар (пере) установил свою позицию (а не только видимость).

Вы можете попытаться заставить его появиться мгновенно (animated:NO) после задержки 0 или 0,1 секунды, используя -performSelector:withObject:afterDelay:.Вероятно, вам все равно придется сначала запустить анимацию, иначе бар не отрегулирует свою позицию.

Приветствия, Тимо

PS Это похоже на ошибку в SDK.Например, если вы запустите приложение TED для iPad, вы можете воспроизвести его там.Шаги были чем-то вроде: воспроизвести видео, прижать к полноэкранному режиму, повернуть iPad в альбомную ориентацию, нажать «Готово».Немного поэкспериментируйте, и вы увидите, что навигационная панель исчезла.

2 голосов
/ 29 марта 2012

Я только что нашел лучший способ для этого (без сбоев при возврате из контроллера представления).Скрытие панели навигации при входе в полноэкранный режим и повторное ее отображение при выходе:

// In the view did load for example :
[[NSNotificationCenter defaultCenter] addObserver:self
     selector:@selector(moviePlayerWillExitFullScreen:) 
    name:MPMoviePlayerWillExitFullscreenNotification 
    object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidEnterFullScreen:) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];

// And in the ViewController put these methods :
- (void) moviePlayerWillExitFullScreen:(id)sender {
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

- (void)moviePlayerDidEnterFullScreen:(id)sender {
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

Это будет немного более плавным в анимации.

1 голос
/ 28 марта 2011

Первым предположением может быть то, что проблема с [MPMoviePlayerControler setFullScreen], и то же самое было у меня.Но, посмотрев более внимательно, я узнал, что проблема была в элементах управления, предоставленных Apple MPMoviePlayerController (Play, Pause, Done и т. Д.).Режим элементов управления установлен Apple по умолчанию.Когда мы вращаем устройство, элементы управления должны быть изменены в соответствии с новыми размерами экрана, чего не происходит.Итак, мы должны обновить элементы управления при вращении устройства.

Ниже приведен код, который сделал то же самое для меня:

//set the mode of controls before playing movie or when view loads
-(void) playMovie:(UIButton *)btn {      
    mpmpController.controlStyle=MPMovieControlStyleEmbedded;
}


- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toIO
                                duration:(NSTimeInterval)duration {
     //this sets the controls to None
     mpmpController.controlStyle=MPMovieControlStyleNone;    
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromIO {
    //reset the controlStyle
    mpmpController.controlStyle=MPMovieControlStyleEmbedded; 
}

Это отлично справится с задачей.По крайней мере, он сделал это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...