Retarder l'appel à la méthode délégué - Mapview: regionDidChangeAnimated:

voix
3

Chaque fois que l'utilisateur fait défiler la carte ou effectuer un zoom avant / arrière, cette méthode est appelée instantanément. Je veux retarder l'appel à cette méthode par exemple 2 secondes. Est-il possible de faire ça?

Créé 17/04/2010 à 22:27
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
4

Vous pouvez mettre en œuvre cette méthode comme ceci:

-(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];
}

Puis, quelque part dans la même 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
}

Bien sûr, si vous n'avez pas besoin l' un de ces arguments (soit mapViewou animated), vous pouvez vous simplifier la tâche considérablement en ne passant celui que vous avez besoin.

Si vous ne pouvez pas modifier le code de votre MKMapViewDelegate, peut - être que vous pourriez faire quelque chose de similaire avec la méthode swizzling, bien que vous obtenez vraiment aki.

Créé 18/04/2010 à 00:43
source utilisateur

voix
0

Vous pouvez envoyer un message retardé avec performSelector:withObject:afterDelay:ou l' une de ses méthodes connexes.

Créé 18/04/2010 à 00:19
source utilisateur

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