Jedes Mal, wenn der Benutzer scrollt Karte oder zoomt in / out, wird diese Methode sofort aufgerufen. Ich möchte den Aufruf dieser Methode verzögern, indem etwa 2 Sekunden. Ist es möglich, das zu tun?
Verzögerung der Aufruf an die delegierte Methode - mapView: regionDidChangeAnimated:
stimmen
3
2 antworten
stimmen 4
4
Sie könnten diese Methode wie folgt umzusetzen:
-(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];
}
Dann irgendwo in der gleichen Klasse:
-(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
}
Natürlich, wenn Sie nicht von diesen Argumenten eine brauchen (entweder mapViewoder animated), könnten Sie diese wesentlich einfacher durch nur machen die ein Passieren Sie benötigten.
Wenn Sie nicht nur den Code für Ihre bearbeiten können MKMapViewDelegate, vielleicht könnten Sie etwas ähnliches mit Methode Swizzling tun, obwohl dann bist du immer wirklich Hacky.
stimmen 0
0
Sie können eine verzögerte Nachricht mit senden performSelector:withObject:afterDelay:oder eines seiner verbundenen Methoden.













