Авторотация, UIWebView и UITabBarController - PullRequest
2 голосов
/ 15 марта 2011

У меня есть следующая иерархия представлений:

UITabBarController
 |
 UINavigationController
 |         |
 |         UIViewController (only supports Portrait rotation)
 |
 UINavigationController
 |         |
 |         UIViewController (only supports Portrait rotation)
 |
 UINavigationController
 |         |
 |         UIViewController (only supports Portrait rotation)
 |         |
 |         UIViewController (has UIWebView with movie in it)
 |
 UINavigationController
           |
           UIViewController (only supports Portrait rotation)

Проблема теперь в том, что когда я отображаю UIWebView с фильмом в нем, и пользователь нажимает «play», полноэкранный медиаплеер открывается, как и ожидалось. Однако я не могу повернуть фильм, так как родительский UIViewController поддерживает только книжную ориентацию (я проверял это). Когда я активирую альбомную ориентацию для родительского контроллера представления, он работает, но в этом случае у меня возникают проблемы с переключением вкладок пользователя, пока он находится в альбомной ориентации (см. Также этот вопрос, который я отправил вчера: Автотота игнорируется при смене вкладок

У кого-нибудь есть идеи, как это сделать? С одной стороны, я хочу дать пользователю возможность вращать видео, а с другой стороны переписать все другие viewController для поддержки ландшафта также кажется слишком большим усилием для преимущества.

Ответы [ 2 ]

0 голосов
/ 11 мая 2012

Вы можете отправить уведомление в контроллерах представления, чтобы сообщить другим контроллерам представления, что вращение необходимо, чтобы они возвращали ДА во все ориентации. Когда вы оставляете контроллеры представления, вы отправляете другие уведомления, которые больше не требуются. При таком подходе вы могли быиметь автоповорот только в тех представлениях, которые вы хотите, и как только вы покидаете эти представления, вы деактивируете его.

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

  • (void) viewWillAppear: (BOOL) анимированный {

    [super viewWillAppear: animated];

    NSNotification * autoRotationNotification = [NSNotificationtificationWithName:Объект kShouldAutoRotateNotification: [NSNumber numberWithBool: YES]];[[NSNotificationCenter defaultCenter] postNotification: autoRotationNotification];

}

  • (void) viewWillDisappear: (BOOL) анимированный {[super viewWillDisappear: анимированный];

    NSNotification * autoRotationNotification = [NSNotificationtificationWithName: kShouldAutoRotateNotification object: [NSNumber numberWithBool: NO]];[[NSNotificationCenter defaultCenter] postNotification: autoRotationNotification];}

0 голосов
/ 15 марта 2011

Рассмотрим другой подход: вместо того, чтобы представлять свой UIWebView с фильмом в нем, а еще UIViewController во всей иерархии контроллера вкладок, который связывает вас со всей проблемой вращения, попробуйте заменить контроллер представления верхнего уровня (UITabBarController) совершенно другой UIViewController (содержащий UIWebView).

Если вы хотите выйти из полноэкранного режима видео, снова установите UITabBarController в качестве контроллера представления верхнего уровня. Нотабене делать не забыть удалить «старый» контроллер представления, когда вы выполняете переключение - UIWindow становится очень недовольным, когда у него несколько дочерних представлений, а сообщения с авторотацией не отправляются и т. д.

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

Эта стратегия может показаться немного «незаклеенной», и вам, возможно, придется немного повозиться с более тонкими аспектами переключения, но это стоит посмотреть.

...