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?
Ritardare la chiamata al metodo delegato - MapView: regionDidChangeAnimated:
voti
3
2 risposte
voti 4
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.
voti 0
0
È possibile inviare un messaggio in ritardo con performSelector:withObject:afterDelay:o uno dei suoi metodi correlati.













