Как проверить, в каком положении (пейзаж или портрет) сейчас находится iPhone? - PullRequest
34 голосов
/ 25 марта 2010

У меня есть приложение с панелью вкладок и контроллерами навигации в каждой вкладке. Когда пользователь встряхивает устройство, UIImageView отображается как дочерний вид в контроллере навигации. Но UIImageView должен содержать специальное изображение, в зависимости от текущей ориентации устройства.

Если я напишу просто

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)
   if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 
   //Code
   }
   else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight||interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
   //Code
   }
}

Вид просто сходит с ума, если пользователь повернул устройство перед встряхиванием.

Есть ли способ получить текущую ориентацию айфонов?

Ответы [ 13 ]

1 голос
/ 20 сентября 2017

Вы можете проверить это так (Swift 3):

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

    case .faceUp, .faceDown:
      // Check the interface orientation
      let interfaceOrientation = UIApplication.shared.statusBarOrientation
      switch interfaceOrientation{
        case .portrait, .portraitUpsideDown:
          return true
        default:
          return false
      }
   default: // .unknown
     return false // not very satisfying to return false as if we were in landscape :-/
   }
}

Если вы работаете с ViewController, вы также можете сделать так (именно это я и сделал):

private var isPortrait: Bool {
    let orientation = UIDevice.current.orientation
    switch orientation {
    case .portrait, .portraitUpsideDown:
        return true
    case .landscapeLeft, .landscapeRight:
        return false
    default: // unknown or faceUp or FaceDown
        return self.view.width < self.view.height
    }
}

Хотя даже этого должно быть достаточно в этом случае:

private var isPortrait: Bool {
     return self.view.width < self.view.height
}
0 голосов
/ 09 августа 2018

А если вы просто хотите, чтобы устройство было в горизонтальной или вертикальной ориентации, простое решение (в Swift):

var orientation = "portrait"
if UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height {
   orientation = "landscape"
}
0 голосов
/ 03 сентября 2015

Получение текущей ориентации

- (void)viewDidLoad
{
    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

    if (orientation == UIInterfaceOrientationLandscapeLeft) {
        NSLog(@"Landscape left");
        self.lblInfo.text = @"Landscape left";
    } else if (orientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"Landscape right");
        self.lblInfo.text = @"Landscape right";
    } else if (orientation == UIInterfaceOrientationPortrait) {
        NSLog(@"Portrait");
        self.lblInfo.text = @"Portrait";
    } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"Upside down");
        self.lblInfo.text = @"Upside down";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...