Vertraging van de oproep aan de gemachtigde methode - mapView: regionDidChangeAnimated:

stemmen
3

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?

De vraag is gesteld op 17/04/2010 om 22:27
bron van user
In andere talen...                            


2 antwoorden

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

antwoordde op 18/04/2010 om 00:43
bron van user

stemmen
0

U kunt een vertraagde bericht met performSelector:withObject:afterDelay:of één van haar verwante methoden.

antwoordde op 18/04/2010 om 00:19
bron van user

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