Как лучше всего использовать MKMapCamera?

Я нашел три способа использования 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];

Мудрая память кажется номером 3 самой приличной или это класс синглтон? В большинстве примеров они используют nr1.

Для nr 3 я не могу заставить анимацию работать.

Спасибо!

2 ответа

Используя MKMapCamera, вы можете установить ориентацию карты, не вмешиваясь в преобразования на виде и даже не определяя заголовок пользователя.

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

Если вам не нужна анимация, вы можете просто установить новый заголовок на существующей камере:

[self.mapView.camera setHeading:heading];

Обновленный ответ в Swift 5

Код ниже работал у меня без звонка setCamera

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

Вы также можете просто установить новый заголовок на существующей камере следующим образом:

      self.mapView.camera.heading = headingInDegrees
Другие вопросы по тегам