Не следует путать UIDeviceOrientation
и UIInterfaceOrientation
, они разные, но связаны, как показано в их декларации
typedef enum {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
} UIDeviceOrientation;
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;
UIDeviceOrientation
говорит вам, какова ориентация устройства.UIInterfaceOrientation
сообщает вам, какова ориентация вашего интерфейса, и используется UIViewController
.UIInterfaceOrientation
будет явно портретным или альбомным, тогда как UIDeviceOrientation
может иметь неоднозначные значения (UIDeviceOrientationFaceUp
, UIDeviceOrientationFaceDown
, UIDeviceOrientationUnknown
).
В любом случае вам не следует пытаться определить ориентациюUIViewController с [[UIDevice currentDevice] orientation]
, так как независимо от ориентации устройства свойство UIViewController interfaceOrientation
может отличаться (например, если ваше приложение вообще не поворачивается в альбомную ориентацию [[UIDevice currentDevice] orientation]
может быть UIDeviceOrientationLandscapeLeft
, а viewController.interfaceOrientation
можетбыть UIInterfaceOrientationPortrait
).
Обновление: Начиная с iOS 8.0, [UIViewController interfaceOrientation]
устарело.Альтернатива здесь - [[UIApplication sharedApplication] statusBarOrientation]
.Это также возвращает UIInterfaceOrientation
.