Мое приложение довольно простое, с UINavigationController в качестве корневого контроллера, который отображает основной экран навигации и несколько экранов с подробностями.Главный экран не поддерживает вращение из-за ограничений макета, и для согласованности подробные экраны (которые просто помещаются в стек navcontroller) также не поддерживают.Однако некоторые подробные экраны содержат ссылки на видео, и видео необходимо отображать в портретном режиме.Приложение отображает проигрыватель модально, используя MPMoviePlayerController.
У меня только что была похожая проблема, и я попробовал решение выше, которое применяет аффинное преобразование к представлению MPMoviePlayerController, но проблема заключалась в том, что строка состояния продолжала отображаться как впортретный режим и перекрытие модального видеоплеера (слева, если смотреть в соответствии с вращением выше).Я попытался пару вещей безрезультатно:
Скрытие строки состояния.Это не сработало, потому что игрок существует в своем собственном мире, и все равно показывает строку состояния.Я не мог найти способ сделать это уйти.
Явно установить ориентацию строки состояния.Я не совсем уверен, почему это не сработало, но я подозреваю, что это потому, что я указал в своем info.plist, что поддерживается только портрет и, следовательно, он был отрезан от внесения изменений.
Net-net, вышеупомянутое не работает для меня.Точно так же, б / к Apple предостерегает разработчиков, чтобы они считали MPMoviePlayerController непрозрачным, и (особенно с помощью метода transform) я нарушал это.
В конце концов, я нашел более простое решение, которое сработало для меня:
В info.plist я указал, что все ориентации (кроме перевернутой, поэтому стандартная идиома iPhone) поддерживаются.
Подкласс UINavigationController и переопределите соответствующие методы shouldAutorotate, так что поддерживается только Portrait (см. это решение , среди прочего, как сделать это в iOS <6 и iOS6 одновременно). </p>
Это сработало, потому что:
Хотя я и указал, что приложение поддерживает автоповорот, я отключил его в подклассе UINavigationController, который содержит все представления, которые я 'm рендеринг ... так что все остается портретным, за исключением:
MPMoviePlayerController представлен модально, поверх NavigationController и живет в своем собственном мире.Поэтому можно свободно обращать внимание на то, что находится в info.plist, и вращать все по отдельности.
Существует множество примеров того, как представить игрока модально, но для быстрого ознакомления.вот мой код:
- (void)presentModalMediaPlayerForURL:(NSURL *)inURL
{
NSLog(@"Will play URL [%@]", [inURL description]);
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:inURL];
[player.view setBounds:self.view.bounds];
[player.moviePlayer prepareToPlay];
[player.moviePlayer setFullscreen:YES animated:YES];
[player.moviePlayer setShouldAutoplay:YES];
[player.moviePlayer setMovieSourceType:MPMovieSourceTypeFile];
[self presentModalViewController:player animated:YES];
[player release];
}