2011-06-27 136 views
2

我需要繪製一個圓來顯示我繪製的點周圍的距離。在地圖視圖上繪製MKCircle

我應該在哪裏實現這兩行代碼才能使其工作?我試圖把它放在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);'打印? –

回答

1

雖然你可以嘗試viewDidAppear,而不是viewWillAppear,我覺得應該在這方面已經工作。我認爲你有其他錯誤,你應該通過調試器來找到它。檢查通常的嫌疑人:

  • 設置填充顏色。使其不透明和明顯。
  • _mapView在運行時可能爲零或殭屍。 (或未映射到您的xib中)
  • 座標或半徑可能與您預期的不同。檢查調試器中的實際座標值。
  • 除了座標不在您地圖的縮放區域內,一切都可能是正確的。
0

在放置覆蓋層之前,您需要等待屏幕上繪製的地圖。

確保您設置的委託地圖:

<MKMapViewDelegate> 

分配委託(可以在viewDidLoad方法做到這一點):

_mapview.delegate = self; 

最後,重寫以下的委託方法:

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

一旦地圖在用戶scr上定型完成,此委託方法將被調用EEN。您也可以使用fullyRendered值作爲最終檢查,以防您也要處理錯誤。