Как переместить MKAnnotation, не добавляя/удаляя его из карты?

Действительно ли возможно переместить координату MKAnnotation, не добавляя и удаляя аннотацию из карты?

36
задан DevDevDev 13 February 2010 в 01:44
поделиться

4 ответа

Не представляется возможным изменить координаты объекта MKAnnotation и затем сообщить об этом MKMapView.

Однако удаление предыдущей аннотации с карты, изменение координат объекта аннотации и добавление его обратно на карту работает хорошо.

[theMapView removeAnnotation:myAnnotation]; 
[myAnnotation setLatitude:newLatitude];
[theMapView addAnnotation:myAnnotation];

Почему вы не хотите сделать это таким образом?

.
-6
ответ дан 27 November 2019 в 06:10
поделиться

Не знаю, возможно ли это в общем случае, но это возможно, если у вас есть свой собственный MKAnnotationView.

Я смог адаптировать подход, документированный на http://spitzkoff.com/craig/?p=108 Крейгом Спицкоффом:

  1. Дайте вашему пользовательскому MKAnnotationView ссылку на ваш объект MKAnnotation
  2. Добавьте метод updateCoordinates к объекту MKAnnotation и вызывайте его его, когда вы хотите изменить местоположение аннотации
  3. Вызовите regionChanged на пользовательском объекте MKAnnotationView, чтобы дать ему знать, когда изменить свое положение (например, когда MKAnnotation обновила координаты)
  4. В drawRect на внутреннем объекте представления, принадлежащем вашему пользовательского MKAnnotationView, вы можете изменить положение, используя координаты MKAnnotation (у вас есть ссылку на нее).

Вероятно, вы можете упростить этот подход еще больше - вам может не потребоваться внутренний объект представления во всех обстоятельствах.

2
ответ дан 27 November 2019 в 06:10
поделиться

Взгляните на мой пример MapKitDragAndDrop , он позволяет обновлять MKAnnotation и перемещать MKAnnotationView как на iPhone OS 3, так и на iOS 4 (будет использоваться встроенная поддержка перетаскивания) .

0
ответ дан 27 November 2019 в 06:10
поделиться

Я нашел довольно простой метод. Я хотел плавно обновить позицию моего игрока, не удаляя, а затем повторно добавляя аннотацию игрока. Это хорошо работает для приложений, предшествующих iOS4, и при этом перемещает и центрирует карту в новом местоположении булавки:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[player setCoordinate:aLoc.coordinate];
[mapView setCenterCoordinate:aLoc.coordinate animated:NO];
[UIView commitAnimations];

Здесь то же самое, но с использованием рекомендуемой функции блокировки для iOS4:

[UIView animateWithDuration:0.5 animations:^{
    [player setCoordinate:aLoc.coordinate];
    [mapView setCenterCoordinate:aLoc.coordinate animated:NO];
}];
19
ответ дан 27 November 2019 в 06:10
поделиться