ДОБАВЛЕНО: Вы можете получить доступ к этому проекту на github ios6rotations
Извините, ребята, что задали вопрос о вращении экрана в iOS 6, но это действительно боль в заднице. И я все еще не могу понять это полностью - по некоторым причинам он ведет себя по-разному при определенных обстоятельствах.
У меня есть следующая простая иерархия представлений в моем тестовом приложении:
То, что я пытаюсь достичь, - сохранить синий контроллер только в ландшафтном режиме, а красный - только в портретном.
У меня есть подкласс UINavigationController с таким кодом внутри:
@implementation CustomNavController
- (BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end
В моем синем контроллере я реализовал это:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
И в красном контроллере это:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
Теперь у меня есть следующее поведение:
- Приложение запущено в альбомной ориентации (ОК)
- Когда я нажимаю кнопку, мой красный контроллер тоже нажимает на пейзаж (это не нормально, потому что это должно быть показано в портрете)
- Он успешно вращается к портрету, но не назад к ландшафту.
- Если я оставил красный контроллер в режиме "Портрет", мой синий контроллер (который ограничен пейзажем) отображается в режиме "Портрет".
P.S. Все мои методы поворота (выложенные выше) вызываются нормально (кстати, почему эти методы вызывают так много раз при переходе экрана - 5-6 раз)
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
не вызывается с нажатием
Все (кроме PortraitUpsideDown) ориентации включены в plist.
Вопрос: как заставить вращение поддерживать поддерживаемую ориентацию в каждом контроллере?
Я предлагаю вам опубликовать здесь (как ответы) любой 100% рабочий код для обработки поворотов в ios6 (например, если у вас есть для iPad с SplitController) - я сохраню этот вопрос в избранных, чтобы иметь все в одном месте когда мне нужно справляться с определенными ситуациями. Ура!
ДОБАВЛЕНО: Пожалуйста, не публикуйте это как ответ от пейзажа к портрету Я надеюсь, это более элегантный способ сделать это.