Verzögerung der Aufruf an die delegierte Methode - mapView: regionDidChangeAnimated:

stimmen
3

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?

Veröffentlicht am 17/04/2010 um 22:27
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
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.

Beantwortet am 18/04/2010 um 00:43
quelle vom benutzer

stimmen
0

Sie können eine verzögerte Nachricht mit senden performSelector:withObject:afterDelay:oder eines seiner verbundenen Methoden.

Beantwortet am 18/04/2010 um 00:19
quelle vom benutzer

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