Можно ли ускорить сброс аннотаций в MKMapView?

У меня на карте около 30 аннотаций, и я хочу ускорить анимацию опускания.

Можно ли ускорить удаление аннотаций в MKMapView или удалить все сразу?


person nobu86    schedule 01.07.2011    source источник


Ответы (1)


Вам нужно будет реализовать собственную анимацию перетаскивания в методе делегата didAddAnnotationViews. Вы также должны установить animatesDrop на NO, чтобы избежать возможной двойной анимации.

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews
{
    NSTimeInterval delayInterval = 0;

    for (MKAnnotationView *annView in annotationViews)
    {
        CGRect endFrame = annView.frame;

        annView.frame = CGRectOffset(endFrame, 0, -500);

        [UIView animateWithDuration:0.125 
                              delay:delayInterval
                            options:UIViewAnimationOptionAllowUserInteraction 
                         animations:^{ annView.frame = endFrame; } 
                         completion:NULL];

        delayInterval += 0.0625;
    }
}

При этом аннотации удаляются с указанной вами скоростью.

Чтобы удалить их все сразу, жестко закодируйте параметр delay в 0.0 вместо увеличивающегося delayInterval.

person Community    schedule 01.07.2011
comment
Я пробовал это, но некоторые из выводов отбрасываются с высокой скоростью, а другие отбрасываются со скоростью по умолчанию... Я пытался установить 0,0 для delayInterval, но выводы не отбрасываются все сразу... - person nobu86; 04.07.2011
comment
Я не могу точно воспроизвести проблемы, которые вы видите, но: добавляются ли аннотации отдельными пакетами или одним вызовом метода? Если в отдельных вызовах метода, попробуйте сначала добавить аннотации к NSMutableArray, а затем вызвать addAnnotations с массивом, чтобы добавить все сразу. Или у вас есть какая-либо другая трудоемкая обработка, происходящая одновременно с добавлением аннотаций? - person ; 05.07.2011
comment
Я сделал то, что ты сказал. Добавил все контакты в NSMutableArray, а затем добавил его с помощью метода addAnnotationS. И ничего не изменилось. И у меня нет никакого другого процесса, происходящего в то же время. Я делаю что-то вроде этого: добавляю все контакты в метод до вызова делегата: - person nobu86; 07.07.2011
comment
поэтому в делегате я просто делаю последние настройки для своих аннотаций и возвращаю MKPinAnnotationView. - person nobu86; 07.07.2011
comment
Убедитесь, что для параметра animatesDrop установлено значение NO в viewForAnnotation. Если это так, но вы все еще видите проблему, попробуйте создать отдельное приложение, которое просто имеет карту и добавляет аннотации, используя некоторые жестко закодированные координаты. Это может помочь изолировать причину. Вы тестируете на устройстве или симуляторе? Какая версия iOS? - person ; 07.07.2011