2011-08-26 62 views
4

我對我的視圖有一個小地圖,我想放置一個MKCircle覆蓋。我在創建監測區域時擁有所有的座標和半徑。我想將這個區域顯示給用戶,以便他們知道邊界是什麼。我需要一個簡單的MKCircle實現覆蓋

對於我的生活,互聯網上沒有一個好的教程,只會讓我只需要在地圖上放一個圓圈並完成即可。

作爲一個前兆...我用蘋果的例子沒有運氣。 Regions的例子應該是唯一的需求,但我所能做的就是放棄這個引腳,而不是一個圓圈。我甚至直接將他們的課程複製到我的項目中......沒有快樂。所以,如果你能指出一個很好的例子或佈局到底需要在一個簡單的ViewController中實現什麼,我將非常感激。

回答

15

我爲什麼使用示例代碼沒有工作的猜測:你沒有把你的視圖控制器連接成地圖視圖的委託。如果您是從廈門國際銀行,從地圖上按住Ctrl鍵設置視圖控制器

#import <MapKit/MapKit.h> 

@interface MyViewController : UIViewController <MKMapViewDelegate> 

:做這件事是確保控制器實現了MKMapViewDelegate協議,像這樣(在其頭文件)第一步查看您的控制器實例並將其連接爲地圖視圖的delegate插座。如果您使用代碼進行設置,請在-loadView-viewDidLoad中撥打theMapView.delegate = self;

然後,在某些時候(在你的-viewDidLoad,例如),

[theMapView addOverlay:[MKCircle circleWithCenterCoordinate:someCoordinate radius:someRadius]]; 

...會導致在地圖視圖調用其委託的-mapView:viewForOverlay:方法,它可以實現這樣的事情:

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay { 
    MKCircleView *circleView = [[MKCircleView alloc] initWithCircle:(MKCircle *)overlay]; 
    circleView.fillColor = [UIColor blueColor]; 
    return [circleView autorelease]; 
} 
+0

我在代碼中調用委託,但你是對的,我沒有把mapView直接綁定到我的.xib中的委託。我做到了,圈子馬上掉到了地圖上。非常感謝你! –

+0

如果您已經以編程方式設置委託並且該委託不起作用,則可能是因爲您在地圖視圖出口「無」時設置得太早。只有在'-loadView'完成後,即在第一次調用'theViewController.view'之後,纔會設置出口。你可以在'-viewWillAppear:','-viewDidLoad'等中使用它們,但是'-init'(或者'-initWithNibName:bundle:'或者其他)不起作用。 –

+0

這是 - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id < MKOverlay>)overlay –

4

這是

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id < 
MKOverlay>)overlay 

爲全面delega te方法,請參閱a complete answer爲完全失去我自己的人。