2012-10-07 33 views
5

我已閱讀了許多關於它的帖子,但仍然有問題。 這是我的代碼繪製兩點之間的折線:從地圖中刪除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; 
} 

謝謝!

回答

15

在通過地圖視圖的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]; 
+0

謝謝!我有另一個問題,也許你可以幫助: http://stackoverflow.com/questions/12763469/ – user1553961

+0

謝謝@Anna這幫了我.. –

1

您的覆蓋圖是MKPolylineMKPolylineView就是當地圖放大或滾動時覆蓋圖的顯示方式,以便覆蓋圖的數據顯示在窗口中。地圖視圖的overlays數組包含將用於生成疊加視圖的數據。 overlays陣列中沒有視圖。因此,爲了使你的代碼的工作,在你的第三個片段此行

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

改變

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

,你將被罰款

+0

非常感謝你許多! – user1553961

+0

@ user1553961幫助Mkmapkit。我怎樣才能使用覆蓋層在ios地圖上的2個點之間畫一條線。請幫幫我。 – sathis

+0

@ user1553961我有一個代碼,但它不適合我。你能幫我什麼是我的代碼錯了嗎? – sathis