UIDevice currentDevice "ориентация" всегда нулевая

Согласно названию. Вызов [[UIDevice currentDevice] BeginGeneratingDeviceOrientationNotifications] не имеет никакого эффекта.

События DidRotateToInterfaceOrientation и т. Д. Работают нормально, но мне нужно иметь возможность произвольно опрашивать ориентацию устройства.

Как я могу это исправить / сделать?

Длинная история: у меня есть приложение вкладки с контроллером навигации на каждой вкладке. Корневое представление вкладки номер один представляет собой график, который переходит в полноэкранный режим, когда ориентация меняется на альбомную; однако это необходимо проверять всякий раз, когда вид появляется, поскольку изменение ориентации могло произойти в другом месте, поэтому я надеялся опрашивать состояние ориентации всякий раз, когда это представление появляется.

5 ответов

Представляется, что понятие ориентации UIDevice доступно только на реальных устройствах. Симулятор, кажется, всегда возвращает 0 здесь, независимо от того, были ли включены уведомления, как предполагают документы. Раздражающе неудобно, но вы идете.

Я считаю, что это работает нормально на реальном устройстве:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    NSLog(@"orientation: %d", [[UIDevice currentDevice] orientation]);
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

Кажется глупым вопросом, но не так ли

beginGeneratingDeviceOrientationNotifications

(нижний регистр b) ...

Если вы проверите [[UIDevice currentDevice] orientation] в - (void)viewDidLoad вы всегда получите ноль.

Проверьте это в * - (void) viewDidAppear:(BOOL) * анимационный метод и вы

Это, как сказал iMeMyself в комментариях выше, - это очень много времени, и я думаю, что это правильный ответ, поэтому я хотел бы выделить его здесь:

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;

if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
{
   //do stuff here
}
else if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
{
//or do stuff here
}

Разве [[UIDevice currentDevice] ориентация] не даст вам текущее состояние ориентации? Вы можете проверить это в вашем методе viewWillAppear контроллера представления, который хочет опросить.

Изменить: Помимо этого, существуют различные способы получения текущей ориентации, например, используя свойство statusBarOrientation в UIApplication или свойство interfaceOrientation в UIViewcontroller.

Другие вопросы по тегам