iPad не распознает правильную ориентацию интерфейса при запуске?

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

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

в viewDidLoad и ViewWillappear я получаю информацию о том, что приложение находится в портретном режиме, хотя приложение работает в ландшафтном режиме. На вид было установлено правильное значение - ландшафтный режим. Проблема в том, что я хочу, чтобы эти компоненты были установлены на свои правильные позиции до появления представления (в противном случае я могу четко видеть их перемещение на экране).

Как правильно с этим справиться?

РЕДАКТИРОВАТЬ: в viewDidLoad и ViewWillAppear я называю это:

orientation = [self getOrientation];
if (orientation == OrientationsLandscape) {
    NSLog(@"Landscape");
}
else {
    NSLog(@"Portrait");
}

вот реализация [getOrientation]

 - (int) getOrientation {
    int currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
    if (UIInterfaceOrientationIsPortrait(currentOrientation)) return OrientationsPortrait;
    else return OrientationsLandscape;
}

и перечисление def:

typedef enum {
     OrientationsLandscape = 0,
     OrientationsPortrait
} Orientations;

Теперь, если устройство находится в альбомном режиме, и я пытаюсь установить свое приложение, я получаю 2 раза напечатанное «Портрет», а не «Пейзаж».


person MegaManX    schedule 29.03.2012    source источник
comment
У меня такая же проблема, но только когда устройство обращено вверх. Если держать в руках под наклоном, ориентация распознается. Если я вызываю таймер, который выполняет тест после инициализации, он работает. Но между applicationDidFinishLaunching и моим вызовом таймера у меня короткий белый экран ... Вы нашли решение?   -  person Martin    schedule 07.12.2012
comment
Я разместил решение здесь: stackoverflow.com/a/13763842/127493   -  person Martin    schedule 07.12.2012


Ответы (2)


Попробуй это:

[UIApplication sharedApplication].statusBarOrientation
person SVGreg    schedule 29.03.2012
comment
Я уже использую это, чтобы узнать правильную ориентацию интерфейса, но, к сожалению, он возвращает неправильную ориентацию. - person MegaManX; 29.03.2012
comment
Так что попробуйте это [UIDevice currentDevice] .orientation. Один из них всегда показывает правильную ориентацию. - person SVGreg; 29.03.2012
comment
[UIDevice currentDevice] .ориентация неверна для этого использования, вы должны использовать [UIApplication sharedApplication] .statusBarOrientation - person Fry; 29.03.2012
comment
Я знаю, но MegaManX сообщает, что [UIApplication sharedApplication] .statusBarOrientation не работает. Очень странный. - person SVGreg; 29.03.2012

Что не менее важно, убедитесь, что вы правильно установили свойство autoresizingMask для всех элементов пользовательского интерфейса. Во-вторых, когда у меня возникла эта проблема, я исправил ее в методе инициализации. В инициализации вы должны контролировать ориентацию iPad, как предлагает SVGreg, а затем устанавливать правильный фрейм для элементов пользовательского интерфейса.

person Fry    schedule 29.03.2012
comment
В методе инициализации нет способа узнать, какова ориентация вашего пользовательского интерфейса. Вы можете угадать ориентацию на основе ориентации устройства, но проблема в том, что если пользователь заблокирует ориентацию - вот почему следует использовать ориентацию интерфейса. - person MegaManX; 29.03.2012
comment
Ориентация по умолчанию считается книжной. Если ориентация - Книжная, ничего не происходит, вместо этого, если ориентация - Альбомная, вызывается метод поворота. - person Fry; 04.05.2012