Принудительное изменение UIInterfaceOrientation на iPhone - PullRequest
8 голосов
/ 22 апреля 2010

Я пытаюсь получить приложение для iPhone, для которого требуется почти каждое нажатие или щелчок в стеке Nav Controller для изменения ориентации.

По сути, первый вид - это портрет, второй - третий портрет (да, я знаю, что это не идеально, но это дизайн, и я должен его реализовать).

Здесь я получил несколько советов ....
Как обнаружить вращение на iPhone без автоповорота устройства?
Принудительная книжная ориентация при отправке нового вида в UINavigationViewController
Есть ли документированный способ установки ориентации iPhone?
Но без полного успеха.

Настройка для связи с 3.1.2 мое чтение связанных статей выше, кажется, указывает на то, что, если мой портретный вид выдвигает вид с - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight) ); } Затем этот вид должен появиться повернутым в ландшафт. То, что происходит, это появляется в его «сломанной» портретной форме, затем вращается правильно, когда устройство повернуто.

Если я верну контроллер обратно в мое портретное представление (которое имеет соответствующий флажок «Автоматически вращать ...»), оно останется в режиме ломаной ориентации, пока устройство не вернется в портретную ориентацию.

Я также попытался удалить все сообщения mustautorotate и вместо этого принудительно вращать, трансформируя представление. Это работает, и я понял, что, перемещая строку состояния (которая фактически скрыта в моем приложении) [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;, клавиатура будет отображаться с правильной ориентацией, когда это необходимо.

Проблема с этим подходом заключается в том, что преобразование строки состояния выглядит странно и безобразно, когда у вас нет строки состояния - тень появляется на странице при каждом изменении.

Итак. Чего мне не хватает

1) Я ошибаюсь, полагая, что в 3.1.2 (или, возможно, раньше) долженAutorotateToInterfaceOrientation обеспечивать желаемую ориентацию простым нажатием на контроллеры?

2) Есть ли другой способ заставить клавиатуры отображаться в правильной ориентации.

3) Является ли недокументированный API "подходящим" (пожалуйста, нет!)

1 Ответ

4 голосов
/ 22 апреля 2010

Вы не должны использовать [UIViewController shouldAutorotateToInterfaceOrientation:], чтобы вызвать изменение ориентации; это только для того, чтобы система знала, разрешены ли автоматические повороты. Вы все равно должны обновить его, чтобы указать разрешенную ориентацию.

Если вы хотите изменить ориентацию при отображении определенного вида, вы должны вызвать [UIApplication setStatusBarOrientation:animated:] внутри вашего метода переопределения [UIViewController viewWillAppear:] для каждого из контроллеров представления, которые задают определенную ориентацию. Это приведет к изменению, когда представление помещается в стек и когда оно выталкивается из него. Убедитесь, что вы вызываете super в своем методе переопределения.

Это также правильное место для изменения отображения строки состояния, если вы этим занимаетесь.

...