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]