2011-06-27 4 views
2

私がプロットした点の周囲の距離を表示するには、円を描く必要があります。マップビューにMKCircleを描画する

動作させるには、これらの2行のコードを実装する必要がありますか? 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; 
} 
+1

コードをフォーマットしてください。ありがとう。 –

+0

ありがとうdeepak ...私の問題への任意の提案? –

+0

'_coordinate'とは何ですか?そして、あなたは '_mapView'がセットされていますか?私は 'NSLog(@"%@ "、_mapView);' print? –

答えて

1

あなたがviewDidAppear代わりのviewWillAppearを試すこともできますが、私はそれがすでにその点で動作するはずだと思います。私はあなたが何か間違っていると思います、そして、あなたはそれを見つけるためにデバッガを踏むべきです。通常の容疑者を確認してください:

  • 塗りつぶしの色を設定してください。不透明で明白にしてください。
  • _mapViewは実行時にnilまたはzombiedの可能性があります。 (またはあなたのxibにマップされていない)
  • 座標または半径が予想外の場合があります。デバッガの実際の座標値を確認してください。
  • 座標が地図のズームされた領域にないことを除いて、すべてが正しいかもしれません。
0

オーバーレイを配置する前に地図が描画されるまで待つ必要があります。

あなたがマップのデリゲートを設定していることを確認してください:

次のデリゲートメソッドをオーバーライドし、最後に

_mapview.delegate = self; 

<MKMapViewDelegate> 

割り当てデリゲートを(あなたのviewDidLoadメソッドでこれを行うことができます)

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

このデリゲートメソッドは、ユーザーscrでマップが確定されると呼び出されますeen。完全なレンダリングされた値は、エラーを処理する場合に備えて最終チェックとして使用できます。

関連する問題