2010-11-10 3 views
6

Я использую этот код:IPad ориентация возвращает неизвестные значения

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

, чтобы получить IPad ориентацию, но она возвращает UIDeviceOrientationUnknown, когда я использую рендеринг OpenGL. Когда я воспроизвожу фильмы или я показываю UIViews, он возвращает правильное значение. Вы знаете, как я могу получить правильную ориентацию? Я не хочу использовать акселерометр, потому что хочу знать, когда устройство заблокировало ориентацию.

Спасибо!

+0

Знаете ли вы, как я могу получить состояние кнопки блокировки? – Felics

+0

Не беспокойтесь о кнопке ориентации замка. Это больше не является функцией в iOS 4.2. –

+0

@Evan: Да, это просто переход от аппаратного переключателя к программному обеспечению. Прочитайте буквально любой обзор iOS 4.2. –

ответ

0

Если добавить [[UIDevice CurrentDevice] beginGeneratingDeviceOrientationNotifications]; ориентация будет верна даже в режиме рендеринга OpenGL. UIDeviceOrientation Неопределенная ориентация иногда возвращается, но только на короткое время.

16

Бывают ситуации, когда акселерометр не может точно считывать ориентацию, например, когда устройство удерживается на месте. Вы должны все еще быть в состоянии получить текущую ориентацию с помощью:

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
+0

Событие, если я держу устройство в нормальном положении, ориентация UIDeviceOrientationUnknown, но ТОЛЬКО, когда я использую рендеринг OpenGL. Я скрываю строку состояния, и ориентация - это всегда портрет. – Felics

+0

Ориентация statusBar бесценна. Спасибо! – Eugene

+0

Этот подход разрешил мои проблемы с «неизвестными» –

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