Întârzie apelul la metoda delegat - mapView: regionDidChangeAnimated:

voturi
3

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?

Întrebat 17/04/2010 la 22:27
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

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

Publicat 18/04/2010 la 00:43
sursa de către utilizator

voturi
0

Puteți trimite un mesaj întârziat cu performSelector:withObject:afterDelay:sau una dintre metodele sale afiliate.

Publicat 18/04/2010 la 00:19
sursa de către utilizator

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