iPhone:在横向右侧和横向左侧之间使用指南针航向值进行偏移



要明确的是,我的问题不是读取左右横向的标题值。它工作得很好。我使用位置管理器,在横向右侧减去90°来读取标题值,在横向左侧减去270°,默认情况下,设备总是被认为处于纵向模式,这就是我们必须进行这种调整的原因。

我最近开发了一款基于位置的增强现实应用程序,我所经历的是,左右方向之间的航向值总是有偏移的。我测试了"现场",偏移大约为12°。

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

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

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

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

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

CLLocationManager *compassManager;
compassManager.headingOrientation =CLDeviceOrientationLandscapeLeft;

我刚刚也遇到了这个问题,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)")

最新更新