5

我找到了三种使用 MKMapCamera 的方法,我想知道哪一种是最推荐的。我的目标是跟随用户,我想在每次位置更新时更新相机(所以每秒)。

1.

            MKMapCamera *newCamera = [MKMapCamera camera];
            [newCamera setCenterCoordinate:newCoordinate];
            [newCamera setPitch:60];
            [newCamera setHeading:heading];
            [newCamera setAltitude:eyeAltitude];
            [mapView setCamera:newCamera];

2.

            MKMapCamera *newCamera = [MKMapCamera cameraLookingAtCenterCoordinate:newCoordinate
                                                             fromEyeCoordinate:oldCoordinate
                                                                   eyeAltitude:eyeAltitude];
            [newCamera setPitch:pitch];

            [mapView setCamera:newCamera];

3.

            MKMapCamera *oldCamera = mapView.camera;
            [oldCamera setCenterCoordinate:newCoordinate];
            [oldCamera setPitch:60];
            [oldCamera setHeading:heading];
            [oldCamera setAltitude:eyeAltitude];

明智的记忆似乎 nr 3 是最体面的还是单例类?在大多数示例中,他们使用 nr1。

对于 nr3,我无法让动画正常工作。

谢谢!

4

2 回答 2

4

使用 MKMapCamera,您可以设置地图的方向,而不会干扰视图上的变换,甚至不会检测用户的方向。

MKMapCamera *mapCamera = [[self.mvMap camera] copy];
[mapCamera setHeading:headingDegrees]; 
[self.mvMap setCamera:mapCamera animated:YES];

如果您不想要动画,您可以在现有相机上设置新标题:

[self.mapView.camera setHeading:heading];
于 2014-12-19T10:42:22.707 回答
0

Swift 5 中的更新答案

下面的代码对我有用,无需调用setCamera

let mapCamera = self.mapView.camera
mapCamera.heading = headingInDegrees
mapCamera.centerCoordinate = newCoordinate

您也可以像这样在现有相机上设置新标题:

self.mapView.camera.heading = headingInDegrees
于 2021-03-08T21:16:12.337 回答