1

マップ内に複数の円を追加して異なる色で表示するにはどうすればよいですか ( MKMapView)? 円を1 つ追加する方法はわかりましたが、さまざまなサイズと色の複数の円を追加する方法がわかりません。

4

1 に答える 1

3

これは、マップ上の特定の場所に 2 つの同心円を描画するために使用するコードです。外側はグレー、内側は白です。(私の例では、「範囲」は円の半径です)両方ともある程度の透明度があります:

- (void)drawRangeRings: (CLLocationCoordinate2D) where {
    // first, I clear out any previous overlays:
    [mapView removeOverlays: [mapView overlays]];
    float range = [self.rangeCalc currentRange] / MILES_PER_METER;
    MKCircle* outerCircle = [MKCircle circleWithCenterCoordinate: where radius: range];
    outerCircle.title = @"Stretch Range";
    MKCircle* innerCircle = [MKCircle circleWithCenterCoordinate: where radius: (range / 1.425f)];
    innerCircle.title = @"Safe Range";

    [mapView addOverlay: outerCircle];
    [mapView addOverlay: innerCircle];
}

次に、クラスがMKMapViewDelegateプロトコルを実装していることを確認し、次のメソッドでオーバーレイの外観を定義します。

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
    MKCircle* circle = overlay;
    MKCircleView* circleView = [[MKCircleView alloc] initWithCircle: circle];
    if ([circle.title compare: @"Safe Range"] == NSOrderedSame) {
        circleView.fillColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.25];
        circleView.strokeColor = [UIColor whiteColor];
    } else {
        circleView.fillColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.25];
        circleView.strokeColor = [UIColor grayColor];
    }
    circleView.lineWidth = 2.0;

    return circleView;
}

そしてもちろん、オブジェクトにデリゲートを設定することを忘れないでください。そうしないとMKMapView、上記のメソッドが呼び出されません。

mapView.delegate = self;
于 2012-09-21T20:48:42.037 に答える