How to get device current orientation in an App Extension, I have tried below two methods but no success.
It always return UIDeviceOrientationUnknown
<
The observer method will get called if you add this before:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Edit: I use UIApplicationDidChangeStatusBarOrientationNotification for the observer
And in my method I check:
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
BOOL isPortrait = UIDeviceOrientationIsPortrait(orientation);
Edit 2- Xcode 6.2 - iOS 7 & 8
It seems that if you want to use this on both iOS 7 & 8, the code above will give you wrong result on iOS 7.
So I use something else because on iOS 7 the mainScreen's bounds will never change, but on iOS 8 will change if the orientation changes.
I've got 3 macros that will give me the right size of the screen's width & height regardless of the iOS version:
#define IOS_VERSION_OLDER_THAN_8 ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)
#define SCREEN_WIDTH_CALCULATED (IOS_VERSION_OLDER_THAN_8 ? (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height) : [[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT_CALCULATED (IOS_VERSION_OLDER_THAN_8 ? (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width) : [[UIScreen mainScreen] bounds].size.height)
Then, when the notification is fired, i check the orientation like this:
BOOL isPortrait = SCREEN_WIDTH_CALCULATED < SCREEN_HEIGHT_CALCULATED;
This will work on iOS 7 & iOS 8, but i didn't check for older versions of Xcode, only 6.2
This will return only if the device is on portrait or landscape, not all the 4 orientation types