2015-09-15 8 views
4

Я работаю над приложением для клиента, который работает в фоновом режиме.Как определить ориентацию устройства iOS на фоне?

Это не приложение для приложений для приложений, поэтому оно не имеет совершенно одинаковых правил, которые обычно применяются к приложениям для приложений приложений. Даже частные API-интерфейсы являются опцией для этого приложения, но он должен работать на не-jailbroken устройстве. (Приложение будет корпоративным приложением.)

Приложение должно знать текущую ориентацию устройства. Кажется простым, но это не так. Я использую обычный код можно было ожидать:

UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
BOOL inLandscape = UIDeviceOrientationIsLandscape(deviceOrientation); 

Тем не менее, кажется, что это возвращает ориентацию, которая была в силе, когда приложение перемещается от переднего плана к фону.

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

Это приложение написано на Objective-C, но я также говорю «Swift», поэтому ответы, выраженные на любом языке, прекрасны.

+0

Просто spitballing здесь: есть несколько фреймворков с [private' deviceOrientation' свойствами] (https://github.com/nst/iOS-Runtime-Headers/search?utf8=%E2%9C%93&q=deviceorientation), частный метод 'UIDevice', называемый' currentDeviceOrientationAllowingAmbiguous: 'и, конечно,' [UIApplication -statusBarOrientation] '. Вы пробовали кого-нибудь из них? –

+0

[Вот подход] (http://codrspace.com/yuvirajsinh/device-orientation-detection-using-coremotion/), который использует «CMMotionManager» от Core Motion для расчета ориентации устройства. –

+0

Вам нужно буквально «отслеживать» ориентацию, как в том, чтобы вести запись обо всех изменениях во время вашего приложения? Или вам просто нужно знать ориентацию, когда приложение возвращается из фона? В последнем случае вы можете просто проверить ориентацию устройства в 'applicationWillEnterForeground:' в AppDelegate. –

ответ

6

Существует частный метод, называемый -[UIApplication _getSpringBoardOrientation], который просто вызывает другой частный метод -[UIApplication activeInterfaceOrientation], который, как представляется, дает вам ориентацию текущего приложения переднего плана.

+0

Это похоже на то, что мне нужно. Выключить, чтобы попробовать ... –

+0

Является ли это методом класса UIApplication или методом экземпляра? А как насчет второго? Я думаю, мне нужно написать код для опроса частных методов UIApplication ... –

+0

Эта сигнатура метода сбой во время выполнения: '- (UIInterfaceOrientation) _getSpringBoardOrientation' –