Строка состояния iPad залипает после поворота во время воспроизведения видео - PullRequest
3 голосов
/ 20 мая 2010

Я ужасно переживаю, как это работает, и форум Apple Developer не помог.

У меня есть приложение, которое воспроизводит видео, и когда отображаются элементы управления фильмом и поворачивается iPad, строка состояния придерживается той ориентации, в которой было видео, до начала ориентации. Затем в верхней части окна появляется разрыв в 20 пикселей, а в строке состояния - другая ориентация.

Кто-нибудь видел эту проблему?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

У меня была такая же проблема:

  • запустить приложение в портретном режиме (например)
  • запустить видеоплеер (наш показывается с помощью presentModalViewController).
  • повернуть iPad
  • выйти из видео нажатием кнопки «Готово».

Bam! Макет нашего приложения нарушен (мы делаем некоторые нестандартные макеты для каждой ориентации), и строка состояния находится в неправильном месте, несмотря на то, что в видео находится в правильном месте.

Я сделал две вещи, чтобы исправить две проблемы:

  • убедитесь, что наша пользовательская конфигурация, которая выполняется в viewWillAppear, выполняется ПОСЛЕ вызова [super viewWillAppear];.
  • реализовать наблюдателей для MPMoviePlayerDidExitFullscreenNotification и MPMoviePlayerPlaybackDidFinishNotification (первый никогда не вызывался при нажатии кнопки «Готово» в моем случае).

Код для обратного вызова наблюдателя выглядит так:

[self performSelector: @selector(checkAndFixStatusBar)
           withObject: nil
           afterDelay: 0];

[[NSNotificationCenter defaultCenter] removeObserver: self];

И последний метод, вызываемый после преднамеренной задержки 0:

- (void)checkAndFixStatusBar
{
    UIInterfaceOrientation intOrient = self.interfaceOrientation;
    UIInterfaceOrientation sbOrient = [[UIApplication sharedApplication] statusBarOrientation];

    if (intOrient != sbOrient)
    {
        [[UIApplication sharedApplication] setStatusBarOrientation: intOrient animated: NO];
        NSLog(@"Fixed status bar orientation"); 
    }
}

Все еще ощущается мигание строки состояния, но это лучшее, что я придумал.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: я удалил шаг performSelector и напрямую вызвал настройку строки состояния, в моем случае это не делает заметной разницы (все еще мигает).

2 голосов
/ 10 августа 2010

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

  • зарегистрировать наблюдателя для MPMoviePlayerWillExitFullscreenNotification
  • в функции обратного вызова уведомлений запустите NSTimer, чтобы чуть позже (например, 0,1 с) вызвать другую функцию
  • в функции таймера сделать

    [[UIApplication sharedApplication] setStatusBarOrientation: [[UIDevice currentDevice] ориентация] анимированный: НЕТ];

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