Comment calculer la distance de l'emplacement de l'utilisateur à l'annotation lorsque l'utilisateur se déplace
J'ai une localisation de l'utilisateur (point bleu) et des annotations sur les mapView
. Lorsque l'annotation est sélectionné, je paramètre le texte à distLabel
- "la Distance au point d' %4,0 f m". Comment puis-je mettre à jour que l'étiquette de texte lorsque l'utilisateur se déplace?
didSelectAnnotationView:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
CLLocation *pinLocation =
[[CLLocation alloc] initWithLatitude:
[(MyAnnotation*)[view annotation] coordinate].latitude
longitude:
[(MyAnnotation*)[view annotation] coordinate].longitude];
CLLocation *userLocation =
[[CLLocation alloc] initWithLatitude:
self.mapView.userLocation.coordinate.latitude
longitude:
self.mapView.userLocation.coordinate.longitude];
CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation];
[distLabel setText: [NSString stringWithFormat:@"Distance to point %4.0f m.",
distance]];
}
Je sais qu'il existe une fonction didUpdateToLocation
, mais comment puis-je l'utiliser avec didSelectAnnotationView
?
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
//Did update to location
}
OriginalL'auteur Pavel Kaljunen | 2012-06-04
Vous devez vous connecter pour publier un commentaire.
La vue de la carte a un
selectedAnnotations
de la propriété que vous pouvez utiliser dans ladidUpdateToLocation
méthode à dire d'annotation pour obtenir la distance de.(En passant, si vous utilisez l'affichage de la carte du
userLocation
, vous pouvez utiliser la vue de la carte dudidUpdateUserLocation
délégué méthode au lieu dedidUpdateToLocation
qui est unCLLocationManager
délégué de la méthode.)Dans la méthode du délégué, vous pouvez vérifier s'il est en cours d'annotation sélectionnée et, si oui, de montrer la distance qui les annotations (autrement dire "aucune annotation sélectionnée").
Vous pourriez écrire une méthode commune qui peut être appelée à partir de deux
didSelectAnnotationView
etdidUpdateUserLocation
afin de réduire la duplication de code.Par exemple:
OriginalL'auteur