Wanneer de gebruiker scrollt kaart of zoomt in / out, krijgt deze methode onmiddellijk genoemd. Ik wil de aanroep van deze methode door bijvoorbeeld 2 seconden vertragen. Is het mogelijk om dat te doen?
Vertraging van de oproep aan de gemachtigde methode - mapView: regionDidChangeAnimated:
stemmen
3
2 antwoorden
stemmen 4
4
Je zou die methode als dit te implementeren:
-(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];
}
Dan, ergens in dezelfde 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
}
Natuurlijk, als je een van die argumenten niet (ofwel nodig mapViewof animated), kunt u deze aanzienlijk eenvoudiger te maken door alleen het passeren van de degene die je nodig had.
Als u niet alleen de code kunt bewerken voor je MKMapViewDelegate, misschien kan je iets soortgelijks met de methode swizzling doen, maar dan je krijgt echt hacky.
stemmen 0
0
U kunt een vertraagde bericht met performSelector:withObject:afterDelay:of één van haar verwante methoden.













