1

タイトルとサブタイトルが付いたカスタムの目印があります。サブタイトルは実際にドロップされたピンのアドレスをリバース ジオコーダーを使用して表示しています。

ピンをドロップするアクションを持つボタンがあります。このアクションは、ユーザーの位置座標を取得し、[geocoder start] を呼び出します。これは、リバース ジオコーダーで完全な住所を取得し、カスタム アノテーションを生成してから、[mapView addAnnotation:customPlacemark] を呼び出します。

私の問題は、このシーケンス順序を使用すると、WiFi 接続がない場合 (3G または Edge のみ)、リバース ジオコーディング情報を取得するのを待っているため、ピンをドロップするのに多くの時間がかかることです。

したがって、基本的にはサブタイトルなしでピンをドロップし、viewDidAnnotation からジオコーダーを呼び出し、reverseGeocoder 内でサブタイトルを更新する必要がありますが、その方法がわかりません。

住所の詳細なしで注釈を表示し、逆ジオコーダーから情報を取得したときに更新したいと考えています。

助言がありますか?

前もって感謝します

4

2 に答える 2

4

MKMapViewKVOを介して注釈の変更を監視します。したがって、KVOに準拠した方法で注釈のプロパティを更新すると、正常に機能するはずです。

たとえば、逆ジオコーダーがアノテーションの住所を返す場合、最初にプロパティが変更されようtitleとしていることをアナウンスします。subtitle

[self willChangeValueForKey:@"title"];
[self willChangeValueForKey:@"subtitle"];

上記のコードはアノテーションクラスにあると想定されていることに注意してください。

次に、ジオコーダーからの情報で注釈を更新します。完了したら:

[self didChangeValueForKey:@"subtitle"];
[self didChangeValueForKey:@"title"];

didChangeValueForKey:HTMLタグのように、これらを適切にネストする必要があるため、順序が変更されていることに注意してください。

これはcoordinateプロパティでも機能し、ピンが移動します。

于 2011-04-18T16:23:57.340 に答える
0

アノテーションを配置し、プロパティにその参照を保持します。次に、逆ジオコーダーがコールバックするときに、アノテーションへの参照を使用して、そのプロパティを更新します。

于 2011-04-18T16:24:25.437 に答える