在地图视图上绘制MKCircle

时间:2011-06-27 04:42:43

标签: objective-c ios cocoa-touch drawing mapkit

我需要绘制一个圆圈来显示我绘制的点周围的距离。

我应该在哪里实现这两行代码才能使其正常工作?我尝试将其放入viewWillAppear:,但圆圈不会出现。

[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;
}

2 个答案:

答案 0 :(得分:1)

虽然您可以尝试viewDidAppear而不是viewWillAppear,但我认为它应该已经在这方面起作用了。我认为你还有其他错误,你应该通过调试器来找到它。检查通常的嫌疑人:

  • 设置填充颜色。使它变得不透明和明显。
  • _mapView在运行时可能是nil或zombied。 (或未在你的xib中映射)
  • 坐标或半径可能与您预期的不同。检查调试器中的实际坐标值。
  • 除了坐标不在地图的缩放区域之外,一切都可能正确。

答案 1 :(得分:0)

您需要等到屏幕上绘制地图后才能在其上放置叠加层。

确保为地图设置代理:

<MKMapViewDelegate>

分配委托(可以在viewDidLoad方法中执行此操作):

_mapview.delegate = self;

最后,覆盖以下委托方法:

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered {
[self addCircle:_coordinate];
[self addCircleWithRadius:5.5 addCircleWithCoordinate:_coordinate];
}

在用户屏幕上完成地图后,将调用此委托方法。如果您还想处理错误,可以使用fullyRendered值作为最终检查。