При изменении ориентации устройства 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
Я связался с Apple, и они подтвердили, что это - ошибка, которая исследуется. Я хотел бы обсудить временные обходные решения, которые используют общедоступные API, безопасные для представления к App Store. Я собираюсь открыть случай поддержки разработчиков с Apple также и сообщу со своим собственным успехом.
Успешный ответ от технической поддержки разработчиков 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 код с исправлением.
Это также решает проблему поворота iPhone/iPodTouch, с которой я боролся. Я разрабатываю универсальное приложение, в котором каждый вид отображает разные изображения в зависимости от того, в какой ориентации находится устройство - книжной или альбомной. Для перехода между видами используются кнопки.
Если приложение запущено на устройстве и портретный вид повернут в ландшафтный, происходит переключение изображений. Если затем положить устройство на стол и нажать кнопку для отображения следующего вида, то вид отображается в альбомной ориентации, но вместо него показывается портретное изображение. Я решил эту проблему, заставив появиться портретный вид путем обнаружения лица вверх и вниз, но код Apple решил эту проблему (а также аналогичную проблему с фильмами, с которой я также сталкивался).
Большое спасибо за сообщение об ошибке - я полагал, что это просто мое плохое кодирование...