UIDeviceOrientation
refers to the physical orientation of the device whereas UIInterfaceOrientation
refers to the orientation of the user interface. When you call your method
[self orientationChanged:interfaceOrientation];
you are most likely passing it a UIDeviceOrientation
when you should, according to the method, be using a UIInterfaceOrientation
.
Just to expand on this point a bit, UIDeviceOrientation
is a property of the UIDevice
class, and there are these possible values:
UIDeviceOrientationUnknown
– Can’t be determined
UIDeviceOrientationPortrait
– Home button facing down
UIDeviceOrientationPortraitUpsideDown
– Home button facing up
UIDeviceOrientationLandscapeLeft
– Home button facing right
UIDeviceOrientationLandscapeRight
– Home button facing left
UIDeviceOrientationFaceUp
– Device is flat, with screen facing up
UIDeviceOrientationFaceDown
– Device is flat, with screen facing down
As for UIInterfaceOrientation
, it is a property of UIApplication
and only contains 4 possibilities which correspond to the orientation of the status bar:
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
To get UIDeviceOrientation
, you use
[[UIDevice currentDevice] orientation]
and to get UIInterfaceOrientation
, you use
[[UIApplication sharedApplication] statusBarOrientation]