ошибка вращения iPad при использовании MPMoviePlayerViewController

Сводка проблемы

При изменении ориентации устройства iPad или средства моделирования при проигрывании использования видео MPMoviePlayerViewController приводит к непоследовательному состоянию вращения на увольнение видеоплеера. Это - известная ошибка в iPad SDK 3.2, зарегистрированном по http://www.openradar.me/8012810

Демонстрационный проект

Я подготовил минимальный демонстрационный проект с помощью Основанного на представлении Шаблона приложений от XCode 3.2.2, с помощью следующего кода для запуска плеера

NSURL *movieUrl = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:movieUrl];
[self presentMoviePlayerViewControllerAnimated:player];
[player release];

Код доступен на GitHub по http://github.com/adamalex/FullScreenMovie или прямой загрузке с помощью http://github.com/adamalex/FullScreenMovie/zipball/master

Шаги для репродуцирования

  1. Получите проект с помощью информации выше
  2. Запустите проект со средством моделирования iPad или устройством
  3. Коснитесь кнопки, чтобы начать играть видео
  4. Поверните iPad на 90 градусов
  5. Отклоните видео
  6. Обратите внимание, что UIStatusBar является вне синхронизации с приложением UI

Цель

Я связался с Apple, и они подтвердили, что это - ошибка, которая исследуется. Я хотел бы обсудить временные обходные решения, которые используют общедоступные API, безопасные для представления к App Store. Я собираюсь открыть случай поддержки разработчиков с Apple также и сообщу со своим собственным успехом.

10
задан Adam Alexander 22 June 2010 в 10:33
поделиться

2 ответа

Успешный ответ от технической поддержки разработчиков Apple!

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

Вам нужно будет реализовать это в контроллере представления, который представляет проигрыватель фильмов.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
   [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
   [self performSelector:@selector(fixStatusBar) withObject:nil afterDelay:0];
}

- (void)fixStatusBar {
   [[UIApplication sharedApplication] setStatusBarOrientation:[self interfaceOrientation] animated:NO];
}

Хотя это несколько некрасиво, на данный момент это должно решить проблему. Рекомендуется удалить этот код, как только ошибка будет исправлена в системе.

Для меня это полностью решило проблему, и вы можете просмотреть http://github.com/adamalex/FullScreenMovie код с исправлением.

15
ответ дан 3 December 2019 в 22:34
поделиться

Это также решает проблему поворота iPhone/iPodTouch, с которой я боролся. Я разрабатываю универсальное приложение, в котором каждый вид отображает разные изображения в зависимости от того, в какой ориентации находится устройство - книжной или альбомной. Для перехода между видами используются кнопки.

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

Большое спасибо за сообщение об ошибке - я полагал, что это просто мое плохое кодирование...

0
ответ дан 3 December 2019 в 22:34
поделиться