マップビューでユーザーの位置から選択した注釈のサブタイトルまでの距離を追加しようとしています。その仕組みは機能していますが、実際のコールアウトは、最初に表示されたときに混乱します。再描画の問題があるようです。
その後ピンをタップすると、正しいレイアウトが表示されます。
関連するコードは次のとおりです。
//注釈を選択するときに呼び出されます
- (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];
}
}