Задержка вызова метода делегата - mapView: regionDidChangeAnimated: - PullRequest
3 голосов
/ 18 апреля 2010

Всякий раз, когда пользователь прокручивает карту или увеличивает / уменьшает, этот метод вызывается мгновенно. Я хочу отложить вызов этого метода, скажем, на 2 секунды. Возможно ли это сделать?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2010

Вы можете реализовать этот метод следующим образом:

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSNumber *animatedNumber = [NSNumber numberWithBool:animated];
    NSArray *args = [[NSArray alloc] initWithObjects:mapView,
                                                     animatedNumber,nil];

    [self performSelector:@selector(delayedMapViewRegionDidChangeAnimated:)
          withObject:args
          afterDelay:2.0f];

    [args release];
}

Тогда где-то в том же классе:

-(void)delayedMapViewRegionDidChangeAnimated:(NSArray *)args
{
  MKMapView *mapView = [args objectAtIndex:0];
  BOOL animated = [[args objectAtIndex:1] boolValue];

  // do what you would have done in mapView:regionDidChangeAnimated: here
}

Конечно, если вам не нужен ни один из этих аргументов (mapView или animated), вы можете значительно упростить это, передав только тот, который вам нужен.

Если вы не можете просто отредактировать код для MKMapViewDelegate, возможно, вы могли бы сделать что-то подобное с методом swizzling, хотя тогда вы получите действительно хаки.

0 голосов
/ 18 апреля 2010

Вы можете отправить отложенное сообщение с помощью performSelector:withObject:afterDelay: или одним из связанных с ним способов.

...