Est-il possible de déplacer les coordonnées d'une MKAnnotation sans ajouter et supprimer l'annotation de la carte?
Réponses
Trop de publicités?J'ai trouvé une méthode assez simple. Je voulais mettre à jour la position de mon joueur en douceur sans supprimer, puis rajouter l'annotation du joueur. Cela fonctionne bien pour les applications pré-iOS4, et ce qu'il fait, c'est à la fois déplacer la broche et centrer la carte sur le nouvel emplacement de la broche:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[player setCoordinate:aLoc.coordinate];
[mapView setCenterCoordinate:aLoc.coordinate animated:NO];
[UIView commitAnimations];
Voici la même chose mais en utilisant la fonctionnalité de blocage recommandée pour iOS4:
[UIView animateWithDuration:0.5 animations:^{
[player setCoordinate:aLoc.coordinate];
[mapView setCenterCoordinate:aLoc.coordinate animated:NO];
}];
Il est en effet possible sans retrait et ajout de l'annotation hors-cours.
Vous aurez besoin d'observer votre MKAnnotation de coordonner et de mettre à jour le MKAnnotationView de la position en cas de changement. Sinon, vous pouvez (et c'est sans doute la plus élégante façon de faire) tirer vos propres MKAnnotation et MKAnnotationView et de les rendre "mobile".
Voir en Mouvement-MKAnnotationView pour un exemple détaillé, qui anime également la position de l'annotation.
Ne sais pas si c'est de manière plus générale possible, mais c'est si vous avez votre propre personnalisé MKAnnotationView.
J'ai été en mesure d'adapter l'approche documentée à l' http://spitzkoff.com/craig/?p=108 par Craig Spitzkoff:
- Donnez à votre custom MKAnnotationView une référence à votre MKAnnotation objet
- Ajouter une méthode updateCoordinates à la MKAnnotation objet et l'appel de quand vous voulez changer l'emplacement de l'annotation
- Appel regionChanged sur la coutume MKAnnotationView pour laisser savoir quand pour repositionner lui-même (par exemple, lorsque MKAnnotation a mis à jour les coordonnées)
- Dans drawRect sur le vue interne de l'objet appartenant à votre personnalisé MKAnnotationView vous pouvez repositionner en utilisant les coordonnées de le MKAnnotation (vous êtes titulaire d'un référence).
Vous pourriez probablement simplifier cette approche de plus vous ne pouvez pas exiger une vue interne de l'objet dans toutes les circonstances.
Si vous gardez une référence à votre annotation, faire un changement dans les coordonnées du bien, puis ajouter l'annotation à la carte, l'emplacement de la vue d'annotation sera mise à jour. Vous n'avez pas besoin de supprimer l'annotation (qui sera la cause de la vue d'annotation momentanément disparaître). Ce ne sera pas vous donner une belle transition pour lors de l'annotation de coordonnées est mis à jour cependant. Elle n'a pas d'entraîner une fuite de mémoire il n'existe pas un multiple de la même annotation ajoutée à la carte (si vous regardez le nombre d'annotations sur la mapview, il reste constant lorsque vous ré-ajouter l'annotation).