5

我有一个MKMapView并且我正在尝试旋转地图相机的标题以跟随用户的标题。我不想进行自动跟踪,因为它会强制缩放级别,这是我希望同时控制的。

问题是我发现如果提供 354 到 6 度之间的任何值,相机航向将恢复为 0。例如,当我将相机航向设置为 2 时,它会不断在 2 和 0 之间反弹,直到我将手机转到不同的航向。

我的解决方案是在此范围之间时将其锁定为 0,但这不是最佳选择。有没有人知道为什么会发生这种情况?标题更改时调用的方法如下所示:

- (void)setMapCameraPosition {
    //354,6
    if (self.heading <= 6 || self.heading >= 354) {
        NSLog(@"****nulling heading. self.heading: %d camera.heading: %f", self.heading, self.mapView.camera.heading);
        self.mapView.camera.heading = 0.0f;
    }
    else {
        NSLog(@"changing heading. self.heading: %d camera.heading: %f", self.heading, self.mapView.camera.heading);
        self.mapView.camera.heading = (double)self.heading;
    }
}

如果我没有 if 语句并且只是将相机设置为我的标题,那么我的输出最终是:

self.heading: 357 camera.heading: -0.000000
self.heading: 357 camera.heading: -0.000000
self.heading: 357 camera.heading: -0.000000

因此,如果我给出一个接近北方的值,它会在一瞬间自动恢复到北方 - 使地图永远跳跃。

如何在地图不移除我想要的航向的情况下将航向设置为接近但实际上不是北向的程度?

4

1 回答 1

5

目前,这个问题似乎无法解决。我也遇到了这个问题,恐怕您需要使用 Apple 的技术支持。虽然恐怕答案是目前无法使用当前的 SDK。此外,地图应用程序具有相同的行为。

在我的测试中,我发现捕捉发生在<7度和>353度。我使用一个滑块来测试MKMapCamera一个独立应用程序中的标题功能,以创建一个可重现的问题。

所以你的解决方案是目前最好的。但是,我不仅会捕捉到零,还会捕捉到 353 度和 7 度。

float heading = self.heading;

if( roundf( heading ) >= round( 353.0f  ) && roundf( heading ) < round( 356.5f  ) ) {
    heading = 353.0f;
} else if( roundf( heading ) >= round( 356.5f  ) && roundf( heading ) <= round( 360.0f  ) )  {
    heading = 360.0f;
} else if( roundf( heading ) >= round( 0.0f  ) && roundf( heading ) < round( 3.5f  ) )  {
    heading = 0.0f;
} else if( roundf( heading ) >= round( 3.5f  ) && roundf( heading ) <= round( 7.0f  ) )  {
    heading = 7.0f;
}

[[[self mapview] camera] setHeading: heading];

但这完全取决于你。

于 2014-11-05T11:13:38.127 回答