Ios 将覆盖添加到Mapview

Ios 将覆盖添加到Mapview,ios,objective-c,mapkit,Ios,Objective C,Mapkit,我做iOS开发已经有几个月了。我已经有了一个地图视图,上面固定了一些注释,可以向用户显示当前位置 我一直在试图通读文档来实现一个简单的覆盖,使用一组CLLocationCoordinate2D来绘制一条线(简单静态路由)。这是一场斗争 我的mkoverlayrender方法似乎根本没有运行。如果我没有弄错的话,我不应该需要MKMapViewDelegate。我正在尝试实现MKOverlay委托并拥有“@synthetic boundingMapRect;” 下面是我尝试实现覆盖的代码 - (vo

我做iOS开发已经有几个月了。我已经有了一个地图视图,上面固定了一些注释,可以向用户显示当前位置

我一直在试图通读文档来实现一个简单的覆盖,使用一组CLLocationCoordinate2D来绘制一条线(简单静态路由)。这是一场斗争

我的mkoverlayrender方法似乎根本没有运行。如果我没有弄错的话,我不应该需要MKMapViewDelegate。我正在尝试实现MKOverlay委托并拥有“@synthetic boundingMapRect;”

下面是我尝试实现覆盖的代码

- (void)drawLineRoute
{
    CLLocationCoordinate2D purplePoints[2];
    purplePoints[0] = CLLocationCoordinate2DMake(28.541944, -81.382936);
    purplePoints[1] = CLLocationCoordinate2DMake(28.538447, -81.383096);

    MKPolyline *purplePolyline = [MKPolyline         polylineWithCoordinates:purplePoints count:2];
    purplePolyline.title = @"Citrus Bowl Connection";

[self.mapView addOverlay:purplePolyline];
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView viewForOverlay:  (id<MKOverlay>)overlay
{
if([overlay isKindOfClass:[MKPolyline class]])
{
    MKPolygonRenderer *polyRender = [[MKPolygonRenderer alloc] initWithOverlay:overlay];
    polyRender.lineWidth = 2;
    polyRender.strokeColor = ovoPurple;
    return polyRender;
}

return nil;
}
-(无效)图纸路线
{
CLLocationCoordinated2D紫点[2];
紫色点[0]=CLLocationCoordinate2DMake(28.541944,-81.382936);
紫色点[1]=CLLocationCoordinate2DMake(28.538447,-81.383096);
MKPolyline*purplePolyline=[MKPolyline polyline polylineWithCoordinates:purplePoints count:2];
purplePolyline.title=@“柑橘碗连接”;
[self.mapView addOverlay:purplePolyline];
}
-(MKOverlayRenderer*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
if([overlay iskindof类:[MKPolyline类]])
{
MKPolygonRenderer*polyRender=[[MKPolygonRenderer alloc]initWithOverlay:overlay];
polyRender.lineWidth=2;
polyRender.strokeColor=ovopuple;
返回polyRender;
}
返回零;
}

非常感谢您的帮助或指导。提前感谢大家。

有两种不同的委托方法:

  • ,它是在iOS 7中引入的,并返回一个
    mkoverlayrender
    ;及

  • ,在iOS 7中被弃用,但它返回的是
    MKOverlayView
    ,而不是
    MKOverlayRenderer

实现返回
mkoverlayrender
viewForOverlay
是不正确的


总之,如果您需要支持iOS 7之前的iOS版本,请实现返回
MKOverlayView
而不是
MKOverlayRenderer
viewForOverlay
。如果您不需要支持7之前的iOS版本,则根本不实施
viewForOverlay
,而是实现返回
mkoverlayrender
renderforoverlay

您是否设置了
mapView
delegate
?您应该让viewcontroller实现
MKMapViewDelegate
,同时设置
self.mapView.delegate=self。在iOS 7中,你应该使用'rendererForOverlay'方法,而不是
viewForOverlay
。我以为我是通过故事板来完成的,但我想我没有。添加:“self.mapView.delegate=self;”在我看来,加载没有导致此视图崩溃。此视图控制器现在向我发出警告“从不兼容的类型'ShuttleMapViewController*const_uu_strong'分配到'id'”非常感谢大家!我需要在viewdidload中添加代理。我在rendermethod中修复了renderForOverlay。