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]];
}
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
Fertig, tut mir leid, ich habe total vergessen Code hinzuzufügen. – Hari
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