Ориентация запуска iPad при плоской поверхности

У меня есть следующий код:

 -(void)viewWillAppear:(BOOL)animated {

    UIDeviceOrientation orientation = [[UIDevice currentDevice] UIInterface];

    if(orientation==UIDeviceOrientationLandscapeLeft || orientation==UIDeviceOrientationLandscapeRight) {
        NSLog(@"Device Landscape");
    } else {
        NSLog(@"Device Portrait");
    }

 }

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

Любые идеи о лучшем способе определения ориентации интерфейса при вызове viewWillAppear?

Спасибо

Ответ 1

Вместо ориентации устройства вы должны использовать [self interfaceOrientation].

Ответ 2

[[UIApplication sharedApplication] statusBarOrientation] также работает, если вы находитесь где-то в коде, который не имеет доступа к [self interfaceOrientation]

Ответ 3

Во-первых, вы знаете о свойстве interfaceOrientation UIViewController? Похоже, вы пытаетесь его дублировать. Если вы действительно хотите это сделать, просто подпишитесь на уведомления об изменении ориентации устройства, проверьте, является ли новая ориентация действительной ориентацией интерфейса (для этого макроса), и если да, сохраните значение для некоторой переменной (например, lastSeenOrientation). Тогда вы можете рассчитывать на это значение, где бы вы ни хотели.