How to programmatically determine iPhone interface orientation?
cocoa-touch, iphone
Solution
In a viewcontroller you can simply use the code:
UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;
The UIInterfaceOrientation is an enum:
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeLeft,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeRight
} UIInterfaceOrientation;
Problem
The possible values for `UIDevice.orientation` include `UIDeviceOrientationFaceUp` and `UIDeviceOrientationFaceDown`. While it might be useful to know that the device is flat, this doesn't tell us whether it's flat displaying an interface oriented in portrait or landscape mode. Is there a way to find the current orientation of the GUI in cases where the device is returning ambiguous information? I suppose I could track orientation change events to remember the last portrait/landscape orientation or check the main UIView's bounds height and width, but that seems kludgey. Is there a property on the device or UIView that I'm missing?