Xcode: Getting warning “implicit conversion from enumeration type UIDeviceOrientation”

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] 

Leave a Comment