2012-03-29 2 views
1

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

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

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

Что такое правильный способ справиться с этим?

EDIT: в 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 раза печататься «Портрет», вместо «Пейзаж»

+0

У меня такая же проблема, но только тогда, когда устройство находится лицом вверх. Если я держу его в руках, наклонен, ориентация распознается. Если я вызываю таймер, который выполняет тест после инициализации, он работает. Но между applicationDidFinishLaunching и моим таймерным звонком у меня есть короткий белый экран ... Вы нашли решение? – Martin

+0

Я разместил решение здесь: http://stackoverflow.com/a/13763842/127493 – Martin

ответ

1

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

[UIApplication sharedApplication].statusBarOrientation 
+0

Я уже использую это, чтобы узнать правильную ориентацию интерфейса, но, как я сожалею о его возвращении неверной ориентации. – MegaManX

+0

Итак, попробуйте эту [UIDevice currentDevice] .orientation. Один из них всегда показывает правильную ориентацию. – SVGreg

+0

[UIDevice currentDevice] .orientation не подходит для этого использования, вы должны использовать [UIApplication sharedApplication] .statusBarOrientation – Fry

0

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

+0

В методе init нет способа узнать, что такое ориентация вашего пользовательского интерфейса. Вы можете угадать ориентацию, основанную на ориентации устройства, но проблема в том, что, если пользователь блокирует ориентацию - именно поэтому следует использовать ориентацию интерфейса. – MegaManX

+0

По умолчанию ориентация рассматривается как портрет. Если ориентация «Портрет», ничего не происходит, вместо этого, если ориентация в ландшафте называется методом вращения. – Fry

Смежные вопросы