iOS 6: Как мне ограничить некоторые виды портретом и позволить другим вращаться?

У меня есть приложение для iPhone, которое используетUINavigationController представить интерфейс детализации: сначала один вид, затем другой, до четырех уровней в глубину. Я хочу, чтобы первые три вида были ограничены книжной ориентацией, и только последний вид должен быть повернут в альбомную ориентацию. При возврате из четвертого вида в третий и четвертый вид был в альбомной ориентации, я хочу, чтобы все повернулось назад в портрет.

В iOS 5 я просто определилсяshouldAutorotateToInterfaceOrientation: в каждом из моих контроллеров представления вернуть YES для допустимых ориентаций. Все работало, как описано выше, включая возврат в портретный режим, даже если устройство удерживалось в горизонтальной ориентации при возврате из контроллера вида № 4 в № 3.

В iOS 6 все контроллеры представления поворачиваются в горизонтальную плоскость, ломая те, которые не были предназначены. Примечания к выпуску iOS 6 говорят

More responsibility is moving to the app and the app delegate. Now, iOS containers (such as UINavigationController) do not consult their children to determine whether they should autorotate. [...] The system asks the top-most full-screen view controller (typically the root view controller) for its supported interface orientations whenever the device rotates or whenever a view controller is presented with the full-screen modal presentation style. Moreover, the supported orientations are retrieved only if this view controller returns YES from its shouldAutorotate method. [...] The system determines whether an orientation is supported by intersecting the value returned by the app’s supportedInterfaceOrientationsForWindow: method with the value returned by the supportedInterfaceOrientations method of the top-most full-screen controller.

Так что я подклассUINavigationControllerдал мойMainNavigationController булево свойствоlandscapeOK и использовал это, чтобы вернуть допустимые ориентации вsupportedInterfaceOrientations, Тогда в каждом из моих контроллеров представления & apos;viewWillAppear: методы у меня есть такая строка

    [(MainNavigationController*)[self navigationController] setLandscapeOK:YES];

сказать моемуMainNavigationController желаемое поведение.

Here comes the question: Если я сейчас перейду к своему четвертому виду в портретном режиме и переверну телефон, он поворачивается в альбомную ориентацию. Теперь я нажимаю кнопку «Назад», чтобы вернуться к третьему виду, который должен работать только в портретном режиме. Но он не вращается назад. Как мне это сделать?

Я старался

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]

вviewWillAppear метод моего третьего контроллера представления, но он ничего не делает. Это неправильный метод для вызова или, может быть, это неправильное место для вызова или я должен реализовать все это совершенно по-другому?

Ответы на вопрос(14)

Ваш ответ на вопрос