我正在通过我的地图上的注释,以便找到一个具有特定标签的注释。然后我删除这个注释,并添加一个新的(差异颜色)
问题在于这需要非常长的时间。不知道为什么。它将通过300个注释,最多需要20秒!我怎样才能加快速度呢?例如,它有一种方法只能获得当前可见的注释吗?或者,如果我有注释,我可以告诉它在mapView.annotations数组中的索引是什么,所以我不必逐步执行?
for (int i =0; i < [self.mapView.annotations count]; i++)
{
if ([[self.mapView.annotations objectAtIndex:i] isKindOfClass:[BasicMapAnnotation class]] )
{
BasicMapAnnotation *bmaTemp =(BasicMapAnnotation*)[self.mapView.annotations objectAtIndex:i];
if (bmaTemp.mapTag == pinTag) {
[self.mapView removeAnnotation:[self.mapView.annotations objectAtIndex:i]];
self.customAnnotation = [[[BasicMapAnnotation alloc] initWithLatitude:[shop.latitude doubleValue] andLongitude:[shop.longitude doubleValue]] autorelease];
self.customAnnotation.mapTag = pinTag;
[self.mapView addAnnotation:self.customAnnotation];
}
}
}
答案 0 :(得分:1)
如果您确定要修改的注释实际上是可见的,则可以使用类似
的内容for (id annotation in [self.mapView annotationsInMapRect:self.mapView.visibleMapRect]){
if([annotation isKindOfClass:[BasicMapAnnotation class]]){
BasicMapAnnotation *annotationToModify = annotation;
if (bmaTemp.mapTag == pinTag) {
[self.mapView removeAnnotation:annotationToModify];
self.customAnnotation = [[[BasicMapAnnotation alloc] initWithLatitude:[shop.latitude doubleValue] andLongitude:[shop.longitude doubleValue]] autorelease];
self.customAnnotation.mapTag = pinTag;
[self.mapView addAnnotation:self.customAnnotation];
}
}
}
如果您想知道单个给定注释的索引:
int annotationIndex = [self.mapView.annotations indexOfObject:givenAnnotation];
未经测试,我在这里写了这个,所以请告诉我,无论它是否有效。