2012-10-07 12 views
5

Przeczytałem wiele postów na ten temat i nadal mam problem. To jest mój kod narysować polilinię między dwoma punktami:Usuń polyLine z mapyView

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

}

ów działa dobrze. Problem polega na usunięciu linii. Następny kod nie działa:

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

następny kod nie działa ani:

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

Dzięki!

Odpowiedz

15

w kodzie, który przechodzi poprzez widoku mapy za overlays tablicy , ta linia stanowi problem:

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

Widok mapy toMacierzzawiera obiekty typu id<MKOverlay> (pętla for poprawnie deklaruje jako overlayToRemove).

Więc tablica overlays zawiera modelowi obiekty dla nakładek, a nie na wyświetleń.

Klasa MKPolylineView jest widok dla MKPolyline nakładki modelu.

Zatem warunek if powinno być:

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

Należy zauważyć, że taka pętla usunie wszystkie polilinie z mapy. Jeśli chcesz usunąć określone polilinie, możesz ustawić title na każdej z nich podczas dodawania, a następnie sprawdź przed usunięciem.


Drugi kawałek kodu, który sprawdza i usuwa self.routeLine bezpośrednio powinny pracować tak długo, jak nie jest nilself.routeLine i zawiera ważne odniesienie do nakładki obecnie na mapie.


Jeśli masz tylko jedną nakładkę na mapie (jedna polilinii), można też po prostu zadzwonić removeOverlays usunąć wszystkie nakładki z mapy (cokolwiek są):

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

Dzięki! Mam inny problem, może mógłbyś pomóc: http://stackoverflow.com/questions/12763469/ – user1553961

+0

Dziękuję @Anna, pomógł mi .. –

1

Twoja nakładka to MKPolylineMKPolylineView to sposób wyświetlania nakładki, gdy mapa jest powiększana lub przewijana, tak aby dane nakładki pokazywały się w oknie. Macierz overlays widoku mapy zawiera dane, które będą używane do generowania widoków nakładki. Brak dostępnych widoków w tablicy overlays. Tak więc, aby uczynić swoją pracę kodu, należy zmienić tę linię

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

do

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

w trzecim fragmencie i będzie dobrze

+0

Dziękuję bardzo dużo! – user1553961

+0

@ user1553961 Jedna pomoc w Mkmapkit. jak mogę narysować linię między 2 punktami na mapie ios przy użyciu overlayera. proszę pomóż mi. – sathis

+0

@ user1553961 Mam jeden kod, ale to nie działa dla mnie. czy mógłbyś mi pomóc, co złego zrobiłem w moim kodzie? – sathis