3

要清楚我的问题是没有读取横向或左侧的标题值。它工作正常我正在使用位置管理器并减去 90° 以读取横向右侧的航向值和 270° 横向左侧的航向值,默认情况下,设备始终被视为纵向模式,这就是我们必须进行此调整的原因。

我最近开发了一个基于位置的增强现实应用程序,我正在经历的是,左右横向之间的航向值总是存在偏移。我在“现场”进行了测试,偏移量约为 12°。

我希望这个应用程序尽可能准确,我的意思是因为我们在这里依赖传感器数据并且这是第一个版本,小于 10° 是可以接受的(在最坏的情况下甚至是 15°)。但是,如果我们在现有误差上加上 12° 的偏移量,那就很烦人了。

有人对此有解释吗?即使我现在无法修复它,我也想要一个。所以现在我试图通过向左横向添加 12° 来“修复”这个问题,或者我应该在右侧横向减去 12°,我不知道!

在这个问题上有什么经验吗?

4

2 回答 2

11

我的经验是指南针不是很好,尤其是在风景视图中。我不会在一个视图中减去 12°,因为差异可能在另一台设备上有所不同。我建议您在继续之前先在其他一两部 iPhone 上进行测试。

另外,您是否正在设置 LocationManager 的视图?

CLLocationManager *compassManager;
compassManager.headingOrientation =CLDeviceOrientationLandscapeLeft;
于 2012-11-13T11:26:25.860 回答
5

我也遇到了这个问题,LandscapeLeft、landscapeRight 和 Portrait 之间存在差异。感谢 Sten 的回复和下面的 Swift 代码解决了这个问题。

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    var text=""
    switch UIDevice.currentDevice().orientation{
    case .Portrait:
        text="Portrait"
        locationManager.headingOrientation = CLDeviceOrientation.Portrait
    case .PortraitUpsideDown:
        text="PortraitUpsideDown"
        locationManager.headingOrientation = CLDeviceOrientation.Portrait
    case .LandscapeLeft:
        text="LandscapeLeft"
        locationManager.headingOrientation = CLDeviceOrientation.LandscapeLeft
    case .LandscapeRight:
        text="LandscapeRight"
        locationManager.headingOrientation = CLDeviceOrientation.LandscapeRight
    default:
        text="Another"
    }
    NSLog("You have moved: \(text)")
}
于 2016-02-07T06:52:37.010 回答