Retrasar la llamada al método delegado - MAPview: regionDidChangeAnimated:

votos
3

Cada vez que el usuario se desplaza mapa o zooms de entrada / salida, este método se llama de forma instantánea. Quiero retrasar la llamada a este método por ejemplo 2 segundos. ¿Es posible hacer eso?

Publicado el 17/04/2010 a las 22:27
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
4

Se podría aplicar ese método como este:

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

Entonces, en algún lugar de la misma clase:

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

Por supuesto, si usted no necesita uno de esos argumentos (ya sea mapViewoanimated ), usted podría hacer esto mucho más sencillo sólo por pasar el que necesitaba.

Si no se puede simplemente editar el código para su MKMapViewDelegate, tal vez se podría hacer algo similar con swizzling método, aunque a continuación, que está recibiendo muy hacky.

Respondida el 18/04/2010 a las 00:43
fuente por usuario

votos
0

Puede enviar un mensaje retrasado con performSelector:withObject:afterDelay:o uno de sus métodos relacionados.

Respondida el 18/04/2010 a las 00:19
fuente por usuario

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