я могу видеть, что это то, что было беспокоит много людей:/UITabBarController with viewКонтроллеры, использующие разные ориентации?
У меня есть UITabBarController, который имеет 4 viewControllers, все типа UINavigationController. Один из навигационных контролеров получает viewController, нажатый на его стек, этот viewController должен быть представлен в альбомном режиме/ориентации.
ViewController - это график, это абсолютно единственное место в приложении, где ландшафт имеет смысл. (Я скрываю UITabBar, когда это представляется не привести пользователя верить это будет работать везде)
Чтобы сделать UITabBarController правильно реагировать на изменения в ориентации всех его viewControllers нужно возвращать то же значение из метода делегата:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Так, чтобы вместить такое поведение я реализовал этот метод во все viewControllers принадлежащего к UITabBarController:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL canRotate = [defaults boolForKey:@"can_rotate"];
return canRotate;
}
«трюк» теперь, что когда мой банк-быть-ландшафтной ViewController является Pushe d Я делаю это:
- (void) viewWillAppear:(BOOL)animated {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"can_rotate"];
[defaults synchronize];
}
и когда он выскочил, я делаю это:
- (void) viewWillDisappear:(BOOL)animated {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:NO forKey:@"can_rotate"];
[defaults synchronize];
}
Это работает очень хорошо. Когда viewController находится в стеке, я могу повернуть устройство, и это будет показано ниже.
Проблема заключается в том, что если пользователь нажимает кнопку «назад» на навигационной панели в ландшафтном режиме, таким образом, при нажатии на viewController на предыдущий viewController этот «старый» viewController, конечно, также находится в ландшафтном режиме. Чтобы ухудшить ситуацию, потому что я установил BOOL NO, этот «старый» контроллер просмотра не может вращаться, когда я ориентирую устройство в портретный режим.
Есть ли способ обновить все, чтобы ни один из моих других диспетчеров просмотра не был в ландшафтном режиме, когда я появляюсь в режиме просмотра в режиме просмотра?
Я немного обеспокоен тем, что если это можно сделать от пейзажа к портрету, оно также должно быть возможным от портрета к пейзажу, что делает ненужным мой «взлом» .. но если он не может, то я вернулся к квадрат один:/
Надежда Я близко и что кто-то может помочь мне получить там, спасибо :)
Hi Andiih and Thanks :), что очень упрощает многое. Как заставить навигационную панель вращаться? – RickiG
Ahh просто опробовал очевидное: \t self.navigationController.navigationBar.transform = CGAffineTransformIdentity; \t self.navigationController.navigationBar.transform = CGAffineTransformMakeRotation (90.0 * 0.0174532925); \t self.navigationController.navigationBar.bounds = CGRectMake (0.0f, 0.0f, 480.0f, 30.0f); \t self.navigationController.navigationBar.center = CGPointMake (160.0f, 240.0f); еще раз спасибо. – RickiG