マップビュー内の選択したアノテーションのサブタイトルまでの距離をユーザーの位置から加算しようとしています。それの仕組みは機能していますが、実際のコールアウトは最初に表示されるときにうんざりします。再描画の問題があるようです。ピンのiOS SDK Mapviewアノテーションコールアウトの再描画エラー
後続タップ正しいレイアウトを示しています。
がここに関連するコードです:注釈
- (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)]];
} を選択するときに呼び出さ
//私は、[ビューのsetNeedsDisplay]呼び出ししようとしたが、無駄にしました。
ご協力いただきありがとうございます。
ここ
働いたソリューションは、私が最終的に思い付いたソリューションです。それは動作するようです。
私は上記の、didSelectAnnotationView方法から重複したコードを編集した、と思い付いた:あなたは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];
}
}
注釈が作成されたときに元の字幕が追加されますが、現在のユーザーの場所から選択した地点までの距離を表示したいので、その情報を追加できません。また、置換された距離ストリングは、実際には元の距離ストリングより小さくてもよい。 –
代わりに、mapView:didUpdateUserLocation:delegateメソッドを使用してユーザーの場所が変更されたときに再計算する必要があります。率直に言って、吹き出しを表示しながら字幕を変更することは、合理的なことではありません。 –
だから、表示する必要があるだけでなく、見えなくてもユーザーの位置が変更されたときに、すべての注釈のサブタイトルを変更する必要がありますか?私はそれがより合理的である方法として混乱している。あなたは精緻化できますか?ありがとう。 –