从地图视图中移除一条折线。

7

我已经阅读了许多与此相关的帖子,但仍然存在问题。以下是我的代码,用于在两个点之间绘制折线:

-(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个回答

17
在遍历地图视图的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];

谢谢!我还有一个问题,也许你可以帮忙: http://stackoverflow.com/questions/12763469/ - Alex Guberman

2

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

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

to

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

在您的第三段代码片段中,您将会很好。

@user1553961,我在Mkmapkit方面需要帮助。我该如何在iOS地图上使用覆盖层绘制两点之间的线条?请帮帮我。 - Gopinath Manickam
@user1553961,我有一段代码,但它对我来说不起作用。你能帮我看看我在代码中做错了什么吗? - Gopinath Manickam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接