Задержка вызов метода делегата - MAPview: regionDidChangeAnimated:

голоса
3

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

Задан 17/04/2010 в 22:27
источник пользователем
На других языках...                            


2 ответов

голоса
4

Вы могли бы реализовать этот метод, как это:

-(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, хотя тогда вы получаете действительно Hacky.

Ответил 18/04/2010 в 00:43
источник пользователем

голоса
0

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

Ответил 18/04/2010 в 00:19
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more