Когда ориентация устройства 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;
Используйте первый, чтобы проверить, находится ли устройство в обратном порядке, а второй - указать, находится ли устройство в портретном или альбомном виде.