39 votes

Comment déplacer une MKAnnotation sans l'ajouter / la retirer de la carte?

Est-il possible de déplacer les coordonnées d'une MKAnnotation sans ajouter et supprimer l'annotation de la carte?

19voto

spstanley Points 599

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];
}];
 

7voto

100grams Points 1185

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.

4voto

malcolmhall Points 1909

Étendez MKPointAnnotation et il a la capacité de mettre à jour la vue d'annotation sur la carte aux nouvelles coordonnées.

2voto

StephenT Points 195

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:

  1. Donnez à votre custom MKAnnotationView une référence à votre MKAnnotation objet
  2. Ajouter une méthode updateCoordinates à la MKAnnotation objet et l'appel de quand vous voulez changer l'emplacement de l'annotation
  3. 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)
  4. 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.

1voto

Willster Points 1458

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).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X