我爲什麼使用示例代碼沒有工作的猜測:你沒有把你的視圖控制器連接成地圖視圖的委託。如果您是從廈門國際銀行,從地圖上按住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];
}
我在代碼中調用委託,但你是對的,我沒有把mapView直接綁定到我的.xib中的委託。我做到了,圈子馬上掉到了地圖上。非常感謝你! –
如果您已經以編程方式設置委託並且該委託不起作用,則可能是因爲您在地圖視圖出口「無」時設置得太早。只有在'-loadView'完成後,即在第一次調用'theViewController.view'之後,纔會設置出口。你可以在'-viewWillAppear:','-viewDidLoad'等中使用它們,但是'-init'(或者'-initWithNibName:bundle:'或者其他)不起作用。 –
這是 - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id < MKOverlay>)overlay –