iOS MapKit相机重置标题值在6到354之间

时间:2014-10-13 12:00:02

标签: ios mkmapview mkmapcamera

我有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

因此,如果我将 close 的值提供给北方,它会在之后的一瞬间自动恢复到北方 - 使地图永远跳转。

如果没有地图删除我想要的标题,如何将标题设置为接近但实际上不是北方的程度?

1 个答案:

答案 0 :(得分:5)

目前这个问题似乎无法解决。我也遇到了这个问题,我担心你需要使用Apple提供的技术支持。虽然我担心目前的SDK无法解决这个问题。此外,地图应用程序具有相同的行为。

在我的测试中,我发现对于&lt; 7 度和&gt;&gt; 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];

但这完全取决于你。