要更改注释的坐标而不删除、重新创建并再次添加它,请创建一个注释类,其中coordinate
属性是可设置的。执行此操作的一个简单方法是定义coordinate
像这样的属性:
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
或者,您也可以使用内置的类,而不是定义自己的类MKPointAnnotation
具有可设置的类coordinate
.
您最初像往常一样创建并添加注释。例如:
MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = someCoordinate;
pa.title = @"User1";
[mapView addAnnotation:pa];
[pa release];
稍后,当您从服务器获得更新并且“User1”的坐标发生更改时,您可以在地图视图的annotations
数组或将注释的引用存储在其他结构中,允许使用键(如NSMutableDictionary
.
找到注释后,只需设置注释的coordinate
属性更改为新值,地图视图将自动将注释的视图移动到新位置。
此示例搜索annotations
array:
for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann.title isEqualToString:@"User1"])
{
ann.coordinate = theNewCoordinate;
break;
}
}
如果您想使用注释类的不同自定义属性(例如某个名为 userIdNumber 的 int)来查找注释:
for (id<MKAnnotation> ann in mapView.annotations)
{
if ([ann isKindOfClass:[YourAnnotationClass class]])
{
YourAnnotationClass *yacAnn = (YourAnnotationClass *)ann;
if (yacAnn.userIdNumber == user1Id)
{
yacAnn.coordinate = theNewCoordinate;
break;
}
}
}
上面只是一个如何改变坐标的例子。如果您有大量坐标不断变化的注释,我不建议一次搜索它们。相反,您可以将引用存储在字典中,并使用键值快速查找它们。