从MKUserTrackingModeFollowWithHeading切换模式时,如何始终在面向iOS 6的北方保持MKMapView

rea*_*hat 5 iphone objective-c mkmapview ios android-mapview

我正在map使用MKUserTrackingModeNone,在三种不同的方向模式之间进行切换MKUserTrackingModeFollowMKUserTrackingModeFollowWithHeading并且可以正常工作。

但是,从切换MKUserTrackingModeFollowWithHeading到时,我无法将地图的方向重置为朝北的方向(地图的北部位于屏幕顶部)MKUserTrackingModeNone

在的内置地图应用上iphone/ipad,流程如下:

启动应用程序时,它处于模式,MKUserTrackingModeNone并且是北向的。切换方向模式时,它将变为MKUserTrackingModeFollow,并且方向仍然是北的。

再次切换时,它会变为MKUserTrackingModeFollowWithHeading,并且地图会根据您正对着/指向iPhone的方向旋转。

当您再次切换方向时,它会回到MKUserTrackingModeNone,地图会很好地旋转回到北向。

我希望我的应用在切换模式时在方向方面表现出相同的方式,但是当我按照上面的步骤4进行操作并从切换MKUserTrackingModeFollowWithHeading到时MKUserTrackingModeNone,方向保持为刚进行方向切换之前的样子,而不是旋转回北向。

我正在MKUserTrackingBarButtonItem使用工具栏中的标准控件进行方向开关。

任何人都可以帮助我解决此问题?

Aar*_*ger 0

在 iOS 5 中,它会为您切换北向,但在 iOS 6 中则不会。您可以在 bugreport.apple.com 上提交增强请求。

您可以实现委托回调函数并在委托回调中应用轮换...

- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated
{
    if (mode == MKUserTrackingModeNone)
        [self rotateTheMapView];
}

- (void)rotateTheMapView {
    // See /sf/ask/87182301/
}
Run Code Online (Sandbox Code Playgroud)

(有关旋转说明和代码,请参阅使用罗盘方向旋转地图视图。)

问题在于,Apple 不会使用其内部逻辑公开准确的当前旋转,因此 iOS 提供给您的当前航向的任何计算可能会略有偏差,导致您的地图在完成后稍微偏北。