我正在尝试将用户位置的距离添加到地图视图中选定注释的副标题。它的机制正在工作,但实际的标注在第一次显示时就搞砸了。似乎有重绘问题。
引脚上的后续点击显示正确的布局。
以下是相关代码:
//选择注释时调用
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
MKPointAnnotation *selectedAnnotation = view.annotation;
//attempt to add distance on annotation
CLLocation *pointALocation = [[CLLocation alloc]
initWithLatitude:selectedAnnotation.coordinate.latitude
longitude:selectedAnnotation.coordinate.longitude];
float distanceMeters = [pointALocation distanceFromLocation:locationManager.location];
//for sending info to detail
myPinTitle = selectedAnnotation.title;
[selectedAnnotation setSubtitle:[NSString stringWithFormat:@"%.2f miles away", (distanceMeters / 1609.344)]];
} 我试过调用[view setNeedsDisplay],但无济于事。
提前感谢您的帮助。
这是我最终提出的解决方案。它似乎有效。
我从上面的didSelectAnnotationView方法中删除了重复的代码,并提出了:
//called when user location changes
- (void)updatePinsDistance
{
for (int x=0; x< [[mapView annotations]count]; x++) {
MKPointAnnotation *thisPin =[[mapView annotations] objectAtIndex:x];
//attempt to add distance on annotation
CLLocation *pointALocation = [[CLLocation alloc]
initWithLatitude:thisPin.coordinate.latitude
longitude:thisPin.coordinate.longitude];
float distanceMeters = [pointALocation distanceFromLocation:locationManager.location];
NSString *distanceMiles = [NSString stringWithFormat:@"%.2f miles from you",
(distanceMeters / 1609.344)];
[thisPin setSubtitle:distanceMiles];
}
}
答案 0 :(得分:3)
您应该将字幕设置在didSelectAnnotationView之外的其他位置。实际上所有的annotationViews都应该在mapView:viewForAnnotation:method返回之前设置它们的标题和副标题。
您设置长字幕的事实肯定会说明标注不是正确的尺寸。必须在调用didSelectAnnotationView之前计算大小。