Я смог это сделать, но сейчас предупреждаю, это взлом.
Сначала я создал категорию для UITabBarController, которая называется
UITabBarController+SelectiveRotation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
}
Это позволяет TabBar свободно вращаться всякий раз, когда выбранная вкладка позволяет ориентацию. Убедитесь, что вы импортируете этот файл, где бы вы ни создавали UITabBarController
(возможно, в вашем делегате приложения).
Затем мой AppDelegate сделал себя делегатом панели вкладок, и я реализовал этот метод:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
// this ensures that the view that will be shown is presented in a supportred rotation
UIViewController *c = [[UIViewController alloc]init];
[viewController presentModalViewController:c animated:NO];
[viewController dismissModalViewControllerAnimated:NO];
[c release];
if ([UIViewController respondsToSelector:@selector(attemptRotationToDeviceOrientation)]) {
// this ensures that the view will be presented in the orientation of the device
// This method is only supported on iOS 5.0. iOS 4.3 users may get a little dizzy.
[UIViewController attemptRotationToDeviceOrientation];
}
}
Этот второй бит кода заставляет панель вкладок поворачиваться в приемлемую ориентацию при изменении вкладки. Например, если вы перейдете на вкладку, которая может вращаться, и перейдете в альбомную ориентацию, а затем перейдите на вкладку, которая поддерживает только книжную ориентацию, она приведет к изменению ориентации на книжную. В iOS 4.3 и более ранних версиях возврат к повернутой вкладке представит ее в той ориентации, в которой вы ее оставили. Я не мог найти способ обойти это.
Я сделал все это, потому что это было требование клиента, но я не думаю, что это на самом деле очень удобный дизайн. Я не нахожу слишком много визуальных настроек, чтобы сбить с толку, но принуждение устройства к вращению этим методом очень неприятно, потому что оно происходит мгновенно. Возможно, вы захотите попробовать и посмотреть, как вы к этому относитесь.