アノテーションの座標を削除、再作成、再追加せずに変更するには、coordinate
プロパティが設定可能なアノテーションクラスを作成します。これを行うための簡単な方法は、このようcoordinate
プロパティを定義することです:代わりに独自のクラスを定義する、
また
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
、あなたはまた、設定可能なcoordinate
が内蔵されていMKPointAnnotation
クラスを使用することができます。
最初に注釈を作成して追加します。例:あなたは、サーバーと「ユーザー1」の変化のための座標からアップデートを取得するときに
MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = someCoordinate;
pa.title = @"User1";
[mapView addAnnotation:pa];
[pa release];
後で、あなたはマップビューのannotations
配列で、そのユーザの注釈を検索したり、注釈への参照を格納しますか、他の構造ではNSMutableDictionary
のようなキーを使って素早くアクセスできます。
注釈が見つかったら、注釈のcoordinate
プロパティを新しい値に設定するだけで、マップビューは自動的に注釈のビューを新しい場所に移動します。
この例では、annotations
配列検索:
for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann isKindOfClass:[YourAnnotationClass class]])
{
YourAnnotationClass *yacAnn = (YourAnnotationClass *)ann;
if (yacAnn.userIdNumber == user1Id)
{
yacAnn.coordinate = theNewCoordinate;
break;
}
}
}
:あなたは、アノテーションクラスの異なる、カスタムプロパティを(たとえば、いくつかのuserIdNumberという名前のint型)を使用して注釈を検索したい場合は
for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann.title isEqualToString:@"User1"])
{
ann.coordinate = theNewCoordinate;
break;
}
}
を上記は、座標を変更する方法の例です。座標を変更する注釈がたくさんある場合は、1つずつ検索することはお勧めしません。その代わりに、参照を辞書に格納し、キー値を使用して参照をすばやく検索することができます。
setCoordinateが機能しなかった理由(コンパイラエラー、警告、実行時エラー、クラッシュ、その他)を詳しく説明してください。注釈クラス.hと.mを表示します。最後の段落の意味を理解しないでください(「タッチしないでドラッグします...」)。 – Anna
実際には、MKMapViewのMKAnnotationオブジェクトにアクセスする方法はわかりません。(「viewForAnnotation :(id)注釈」以外のところでは)..私は... NSArray * pinGreen = [[NSArray alloc] initWithArray:[self。 mapViewアノテーション]]; \t \t { \t \t \t \t \t { \t \t([:I] isKindOfClass [MapViewAnnotationクラス] [pinGreen objectAtIndex])場合(; iが
「不可能」という結論は間違っています。もちろん、アノテーション上でsetCoordinateを使用して、アノテーションビューを直接的または間接的に移動することもできます。 – Anna