2011-08-26 64 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为完全失去我自己的人。