2012-04-05 13 views
8

Tengo dos opciones de superposición en mi mapa: una MKCircleOverlay y una MKPolygonOverlay. La primera es con radio variable, controlada mediante un UISlider.La última es personalizable dependiendo del número y la posición de las esquinas.Si cambio muy rápido el radio del círculo (reduce el valor de UISlider) a veces mi superposición desaparece (el círculo) y después de eso el polígono ya no se puede dibujar (por supuesto también el círculo). No se cuelga la aplicación. ¿Qué podría ser?MKOverlay a veces desaparece

Aquí hay un código que utilizo:

- (IBAction) addCircle:(id)sender 
{ 
slider.hidden = NO; 
slider.transform = CGAffineTransformMakeRotation(M_PI*(-0.5)); 

_longPressRecognizer= [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
_longPressRecognizer.minimumPressDuration = 1.0; 

[mapview addGestureRecognizer:_longPressRecognizer]; 
[_longPressRecognizer release]; 
} 

- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer 
{ 
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) 
    return; 
CGPoint touchPoint = [gestureRecognizer locationInView:mapview];  
CLLocationCoordinate2D touchMapCoordinate = [mapview convertPoint:touchPoint toCoordinateFromView:mapview]; 

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 
pa.coordinate = touchMapCoordinate; 
pa.title = @"Circle Based Search"; 

[mapview addAnnotation:pa]; 
[pa release]; 

tmC = touchMapCoordinate; 
double radius = 1000.0; 

self.circleOverlay = [MKCircle circleWithCenterCoordinate:tmC radius:radius]; 
[mapview removeOverlays:[mapview overlays]]; 
[mapview addOverlay:circleOverlay]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 


-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay 
{ 
if ([overlay isKindOfClass:[MKCircle class]]) 
{ 
    MKCircleView* circleView = [[MKCircleView alloc] initWithOverlay:overlay] ; 
    circleView.fillColor = [UIColor blueColor]; 
    circleView.strokeColor = [UIColor blueColor]; 
    circleView.lineWidth = 5.0; 
    circleView.alpha = 0.20; 
     return circleView; 
} 
else 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
{ 
    MKPolygonView *polygonView = [[MKPolygonView alloc] initWithOverlay:overlay ]; 
    polygonView.fillColor = [UIColor blueColor]; 
    polygonView.strokeColor = [UIColor blueColor]; 
    polygonView.lineWidth = 5.0; 
    polygonView.alpha = 0.20; 
    return polygonView; 
} 
return [kml viewForOverlay:overlay]; 
} 

- (void)addCircleWithRadius:(double)radius 
{ 
self.circleOverlay = [MKCircle circleWithCenterCoordinate:tmC radius:radius]; 
[mapview removeOverlays:[mapview overlays]]; 
[mapview addOverlay:circleOverlay]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 

- (IBAction)sliderChanged:(UISlider *)sender 
{ 
    double radius = (sender.value); 
[self addCircleWithRadius:radius]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 
+0

Por favor, muéstrenos el código que está utilizando para cambiar el tamaño del círculo. Hasta que veamos que solo podemos adivinar lo que podría estar pasando. – sosborn

+0

Acaba de hacer, perdón por eso, olvidé totalmente agregar código. – Hari

+0

Debe NSLogar el radio en su deslizadorCambiado para ver si está regresando lo que esperaba. También registre el valor de tmc para asegurarse de que el centro se quede donde usted espera que permanezca. No estoy seguro de la estructura del código, pero es posible que esté activando el reconocedor de toque largo cuando mueve el control deslizante lentamente. – sosborn

Respuesta

3

Problema solved.It era algo con UISlider, en la punta, en el inspector del control deslizante bajo Values la propiedad Continuous fue checked.After que yo no se que, el problema fue resuelto

Cuestiones relacionadas