Обработка большого количества аннотаций MKMapView

У меня есть вид карты с большим количеством аннотаций (3000+), когда пользователь увеличивает масштаб до разумного уровня, все идет хорошо и быстро.

Хотя, когда пользователь уменьшает масштаб и появляется большое количество аннотаций, происходит большое замедление из-за большого количества аннотаций, отображаемых одновременно. Как лучше всего справиться с этим?

Текущее решение, которое я использую:

- (void)mapView:(MKMapView *)_mapView regionDidChangeAnimated:(BOOL)animated {

    NSArray *annotations = [_mapView annotations];  
    MapAnnotation *annotation = nil; 

    for (int i=0; i<[annotations count]; i++)
    {
        annotation = (MapAnnotation*)[annotations objectAtIndex:i];
        if (_mapView.region.span.latitudeDelta > .010)
        {
            [[_mapView viewForAnnotation:annotation] setHidden:YES];
            warningLabel.hidden = NO;
        }
        else {
            [[_mapView viewForAnnotation:annotation] setHidden:NO];
            warningLabel.hidden = YES;
        }
    }
}

Отлично работает, хотя из-за огромного размера цикла это вызывает значительное замедление при увеличении и уменьшении масштаба и прокрутке. Кажется, я не могу придумать лучшего способа справиться с этим, есть ли способ только перебрать аннотации, отображаемые в данный момент, или что-то в этом роде, чтобы уменьшить размер цикла?

10
задан Alex 23 January 2011 в 23:30
поделиться