从更新的阵列更新MKMapView注释?

时间:2011-01-12 20:13:53

标签: iphone objective-c cocoa-touch

我正在使用符合NSMutableArray协议的MKAnnotation个对象。我的问题是随着时间的推移,新的对象被添加到数组中,任何人都可以告诉我在mapView上更新注释的首选方法是什么。在添加更新的阵列之前,我是否应该考虑删除所有引脚,或者我是否更好地标记/标记MKAnnotation对象中的现有引脚并仅添加新的(未标记的)引脚?

1 个答案:

答案 0 :(得分:6)

删除所有引脚并添加整个阵列(包括新注释)将导致闪烁并且不必要地重新绘制未更改的引脚。

除非需要闪烁或由于某种原因需要完全刷新,否则最好告诉地图视图添加新的引脚。

使用新引脚更新主注释数组后,构造一个名为newAnnots的临时数组,其中包含对主数组中新注释的引用,并将newAnnots传递给地图视图{{1 }} 方法。之后可以丢弃临时数组。

但是,您可以只检查主数组中的注释对象是否已存在于地图视图的addAnnotations:数组中,而不是使用标记来标识“新”注释。例如:

annotations

与地图视图相比,注释数组仅在主数组中的注释对象是您在if (![mapView.annotations containsObject:annot_from_your_main_array]) { [newAnnots addObject:annot_from_your_main_array]; } addAnnotation:中为地图视图提供的实际注释时才有效。此外,当您的主阵列“更新”时,它应该只添加新的注释,而不是从头开始重建整个数组。如果是这样,注释引用将与地图视图的数组中的注释引用不匹配。

如果要删除更新上的注释,则同样适用。删除的注释可以添加到临时“删除”列表中(通过检查数组中是否存在地图视图数组中的注释)并传递给addAnnotations:

请注意,如果更新主数组中现有注释的坐标,只要数组中的注释对象实现removeAnnotations:方法,地图视图就会自动更新引脚的位置。