De fiecare dată când utilizatorul derulează harta sau zoom in / out, această metodă se numește instantaneu. Vreau să întârzie apelul la această metodă să zicem 2 secunde. Este posibil să faci asta?
Întârzie apelul la metoda delegat - mapView: regionDidChangeAnimated:
voturi
3
2 răspunsuri
voturi 4
4
Ai putea pune în aplicare această metodă ca aceasta:
-(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];
}
Apoi, undeva în aceeași clasă:
-(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
}
Desigur, dacă nu aveți nevoie de unul dintre aceste argumente (fie mapViewsau animated), ai putea face acest lucru în mod considerabil mai simplu de numai trecerea cea pe care a avut nevoie.
Dacă nu puteți modifica doar codul pentru dvs. MKMapViewDelegate, poate că ai putea face ceva similar cu metoda swizzling, deși atunci vei primi cu adevărat hacky.
voturi 0
0
Puteți trimite un mesaj întârziat cu performSelector:withObject:afterDelay:sau una dintre metodele sale afiliate.













