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?
Opóźnić wywołanie metody delegata - MapView: regionDidChangeAnimated:
głosy
3
2 odpowiedzi
głosy 4
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.
głosy 0
0
Możesz wysłać wiadomość z opóźnieniem performSelector:withObject:afterDelay:lub jeden z jej pokrewnych metod.













