ios - 带有倾斜设备的 CLLocationManager 标题

标签 ios iphone accelerometer cllocationmanager heading

我正在开发一个同时使用 iPhone 的磁力计和加速度计的应用程序。我注意到的问题是,当设备向后倾斜时,它会达到航向值反转的临界点(iOS 似乎认为设备已经旋转)。起初我认为这会很简单,就像检查设备方向何时发生变化一样 ([UIDevice currentDevice].orientation),但是 *航向值在设备方向(至少 15 度倾斜)之前显着反转已发送更改通知。

如果此描述令人困惑,我深表歉意,但您可以通过以下实验轻松看出我的问题:

在 iPhone 上打开指南针应用程序并校准指南针。校准后,垂直上下握住 iPhone,在纵向模式下,主页底部位于屏幕下方。现在慢慢向后倾斜手机(这样相机更直接向上)。您会碰到罗盘突然反转方向的点。不幸的是,这一点与操作系统识别设备方向变化的点无关。

我的问题是我需要继续在原来的方向上记录航向,因为我实际上并没有转动设备,它显然仍然指向前方(在原来的方向)。我已经在这个临界点测试了设备的角度,并以这种方式成功地对其进行了校正,但是由于加速度计的噪声,我在临界角附近得到了非常紧张的结果。我还尝试了位置管理器的 headingOrientation 属性,但没有成功。如果有人找到解决这种情况的方法,将不胜感激!

干杯。

最佳答案

更多关于为什么需要这个的背景有助于提供更好的答案。 在进行您描述的移动时,设备的顶部实际上指向相反的方向。
为了弥补这一点,您需要添加一个过滤器并根据设备角度和航向的先前状态确定设备角度和航向的新状态。知道设备角度接近临界相位并且知道航向突然反转 180° 应该可以让您区分这种情况。您可以将陀螺仪信息添加到过滤器以使用设备旋转速率并确定设备正在移动超过临界角。

关于ios - 带有倾斜设备的 CLLocationManager 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739399/

相关文章:

ios - 点击已经选中的segment control swift

ios - 将 iPhone 用作 iBeacon

ios - Crashlytics 在 Firebase 控制台中显示 75% 的 Crash-free 用户,但不显示崩溃日志?

iphone - Objective-C 的 JSON 解析器比较(JSON 框架、YAJL、TouchJSON 等)

android - 如何以编程方式在 Android 设备中设置模拟传感器(加速度计)

Javascript "bump"识别(移动设备)

ios - 使用 renderInContext 的 Obj-C

ios - 呈现新的 View Controller 并无形地关闭当前呈现的 View Controller 链

iphone - 结合 MKMap 和 Cocos2D

android - 使用互补滤波器的传感器融合