2 Stimmen

Zeichnen eines MKCircle in einer Kartenansicht

Ich muss einen Kreis zeichnen, um die Entfernung um einen von mir gezeichneten Punkt anzuzeigen.

Wo sollte ich diese beiden Codezeilen implementieren, damit es funktioniert? Ich habe versucht, sie in viewWillAppear: aber der Kreis wird nicht angezeigt.

[self addCircle:_coordinate];
[self addCircleWithRadius:5.5 addCircleWithCoordinate:_coordinate];

- (void)addCircle: (CLLocationCoordinate2D)coordinate
{
    // draw the radius circle for the marker

    double radius = 2000.0;
    MKCircle *circle = [MKCircle circleWithCenterCoordinate:coordinate radius:radius];
    [circle setTitle:@"background"];
    [_mapView addOverlay:circle];

    MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:coordinate radius:radius];
    [circleLine setTitle:@"line"];
    [_mapView addOverlay:circleLine];
}

- (void)addCircleWithRadius:(double)radius addCircleWithCoordinate: (CLLocationCoordinate2D) coordinate
{

    MKCircle *circle = [MKCircle circleWithCenterCoordinate:coordinate radius:radius];
    [circle setTitle:@"background"];
    [_mapView addOverlay:circle];

    MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:coordinate radius:radius];
    [circleLine setTitle:@"line"];
    [_mapView addOverlay:circleLine];
}

- (void)sliderChanged:(UISlider*)sender
{
    [_mapView removeOverlays:[_mapView overlays]];

    double radius = (sender.value * 100);
    CLLocationCoordinate2D coordinate = self.coordinate;

    [self addCircleWithRadius:radius addCircleWithCoordinate:coordinate];
}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay{
    MKCircle *circle = overlay;
    MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:overlay] autorelease];

    if ([circle.title isEqualToString:@"background"])
    {
        //circleView.fillColor = UIColorFromRGB(0x598DD3);
        circleView.alpha = 0.25;
    }
    else
    {
        //circleView.strokeColor = UIColorFromRGB(0x5C8AC7);
        circleView.lineWidth = 2.0;
    }

    return circleView;
}

1voto

Peter DeWeese Punkte 17855

Sie können zwar versuchen viewDidAppear anstelle von viewWillAppear Ich denke, dass es in dieser Hinsicht bereits funktionieren sollte. Ich denke, dass Sie etwas anderes falsch machen, und Sie sollten mit einem Debugger durchgehen, um es zu finden. Überprüfen Sie die üblichen Verdächtigen:

  • Legen Sie die Füllfarbe fest. Machen Sie sie undurchsichtig und deutlich.
  • _mapView kann zur Laufzeit null oder zombied sein. (oder nicht in Ihrer xib abgebildet)
  • Die Koordinaten oder der Radius können anders sein, als Sie erwarten. Überprüfen Sie die tatsächlichen Koordinatenwerte in Ihrem Debugger.
  • Es könnte alles richtig sein, außer dass die Koordinaten nicht im gezoomten Bereich Ihrer Karte liegen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X