【发布时间】:2015-12-11 21:21:04
【问题描述】:
我正在为在后台运行的客户端开发一个应用程序。
它不是应用商店应用,因此它与通常适用于应用商店应用的规则并不完全相同。甚至私有 API 也是此应用程序的一个选项,但它必须在非越狱设备上运行。 (该应用程序将是一个企业应用程序。)
应用需要知道当前的设备方向。看似简单,其实不然。我正在使用您期望的普通代码:
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
BOOL inLandscape = UIDeviceOrientationIsLandscape(deviceOrientation);
但是,这似乎返回了当应用程序从前台移动到后台时有效的方向。
我需要方向来跟踪实际的设备方向。实际上,我真正想要的是当前前台应用程序的用户界面方向,但 Apple 很难推断。如果需要,我会满足于设备方向。
这个应用程序是用 Objective-C 编写的,但我也“说 Swift”,所以用任何一种语言表达的答案都可以。
【问题讨论】:
-
在这里吐槽一下:有一些框架带有private
deviceOrientationproperties,一个私有的UIDevice方法称为currentDeviceOrientationAllowingAmbiguous:,当然还有[UIApplication -statusBarOrientation]。您尝试过其中的任何一个吗? -
Here's an approach 使用 Core Motion 的
CMMotionManager来计算设备方向。 -
您是否需要逐字地“跟踪”方向,例如在应用程序处于后台时维护所有更改的记录?或者您只需要知道应用程序从后台返回时的方向?如果是后者,您可以在 AppDelegate 中的
applicationWillEnterForeground:中检查设备方向。 -
我真正需要的是前端应用程序的用户界面方向。使用核心运动可能是一个不错的折衷方案,但如果设备方向锁定、用户将其平放在桌子上或其他各种情况,它会与 UI 方向不同步。
-
一个可以让我查询最前面应用程序的用户界面(或它的状态栏方向)的私有框架将是理想的。