Ничто в вашем коде (который вы показали) не говорит mapView, что местоположение аннотации изменилось.Сама аннотация, вероятно, не может сделать это в -moveAnnotation
, потому что аннотации обычно не знают, к какой карте или картам они были добавлены (и не должны).
Правильный способ перемещения аннотации -чтобы удалить его из MKMapView, который его использует, обновить его местоположение, а затем добавить его обратно на карту.Вы не можете просто изменить местоположение аннотации после того, как она была добавлена на карту, потому что карта может очень хорошо кэшировать местоположение или отсортировать аннотацию в соответствии с ее местоположением, и в MKMapView нет способа сообщить карте, что местоположение изменилось.
Я бы изменил ваше условие на что-то вроде этого:
if (annotation == nil) {
annotation = [[MyAnnotation alloc] init];
annotation.title = @"Tap arrow to use address";
}
[mapView removeAnnotation:annotation];
[annotation moveAnnotation:placemark.coordinate];
annotation.subtitle = placemark.formattedAddress;
[mapView addAnnotation:annotation];
Предполагается, что вместо -initWithCoordinate:title:subtitle:
безопасно звонить -init
;если нет, вы захотите изменить это.