как бороться с UIDeviceOrientationFaceUp и UIDeviceOrientationFaceDown? - PullRequest
19 голосов
/ 12 декабря 2010

нубский вопрос здесь.

я определяю ориентацию с помощью:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

все в порядке, и я переставляю свои текстовые поля и метки в соответствии суказанная ориентация с

if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)

и др. {} для всего остального

проблема, которую я обнаружил только недавно, когда UIDevice сообщает UIDeviceOrientationFaceUp илиUIDeviceOrientationFaceDown.как мне справиться с этой ситуацией?как мне узнать, происходит ли UIDeviceOrientationFaceUp и UIDeviceOrientationFaceDown в книжной или альбомной ориентации?Я знаю, что устройство обращено вверх или вниз, но я не знаю, следует ли мне переместить все в книжную или альбомную ориентацию.

спасибо!

Ответы [ 4 ]

33 голосов
/ 12 декабря 2010

Apple рекомендует не использовать устройство ориентацию для макета просмотра.Вместо этого каждый контроллер представления имеет свойство interfaceOrientation , а UIApplication имеет свойство statusBarOrientation , оба из которых будут возвращать текущую ориентацию interface , которая подходитдля макета представления.

Для отслеживания изменений существуют UIViewController методы, такие как willRotateToInterfaceOrientation: duration: , которые будут вызываться, и уведомления, такие как UIApplicationWillChangeStatusBarOrientationNotification , которые будутразмещается при изменении ориентации интерфейса.

4 голосов
/ 12 декабря 2010

Этот пост здесь: http://blogs.remobjects.com/blogs/mh/2010/06/29/p1685 объясняет это очень хорошо.

0 голосов
/ 16 сентября 2015

Немного поздно, надеюсь, это кому-нибудь поможет.

Для iOS 6.0 и более поздних версий:

1) Установите этот код во время настройки просмотра, чтобы получать уведомления о ротации:

  // Set Listener to receive orientation notifications from the device
  [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(detectOrientation)
                                               name:UIDeviceOrientationDidChangeNotification
                                             object:nil];

2) Установите этот код для получения уведомления после поворота:

-(void)detectOrientation{      
  switch ([[UIDevice currentDevice] orientation]) {
    case UIDeviceOrientationFaceDown:{
      NSLog(@"UIDeviceOrientationFaceDown");
      break;
    }
    case UIDeviceOrientationFaceUp:{
      NSLog(@"UIDeviceOrientationFaceUp");
      break;
    }
    case UIDeviceOrientationLandscapeLeft:{
      NSLog(@"UIDeviceOrientationLandscapeLeft");
      break;
    }
    case UIDeviceOrientationLandscapeRight:{
      NSLog(@"UIDeviceOrientationLandscapeRight");
      break;
    }
    case UIDeviceOrientationPortrait:{
      NSLog(@"UIDeviceOrientationPortrait");
      break;
    }
    case UIDeviceOrientationPortraitUpsideDown:{
      NSLog(@"UIDeviceOrientationPortraitUpsideDown");
      break;
    }
    case UIDeviceOrientationUnknown:{
      NSLog(@"UIDeviceOrientationUnknown");
      break;
    }
    default:{
      break;
    }
  }

}
0 голосов
/ 18 июня 2011

У меня такие же проблемы с

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Этот метод генерирует уведомления для 7 возможных состояний устройства:

UIDeviceOrientationPortrait
UIDeviceOrientationPortraitUpsideDown
UIDeviceOrientationLandscapeLeft
UIDeviceOrientationLandscapeRight
UIDeviceOrientationFaceUp
UIDeviceOrientationFaceDown
UIDeviceOrientationUnknown

Но мне нужны только первые 4, это мой подход к решению этой проблемы (с включенным кодом): Как обрабатывать UIDeviceOrientation для управления макетами представлений

...