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.