Non si deve confondere UIDeviceOrientation
e UIInterfaceOrientation
, sono diversi ma correlati, come mostrato dalla loro dichiarazione
typedef enum {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
} UIDeviceOrientation;
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;
UIDeviceOrientation
ti dice cosa l'orientamento del dispositivo è. UIInterfaceOrientation
indica quale sia l'orientamento dell'interfaccia e viene utilizzato da UIViewController
. UIInterfaceOrientation
sarà chiaramente verticale o orizzontale, mentre UIDeviceOrientation
può avere valori ambigui (UIDeviceOrientationFaceUp
, UIDeviceOrientationFaceDown
, UIDeviceOrientationUnknown
).
In ogni caso non si dovrebbe tentare di determinare l'orientamento di un UIViewController con [[UIDevice currentDevice] orientation]
, come non importa quale sia l'orientamento del dispositivo è di proprietà UIViewController interfaceOrientation
può essere diverso (ad esempio, se la vostra applicazione non gira al paesaggio affatto [[UIDevice currentDevice] orientation]
possibile essere UIDeviceOrientationLandscapeLeft
mentre viewController.interfaceOrientation
può essere UIInterfaceOrientationPortrait
).
Aggiornamento: Come di iOS 8.0, [UIViewController interfaceOrientation]
è deprecato. Un'alternativa offerta here è [[UIApplication sharedApplication] statusBarOrientation]
. Anche questo restituisce UIInterfaceOrientation
.