Pav*_*nen 7 xcode annotations distance ios
我有一个用户位置(蓝点)和注释mapView.选择注释时,我将文本设置为distLabel- "距离点%4.0f m.".用户移动时如何更新该文本标签?
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]];
}
Run Code Online (Sandbox Code Playgroud)
我知道有一个功能didUpdateToLocation,但我怎么能用didSelectAnnotationView呢?
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
//Did update to location
}
Run Code Online (Sandbox Code Playgroud)
小智 15
地图视图有一个selectedAnnotations属性,您可以在didUpdateToLocation方法中使用该属性来指示哪个注释可以获得距离.
(顺便说一下,如果你正在使用的地图视图的userLocation,则可能需要使用地图视图的didUpdateUserLocation委托方法,而不是didUpdateToLocation这是一个CLLocationManager委托方法.)
在委托方法中,您可以检查是否有任何当前选定的注释,如果是,则显示该注释的距离(否则说"未选择注释").
您可能希望编写一个可以从两者中调用的常用方法,didSelectAnnotationView并didUpdateUserLocation减少代码重复.
例如:
-(void)updateDistanceToAnnotation:(id<MKAnnotation>)annotation
{
if (annotation == nil)
{
distLabel.text = @"No annotation selected";
return;
}
if (mapView.userLocation.location == nil)
{
distLabel.text = @"User location is unknown";
return;
}
CLLocation *pinLocation = [[CLLocation alloc]
initWithLatitude:annotation.coordinate.latitude
longitude:annotation.coordinate.longitude];
CLLocation *userLocation = [[CLLocation alloc]
initWithLatitude:mapView.userLocation.coordinate.latitude
longitude:mapView.userLocation.coordinate.longitude];
CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation];
[distLabel setText: [NSString stringWithFormat:@"Distance to point %4.0f m.", distance]];
}
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if (mapView.selectedAnnotations.count == 0)
//no annotation is currently selected
[self updateDistanceToAnnotation:nil];
else
//first object in array is currently selected annotation
[self updateDistanceToAnnotation:[mapView.selectedAnnotations objectAtIndex:0]];
}
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
[self updateDistanceToAnnotation:view.annotation];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15353 次 |
| 最近记录: |