2012-10-07 10 views
5

私はそれについて多くの記事を読んできましたが、まだ問題があります。 これは、2点間のポリラインを描画するために私のコードです:mapViewからポリラインを削除します

-(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; 

}

のthatsが正常に動作します。 問題は、行を削除することです。 次のコードは動作しません:

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配列にはid<MKOverlay>のオブジェクトが含まれています(forループはoverlayToRemoveをそのまま宣言します)。

のでoverlays配列は、オーバーレイやないビューためのオブジェクトモデルが含まれています。

MKPolylineViewクラスはMKPolylineオーバーレイモデルためあります。

のでif条件は次のようになります。

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

注このようなループは、マップからすべてポリラインを削除すること。特定のポリラインを削除する場合は、ポリゴンを追加するときにそれぞれにtitleを設定し、削除する前に確認してください。


チェックしself.routeLinenilなく、地図上の現在のオーバーレイへの有効な参照を含んでいる限り、動作するはず直接self.routeLineを削除するコードの第2部分。


あなたがマップ(1つのポリライン)にのみ、単一のオーバーレイを持っている場合、あなたはまた、単に(彼らは何でも)マップからすべてのオーバーレイを削除するにはremoveOverlaysを呼び出すことができます。

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

ありがとう!私は別の問題を抱えている可能性があります。 http://stackoverflow.com/questions/12763469/ – user1553961

+0

ありがとうございました@Annaこれは私を助けました.. –

1

オーバーレイはMKPolylineです。MKPolylineViewは、オーバーレイのデータがウィンドウに表示されるように地図がズームまたはスクロールされたときのオーバーレイの表示方法です。マップビューのoverlays配列には、オーバーレイビューを生成するために使用されるデータが含まれています。 overlays配列にはビューがありません。だから、あなたのコードを動作させるために、あなたの第三スニペットで

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

にこのライン

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

を変更すると、あなたはマップビューのoverlays配列をループコードで

+0

は非常にありがとう多く! – user1553961

+0

@ user1553961 Mkmapkitのヘルプ。オーバーレイヤーを使用してiosマップ上の2つの点の間に線を描く方法私を助けてください。 – sathis

+0

@ user1553961私は1つのコードを持っていますが、私のために働いていません。私のコードで何が間違っていたのか助けてくれますか? – sathis

関連する問題