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