我读了很多关于它的帖子,但我仍有问题。 这是我在两点之间绘制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;
}
谢谢!
答案 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)
您的叠加层是MKPolyline
,MKPolylineView
是地图缩放或滚动时叠加层的显示方式,以便叠加层的数据显示在窗口中。地图视图的overlays
数组包含将用于生成叠加视图的数据。 overlays
数组中没有视图。因此,要使代码正常工作,请更改此行
if ([overlayToRemove isKindOfClass:[MKPolylineView class]])
到
if ([overlayToRemove isKindOfClass:[MKPolyline class]])
在你的第三个片段中,你会没事的