在MKMapView上处理MKAnnotations时减慢速度

时间:2011-08-11 20:22:09

标签: iphone objective-c ios mkmapview mkannotation

我正在通过我的地图上的注释,以便找到一个具有特定标签的注释。然后我删除这个注释,并添加一个新的(差异颜色)

问题在于这需要非常长的时间。不知道为什么。它将通过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];
            }

        }
}

1 个答案:

答案 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];

未经测试,我在这里写了这个,所以请告诉我,无论它是否有效。