2012-04-05 7 views
8

Ho due opzioni di sovrapposizione nella mia mappa: un MKCircleOverlay e un MKPolygonOverlay. Il primo è con raggio variabile, controllato tramite un UISlider. L'ultimo è personalizzabile in base al numero e alla posizione degli angoli. Se cambio molto veloce il raggio del cerchio (riduci il valore di UISlider) a volte la mia sovrapposizione scompare (il cerchio) e dopo di che il poligono non può più essere disegnato (ovviamente anche il cerchio). Nessun crash dell'applicazione. Che cosa potrebbe essere?MKOverlay a volte scompare

Ecco il codice che uso:

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

Mostraci il codice che stai utilizzando per ridimensionare il cerchio. Finché non vediamo che possiamo solo indovinare su cosa potrebbe accadere. – sosborn

+0

Appena fatto, mi dispiace per quello, ho completamente dimenticato di aggiungere il codice. – Hari

+0

Dovresti NSLog il raggio nel tuo sliderChanged per vedere se restituisce ciò che ti aspetti. Registrare anche il valore tmc per assicurarsi che il centro rimanga dove ci si aspetta che rimanga. Non sei sicuro della struttura del codice, ma potresti attivare il riconoscimento touch lungo quando muovi lentamente il cursore. – sosborn

risposta

3

Problema solved.It era qualcosa con UISlider, nel pennino, nella finestra di ispezione del dispositivo di scorrimento sotto Values la proprietà Continuous era checked.After ho incontrollato che, il problema è stato risolto.