Я был в состоянии сделать это, но теперь я предупреждаю вас, это взломать.
Во-первых, я создал категория для 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 и более ранних версиях, возвращаясь к повернутой вкладке, вы увидите ее в ориентации, в которой вы ее оставили. Я не мог понять, как это сделать.
Я сделал все это, потому что это было требование клиента, но я не думаю, что это действительно очень удобный дизайн. Я не считаю слишком много визуальных настроек, чтобы дезориентировать, но принуждение устройства к вращению этим методом очень раздражает, потому что оно мгновенно. Вы можете попробовать и посмотреть, как вы к этому относитесь.
Этот метод может также решить нежелательное изменение ориентации, когда UIWebView закончил играть в полноэкранном режиме видео и заставить ваш портрет UIViewController на альбомную (вызванные UIMoviePlayerController в '- (BOOL) setUIOrientation: (INT) ориентации animated: (BOOL) animated принудительно: (BOOL) принудительно; ') –
Я не знаком с этим API, и я не могу найти его в документации. Это то, что вы написали? –
'UIMoviePlayerController' выделяется' UIWebView' при воспроизведении видео, если ваше приложение поддерживает только портретный режим, UIMoviePlayerController может заставить изменить ориентацию на ландшафт, тогда вы увидите, что сломанный портретный макет будет представлен в ландшафтном режиме после нажатия кнопки " Готово ". постскриптум Частный API –