2012-04-05 6 views
8

Ich habe zwei Overlay-Optionen in meiner Map: ein MKCircleOverlay und ein MKPolygonOverlay.Das erste ist mit variablem Radius, gesteuert über ein UISlider.Das letzte ist anpassbar abhängig von der Anzahl und Position der Ecken.Wenn ich sehr ändern schnell der Radius des Kreises (reduziere den Wert von UISlider) manchmal verschwindet mein Overlay (der Kreis) und danach kann das Polygon nicht mehr gezeichnet werden (natürlich auch der Kreis). Kein Absturz der App. Was könnte es sein?MKOverlay verschwindet manchmal

Hier einige Code, den ich verwenden:

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

Bitte zeigen Sie uns den Code, den Sie verwenden, um die Größe des Kreises zu ändern. Bis wir sehen, dass wir nur vermuten können, was passieren könnte. – sosborn

+0

Fertig, tut mir leid, ich habe total vergessen Code hinzuzufügen. – Hari

+0

Sie sollten den Radius in Ihrem sliderChanged NSLoggen, um zu sehen, ob er den erwarteten Wert zurückgibt. Protokollieren Sie auch den tmc-Wert, um sicherzustellen, dass das Center dort bleibt, wo Sie es erwarten. Sie sind sich der Code-Struktur nicht sicher, aber möglicherweise aktivieren Sie den langen Touch-Erkenner, wenn Sie den Schieberegler langsam bewegen. – sosborn

Antwort

3

Problem solved.It war etwas mit UISlider, im Inspektor des Schiebers unter Values in der Spitze, die Eigenschaft Continuous war checked.After ich nicht angehakt, dass, Das Problem wurde behoben.

Verwandte Themen