5

viewForAnnotationデリゲートメソッドを使用してアノテーションのタイプに基づいて画像を設定するカスタムアノテーションがあります。車が動いていることを表す1つの注釈のみを使用しており、車が動いて停止していることが検出されたときの画像を変更したい。注釈を削除して再度追加すると瞬きが発生する以外に、どうすればこれを実行できますか?

4

1 に答える 1

11

車の状態が変化したことを検出したら、MKMapView インスタンスメソッドを使用して注釈の現在のビューを取得しますviewForAnnotation:mapView:viewForAnnotation: これはデリゲートメソッドと同じではありません。

注釈の現在のビューを取得したら、 を含むそのプロパティを変更できますimage

また、車のアノテーションの状態に基づいて、mapView:viewForAnnotation:デリゲート メソッドが設定する条件とまったく同じであることを確認してください。imageコードが重複しないように、両方の場所 (状態が変化する場所とデリゲート メソッド) から呼び出される共通のメソッドにロジックを配置することができます。

たとえば、状態が変化した場合、次のようになる可能性があります。

//carAnnotation is your id<MKAnnotation> object
MKAnnotationView *av = [mapView viewForAnnotation:carAnnotation];
if (carAnnotation.isMoving)
    av.image = [UIImage imageNamed:@"moving.png"];
else
    av.image = [UIImage imageNamed:@"stopped.png"];

ステートメント (または設定する必要があるifロジック) は、デリゲート メソッドimageにもある必要がある部分です。viewForAnnotation

于 2012-05-04T12:27:12.047 に答える