从mapView中删除polyLine

时间:2012-10-07 11:28:55

标签: ios mkmapview polyline

我读了很多关于它的帖子,但我仍有问题。 这是我在两点之间绘制polyLine的代码:

-(void) drawAline:(CLLocation*)newLocation
{
//drawing a line
CLLocationCoordinate2D coordinateArray[2];
coordinateArray[0] = CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude);
coordinateArray[1] = CLLocationCoordinate2DMake(self.jerusalem.coordinate.latitude, self.jerusalem.coordinate.longitude);

self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:2];
[self.mapView setVisibleMapRect:[self.routeLine boundingMapRect]];
[self.mapView addOverlay:self.routeLine];

}

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
if(overlay == self.routeLine)
{
    if(nil == self.routeLineView)
    {
        self.routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine];
        self.routeLineView.fillColor = [UIColor blueColor];
        self.routeLineView.strokeColor = [UIColor blueColor];
        self.routeLineView.lineWidth = 5;
    }
    return self.routeLineView;
}

return nil;

}

这很好用。 问题是删除该行。 下一个代码不起作用:

    for (id<MKOverlay> overlayToRemove in self.mapView.overlays)
{
    if ([overlayToRemove isKindOfClass:[MKPolylineView class]])
    {
        [mapView removeOverlay:overlayToRemove];
    }
}

下一个代码也不起作用:

     if (self.routeLine)
{
[self.mapView removeOverlay:self.routeLine];
    self.routeLineView = nil;
    self.routeLine = nil;
}

谢谢!

2 个答案:

答案 0 :(得分:16)

在循环遍历地图视图的overlays数组的代码中,这一行是问题所在:

if ([overlayToRemove isKindOfClass:[MKPolylineView class]])

地图视图的overlays数组包含id<MKOverlay>类型的对象(for循环正确地声明overlayToRemove)。

因此overlays数组包含叠加层的模型对象,而不包含视图

MKPolylineView类是MKPolyline叠加模型视图

所以if条件应为:

if ([overlayToRemove isKindOfClass:[MKPolyline class]])

请注意,此循环将从地图中删除所有折线。如果您想删除特定的折线,可以在添加时在每个折线上设置title,然后在删除之前进行检查。


只要self.routeLine不是self.routeLine并且包含当前在地图上的叠加层的有效引用,就可以直接检查和删除nil的第二段代码。


如果地图上只有一个叠加层(一条折线),您也可以调用removeOverlays删除地图上的所有叠加层(无论它们是什么):

[self.mapView removeOverlays:self.mapView.overlays];

答案 1 :(得分:2)

您的叠加层是MKPolylineMKPolylineView是地图缩放或滚动时叠加层的显示方式,以便叠加层的数据显示在窗口中。地图视图的overlays数组包含将用于生成叠加视图的数据。 overlays数组中没有视图。因此,要使代码正常工作,请更改此行

if ([overlayToRemove isKindOfClass:[MKPolylineView class]])

if ([overlayToRemove isKindOfClass:[MKPolyline class]])

在你的第三个片段中,你会没事的