Когда ориентация устройства iphone направлена ​​вверх/вниз, могу ли я сказать, что это пейзаж или портрет?

Я получил этот код, который, если устройство находится в горизонтальном положении влево/вправо или вверх дном, поворачивается и отображает другой контроллер вида. но если он находится в ориентации лицом вверх или вниз, то как я могу узнать, находится ли он в ландшафтном режиме или в портрете? потому что я только хочу повернуть, если он направлен вверх или вниз и в ландшафтном режиме

    - (void)viewDidAppear:(BOOL)animated
    {
        UIDeviceOrientation orientation = [[UIDevice currentDevice]orientation];
        NSLog(@"orientation %d", orientation);
        if ((orientation == 2) || (orientation == 3) || (orientation == 4))
        {

            [self performSegueWithIdentifier:@"DisplayLandscapeView" sender:self];
            isShowingLandscapeView = YES;
    }
}

Ответ 1

В коде пользовательского интерфейса вы обычно не должны зависеть от ориентации устройства, а также от ориентации интерфейса пользователя. Часто бывает разница между ними, например, когда диспетчер представлений поддерживает только портрет.

Самое важное отличие для вашего случая заключается в том, что ориентация интерфейса никогда не стоит лицом вверх/вниз.

В вашем случае вы можете просто спросить контроллер вида для текущей ориентации пользовательского интерфейса: self.interfaceOrientation.

Ваше состояние может быть выражено несколько как if (deviceOrientation is face up/down and interfaceOrientation is landscape)

Имейте в виду, что пейзаж ориентации устройства слева означает правый ориентационный ландшафт интерфейса пользователя.

Ответ 2

Свойство interfaceOrientation устарело с iOS 8. И методы помощников

UIDeviceOrientationIsPortrait(orientation)  
UIDeviceOrientationIsLandscape(orientation)  

тоже не поможет, потому что они возвращают false, когда ориентация .faceUp.

Итак, я закончил проверку следующим образом:

var isPortrait: Bool {
  let orientation = UIDevice.current.orientation
  switch orientation {
    case .portrait, .portraitUpsideDown:
      return true

    case .faceUp:
      // Check the interface orientation
      let interfaceOrientation = UIApplication.shared.statusBarOrientation
      switch interfaceOrientation{
        case .portrait, .portraitUpsideDown:
          return true
        default:
          return false
      }
    default:
      return false
  }
}

Ответ 3

Да, вы можете, UIDeviceOrientation - это перечисление, которое содержит:

 UIDeviceOrientationUnknown,
 UIDeviceOrientationPortrait,          
 UIDeviceOrientationPortraitUpsideDown,
 UIDeviceOrientationLandscapeLeft,     
 UIDeviceOrientationLandscapeRight,    
 UIDeviceOrientationFaceUp,            
 UIDeviceOrientationFaceDown    

Есть даже два помощника:

UIDeviceOrientationIsPortrait(orientation)  
UIDeviceOrientationIsLandscape(orientation) 

Просто cmd на UIDeviceOrientation, чтобы показать заголовочный файл, в котором объявлено перечисление.

Ответ 4

Есть один способ проверить его.

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation;

Используйте первый, чтобы проверить, находится ли устройство в обратном порядке, а второй - указать, находится ли устройство в портретном или альбомном виде.