开发者

iPad launch orientation when flat issues in app delegate

Like many people, I have a splash screen that animates off to reveal the first view of my app. I've been reworking this for the iPad and if you are holding the device in portrait or landscape modes, everything works as intended, the correct default image is used, the correct image that is used to animate this off is used, all orientations work fine.

BUT

If I get the device into landscape mode, and then lay 开发者_开发问答it flat on the table, things go wrong. The correct splash screen is used, but the image used to animate it off is wrong and I have traced this to the following code which is returning 5 - ie none of the portraitupsidedown / portrait / landscapeleft /landscaperight modes that it is meant to return.

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
UIInterfaceOrientation orientation = [UIDevice currentDevice].orientation;

The device itself clearly knows the correct orientation to use as the status bar is correct and indeed the first view controller rotates into the correct orientation - but what is clear is that [UIDevice currentDevice].orientation is not the same as the device actually knows and so the code I am using to deploy appropriate graphics inside the app delegate is wrong.

I guess my question is - how can I fix this? Is there a way of getting the correct device orientation within the app delegate?


The UIInterfaceOrientation is a subset of the UIDeviceOrientation. If UIDeviceOrientationIsValidInterfaceOrientation is false, then you can assume usually UIInterfaceOrientationPortrait. Besides checking the device orientation, you can also check the statusBarOrientation of UIApplication, but at startup it may not have a valid value either.


Here's a swift solution that worked for me:

if UIDevice.current.orientation.isFlat { //do something }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜