Проблема setOrientation

У меня действительно странная проблема с ориентацией. У меня есть последовательность контроллеров представления под контроллером навигации. Один из них может принимать любую ориентацию. Когда я покидаю ориентацию, я должен использовать setOrientation. Самое смешное, что вращение происходит по мере перехода на следующую страницу. Обычно это не проблема, за исключением одного случая - от UIDeviceOrientationPortraitUpsideDown до нормального состояния все мои верхние смонтированные элементы перемещаются вверх примерно на восьмую часть страницы.

Я думаю, что есть три способа это исправить:

  1. Каким-то образом отделить setOrientation от моего вызова pushViewController (так что новое представление не нужно переворачивать)
  2. Установите мои элементы для закрепления в верхней части устройства в лучшем виде (я проверил, и они, кажется,)
  3. Сбросьте измерение Y для элементов в методе ViewDidLoad, но это кажется неправильным.

Вот мой толчок нового взгляда на код стека:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 

ResultSelect_ViewController *resultSelect = [[ResultSelect_ViewController alloc] initWithNibName:@"ResultSelect" bundle:nil];
[self.navigationController pushViewController:resultSelect animated:YES];

Кто-нибудь еще находит странным, что симулятор не позволяет вам тестировать перевернутый портрет?

3 ответа

Решение

Способ избежать ошибки поворота при повороте вверх ногами на портрет - это не делать этого. Вместо этого поверните дважды, останавливаясь на полпути (скажем, UIDeviceOrientationLandscapeRight). Вопрос времени не в том, чтобы использовать сон, а в том, чтобы реализовать didRotateFromInterfaceOrientation и запустить второй поворот (или перейти к следующему виду) в этой точке.

Просто чтобы заметить: Apple начала использовать статический (возможно, даже динамический) анализатор и блокирует приложения, которые используют частные методы (например, setOrientation:) от входа в магазин. Произошло с моим другом на прошлой неделе.

Вы пробовали строить против iPhone OS 3.0 и полагаться только на shouldRotateToInterfaceOrientation:? Поведение кажется фиксированным (по сравнению с реализацией в 2.x) и - по крайней мере для меня - выполняет свою работу.

Обычно вы не поддерживаете перевернутую ориентацию. Это кажется стандартным поведением приложений Apple и имеет смысл. Перевернутый случай не очень полезен и может привести пользователя в замешательство.

У нас была похожая проблема, когда подпредставления перемещались вверх и вниз по основному виду при перелистывании вверх ногами. Мы просто перестали поддерживать с ног на голову, и это в основном решило проблему.