我为什么使用示例代码没有工作的猜测:你没有把你的视图控制器连接成地图视图的委托。如果您是从厦门国际银行,从地图上按住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 –