【问题标题】:[UIDevice cuurentDevice].orientation returning previous values in appDidBecomeActive callback[UIDevice cuurentDevice].orientation 在 appDidBecomeActive 回调中返回以前的值
【发布时间】:2012-03-12 10:58:55
【问题描述】:

如果我通过按主页按钮将应用程序置于后台,然后更改设备方向并将应用程序置于前台,我仍然会在 [UIDevice currentDevice].orientation 中获得先前的设备方向值。

例如,我将设备保持在默认方向,将应用程序带到后台并将设备旋转到 UpsideDown 方向,然后将应用程序带到前台,在被查询时 deviceOrientation 仍然是默认值。仅在一段时间后,beginDeviceOrientationEvents 的侦听器才会被调用并且正确的值可用。

所以我想问一下,在应用重新启动时,应该首先在哪里获取 deviceOrientation 的正确值?

【问题讨论】:

  • 你试过了吗: - (void)applicationDidEnterBackground:(UIApplication *)application //存储上一个/当前方向 - (void)applicationWillEnterForeground:(UIApplication *)application //获取最后一个方向并使它你目前的方向
  • 你误会了问题!当应用程序被带到前台时,我想获得正确的 deviceOrientation 值。当应用程序发送到后台时,我没有获取当前的 deviceOrientation,而是获取了 deviceOrientation。

标签: ios device-orientation uideviceorientation


【解决方案1】:

在您的应用委托的applicationDidBecomeActive 方法中使用[[UIDevice currentDevice] orientation](如described in the docs)。

更新

事实上,[[UIApplication sharedApplication] statusBarOrientation] 可能更有用,因为返回的值考虑了您已将应用设置为兼容的方向。

【讨论】:

  • 您是否尝试过在应用激活周期稍晚一点的时候获取值?我刚刚在 Apple 的 App States and Multitasking doc 中读到,在暂停期间,诸如定向通知之类的通知会排队,并在应用程序再次激活时发送。方向通知可能会在 applicationDidBecomeActive 被调用之后到来。
  • 是的,我在应用程序周期的后期得到了正确的值,但我希望它在 appDidBecomeActive 时是正确的。
猜你喜欢
  • 2011-06-09
  • 2012-01-13
  • 2011-06-27
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多