Ritardare la chiamata al metodo delegato - MapView: regionDidChangeAnimated:

voti
3

Ogni volta che l'utente scorre mappa o zoom in / out, questo metodo viene chiamato istantaneamente. Voglio ritardare la chiamata a questo metodo per esempio 2 sec. è possibile farlo?

È pubblicato 17/04/2010 alle 22:27
fonte dall'utente
In altre lingue...                            


2 risposte

voti
4

Si potrebbe attuare tale metodo come questo:

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

Poi, da qualche parte nella stessa classe:

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

Naturalmente, se non avete bisogno di uno di quegli argomenti (sia mapViewo animated), si potrebbe fare questo notevolmente più semplice da solo passando quello che ne aveva bisogno.

Se non si può semplicemente modificare il codice per la vostra MKMapViewDelegate, forse si potrebbe fare qualcosa di simile con il metodo swizzling, anche se allora che stai ricevendo davvero hacky.

Risposto il 18/04/2010 a 00:43
fonte dall'utente

voti
0

È possibile inviare un messaggio in ritardo con performSelector:withObject:afterDelay:o uno dei suoi metodi correlati.

Risposto il 18/04/2010 a 00:19
fonte dall'utente

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