6

我正在使用,和在三种不同的map方向模式之间切换,这很有效。MKUserTrackingModeNoneMKUserTrackingModeFollowMKUserTrackingModeFollowWithHeading

但是,当MKUserTrackingModeFollowWithHeadingMKUserTrackingModeNone.

在内置的地图应用程序上iphone/ipad,流程是这样的:

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

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

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

我希望我的应用程序在切换模式时在方向上的行为方式相同,但是当我按照上面的步骤 4 进行操作并从MKUserTrackingModeFollowWithHeadingto切换时MKUserTrackingModeNone,方向保持在进行方向切换之前的状态,而不是旋转回北向。

我正在使用MKUserTrackingBarButtonItem放置在工具栏中的标准控件进行方向切换。

有人请帮我解决这个问题吗?

4

3 回答 3

1

我在运行 iOS 6.1.4 的 iPhone 5 上也遇到了这个问题。我使用这个简单但丑陋的快速修复来强制地图视图旋转回北方:

-(void)someMethod
{
    // Currently in MKUserTrackingModeFollowWithHeading mode

    // Set tracking mode back to MKUserTrackingModeFollow
    [_mapView setUserTrackingMode:MKUserTrackingModeFollow];

    // After a short delay, set mode to MKUserTrackingModeNone
    [self performSelector:@selector(mapViewTrackingModeNone)
               withObject:nil
               afterDelay:0.2];

}

- (void)mapViewTrackingModeNone
{
    [_mapView setUserTrackingMode:MKUserTrackingModeNone];

    // Bang! The map rotates back to North-Up
}

可能有更好的方法来做到这一点,但我还没有找到。

于 2013-05-15T23:46:10.600 回答
0

您应该将一个小型测试应用程序放在一起,其中只有一个地图视图和一个 MKUserTrackingBarButtonItem 并将两者链接在一起。如果它应该按照您的描述进行并且不需要一行代码。所有的连接都可以在 IB 中完成。一旦你看到工作正常,你可以返回你的代码并重复这个过程。

于 2013-04-21T18:57:25.163 回答
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 https://stackoverflow.com/q/1245461/1445366
}

(有关旋转说明和代码,请参阅使用指南针方向旋转 MapView 。)

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

于 2013-04-19T19:01:54.063 回答