Opóźnić wywołanie metody delegata - MapView: regionDidChangeAnimated:

głosy
3

Ilekroć użytkownik przewija mapy lub powiększa in / out, metoda ta jest wywoływana natychmiast. Chcę, aby opóźnić wywołanie tej metody przez powiedzmy 2 sekundy. czy jest to możliwe do zrobienia?

Utwórz 17/04/2010 o 22:27
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
4

Można wdrożyć tę metodę tak:

-(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];
}

Potem, gdzieś w tej samej klasie:

-(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
}

Oczywiście, jeśli nie potrzebujesz tych argumentów (albo mapViewalbo animated), można zrobić to znacznie prostsze tylko przechodząc przez jedno z nich musiał.

Jeśli nie można po prostu edytować kod swojego MKMapViewDelegate, być może można zrobić coś podobnego z metodą swizzling, chociaż wtedy dostajesz naprawdę hacky.

Odpowiedział 18/04/2010 o 00:43
źródło użytkownik

głosy
0

Możesz wysłać wiadomość z opóźnieniem performSelector:withObject:afterDelay:lub jeden z jej pokrewnych metod.

Odpowiedział 18/04/2010 o 00:19
źródło użytkownik

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