iOS actualisation des annotations sur les mapview
J'ai une mapview où l'annotation coordonnées sont constamment mis à jour, mais lorsque j'utilise setCoordinate, l'annotation ne bouge pas. Comment puis-je actualiser les annotations afin de refléter leurs coordonnées?
- (void)updateUnits {
PFQuery *query = [PFQuery queryWithClassName:@"devices"];
[query whereKeyExists:@"location"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *row in objects) {
PFGeoPoint *geoPoint = [row objectForKey:@"location"];
CLLocationCoordinate2D coord = { geoPoint.latitude, geoPoint.longitude };
for (id<MKAnnotation> ann in mapView.annotations) {
if ([ann.title isEqualToString:[row objectForKey:@"deviceid"]]) {
[ann setCoordinate:coord];
NSLog(@"latitude is: %f" , coord.latitude);
NSLog(@"Is called");
break;
}
else {
//[self.mapView removeAnnotation:ann];
}
}
}
}
else {
}
}];
}
Cela peut être fait en changeant juste les coordonnées de l'objet de l'Annotation. Il ne nécessite pas l'annotation à supprimer, puis ajouté à la carte pour que les changements entrent en vigueur
OriginalL'auteur Jon Erickson | 2013-01-03
Vous devez vous connecter pour publier un commentaire.
Mis à jour (pour refléter la solution):
Avoir vos propres annotations et la mise en œuvre de setCoordinate et/ou synthétiser coordonner peuvent causer des problèmes.
Source: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html
Solution précédente:
Vous pouvez simplement supprimer toutes les annotations et puis les rajouter.
ou de les supprimer et de les rajouter un par un:
Sont-ils un d'annotations personnalisées? Si oui, avez-vous surchargez les coordonnées de la propriété?
Oui il est de coutume. Qu'entendez-vous par la surcharge de la coordonnée de la propriété?
Avez-vous mis en place un setCoordinate méthode ou avez-vous mis @synthétiser les coordonnées de n'importe où? Il n'est pas probable que vous avez, mais qui pourrait causer un problème.
En fait, si vous regardez au-dessus, j'utilise l'id<MKAnnotation> que la classe de l'ann pointeur. Il ne sera donc pas une coutume annotation correcte? Mais lorsque l'annotation est ajoutée tout d'abord dans une autre méthode, c'est une coutume d'annotation où je l'ai déclaré à la setCoordinate méthode et synthétisé les coordonner.
OriginalL'auteur Rowan Freeman
L'envoi de l'ajout d'annotation pour le thread principal, plutôt que de tenter de modifier l'INTERFACE utilisateur sur un thread d'arrière-plan
OriginalL'auteur Nathan
Swift 3.0 version de Nathan réponse (merci Nathan):
Note de côté, Nathan réponse devrait avoir beaucoup plus de upvotes. J'ai réellement besoin de cette aide avec la suppression d'une annotation, le même problème existe et qu'il est fixé par l'envoi de la mise à jour de la file d'attente principale.
OriginalL'auteur biomiker
Essayez d'utiliser
[self.mapView removeAnnotations:self.mapView.annotations]
:OriginalL'auteur oscar castellon