Действительно ли возможно переместить координату MKAnnotation, не добавляя и удаляя аннотацию из карты?
Не представляется возможным изменить координаты объекта MKAnnotation и затем сообщить об этом MKMapView.
Однако удаление предыдущей аннотации с карты, изменение координат объекта аннотации и добавление его обратно на карту работает хорошо.
[theMapView removeAnnotation:myAnnotation];
[myAnnotation setLatitude:newLatitude];
[theMapView addAnnotation:myAnnotation];
Почему вы не хотите сделать это таким образом?
.Не знаю, возможно ли это в общем случае, но это возможно, если у вас есть свой собственный MKAnnotationView.
Я смог адаптировать подход, документированный на http://spitzkoff.com/craig/?p=108 Крейгом Спицкоффом:
Вероятно, вы можете упростить этот подход еще больше - вам может не потребоваться внутренний объект представления во всех обстоятельствах.
Взгляните на мой пример MapKitDragAndDrop , он позволяет обновлять MKAnnotation и перемещать MKAnnotationView как на iPhone OS 3, так и на iOS 4 (будет использоваться встроенная поддержка перетаскивания) .
Я нашел довольно простой метод. Я хотел плавно обновить позицию моего игрока, не удаляя, а затем повторно добавляя аннотацию игрока. Это хорошо работает для приложений, предшествующих 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];
}];