我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有if语句并且只是将摄像机设置为我的标题,那么我的输出结果是:
self.heading: 357 camera.heading: -0.000000
self.heading: 357 camera.heading: -0.000000
self.heading: 357 camera.heading: -0.000000
Run Code Online (Sandbox Code Playgroud)
因此,如果我给出一个接近北方的值,那么接缝将会在一瞬间自动恢复到北方 - 使地图永远跳转.
如果没有地图删除我想要的标题,如何将标题设置为接近但实际上不是北方的程度?
我找到了三种使用 MKMapCamera 的方法,我想知道哪一种是最值得推荐的。我的目标是跟随用户,我想在每次位置更新时更新相机(所以每秒)。
1.
MKMapCamera *newCamera = [MKMapCamera camera];
[newCamera setCenterCoordinate:newCoordinate];
[newCamera setPitch:60];
[newCamera setHeading:heading];
[newCamera setAltitude:eyeAltitude];
[mapView setCamera:newCamera];
Run Code Online (Sandbox Code Playgroud)
2.
MKMapCamera *newCamera = [MKMapCamera cameraLookingAtCenterCoordinate:newCoordinate
fromEyeCoordinate:oldCoordinate
eyeAltitude:eyeAltitude];
[newCamera setPitch:pitch];
[mapView setCamera:newCamera];
Run Code Online (Sandbox Code Playgroud)
3.
MKMapCamera *oldCamera = mapView.camera;
[oldCamera setCenterCoordinate:newCoordinate];
[oldCamera setPitch:60];
[oldCamera setHeading:heading];
[oldCamera setAltitude:eyeAltitude];
Run Code Online (Sandbox Code Playgroud)
Memory wise 似乎 nr 3 是最体面的,还是单例类?在大多数示例中,它们使用 nr1。
对于 nr3,我无法使动画正常工作。
谢谢!