iOS 6: Как мне ограничить некоторые виды портретом и позволить другим вращаться?
У меня есть приложение для iPhone, которое используетUINavigationController
представить интерфейс детализации: сначала один вид, затем другой, до четырех уровней в глубину. Я хочу, чтобы первые три вида были ограничены книжной ориентацией, и только последний вид должен быть повернут в альбомную ориентацию. При возврате из четвертого вида в третий и четвертый вид был в альбомной ориентации, я хочу, чтобы все повернулось назад в портрет.
В iOS 5 я просто определилсяshouldAutorotateToInterfaceOrientation:
в каждом из моих контроллеров представления вернуть YES для допустимых ориентаций. Все работало, как описано выше, включая возврат в портретный режим, даже если устройство удерживалось в горизонтальной ориентации при возврате из контроллера вида № 4 в № 3.
В iOS 6 все контроллеры представления поворачиваются к пейзажу, ломая те, которые не былит хотел. Примечания к выпуску iOS 6 говорят
Больше ответственности переходит к приложению и делегату приложения. Теперь контейнеры iOS (такие какUINavigationController
) не консультируйтесь со своими детьми, чтобы определить, должны ли они автоматически поворачиваться. [...] Система запрашивает самый верхний полноэкранный контроллер представления (обычно контроллер корневого просмотра) для его поддерживаемых ориентаций интерфейса всякий раз, когда устройство вращается или всякий раз, когда контроллер представления представлен с полноэкранным модальным стилем представления. Кроме того, поддерживаемые ориентации извлекаются, только если этот контроллер представления возвращает YES из своегоshouldAutorotate
метод. [...] Система определяет, поддерживается ли ориентация, путем пересечения значения, возвращаемого приложениемsupportedInterfaceOrientationsForWindow:
метод со значением, возвращаемымsupportedInterfaceOrientations
метод самого верхнего полноэкранного контроллера.
Так что я подклассUINavigationController
дал мойMainNavigationController
булево свойствоlandscapeOK
и использовал это, чтобы вернуть допустимые ориентации вsupportedInterfaceOrientations
, Тогда в каждом из моих контроллеров зрения viewWillAppear:
методы у меня есть такая линия
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
сказать моемуMainNavigationController
желаемое поведение.
Здесь возникает вопрос: Если я сейчас перейду к своему четвертому виду в портретном режиме и переверну телефон, он поворачивается в альбомную ориентацию. Теперь я нажимаю кнопку «Назад», чтобы вернуться к третьему виду, который должен работать только в портретном режиме. Но это неповернуть назад. Как мне это сделать?
Я старался
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
вviewWillAppear
метод моего третьего контроллера представления, но это неничего не делай. Это неправильный метод для вызова или, может быть, это неправильное место для вызова или я должен реализовать все это совершенно по-другому?