2012-10-07 10 views
5

Ich habe viele Beiträge darüber gelesen und immer noch habe ich ein Problem. Das ist mein Code ist eine Polylinie zwischen zwei Punkten zu zeichnen:Entfernen Sie eine PolyLine aus der 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; 

}

das ist funktioniert gut. Das Problem besteht darin, die Zeile zu entfernen. Der nächste Code funktioniert nicht:

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

der nächste Code ist weder nicht:

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

Dank!

Antwort

15

Im Code in Ordnung sein, die overlays Arrays der Karte ansehen Schleifen durch ist diese Linie das Problem:

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

die der KartenansichtDas Arrayenthält Objekte vom Typ id<MKOverlay> (die for-Schleife deklariert korrekt overlayToRemove als solche).

So ist die overlays Array enthält die Modell Objekte für die Overlays und nicht die Ansichten.

Die MKPolylineView Klasse ist die Ansicht für ein MKPolyline Overlay Modell.

So ist die if Zustand sein sollte:

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

Hinweis, dass eine solche Schleife alle Polylinien aus der Karte entfernen. Wenn Sie bestimmte Polylinien löschen möchten, können Sie die title bei jedem Hinzufügen festlegen und dann vor dem Entfernen überprüfen.


Der zweite Teil des Codes, der als self.routeLine nicht nil ist überprüft und löscht sollte so lange self.routeLine direkt arbeiten und enthält eine gültige Referenz zur Zeit zu einem Overlay auf der Karte.


Wenn Sie nur eine einzige Overlay auf der Karte haben (die Polylinie), können Sie auch nur removeOverlays rufen alle Overlays aus der Karte zu löschen (was auch immer sie sind):

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

Danke! Ich habe ein anderes Problem, vielleicht können Sie helfen: http://StackOverflow.com/Questions/12763469/ – user1553961

+0

Danke @Anna das half mir .. –

1

Ihr Overlay ist ein MKPolyline der MKPolylineView ist nur, wie das Overlay angezeigt wird, wenn die Karte gezoomt oder gescrollt wird, so dass die Daten des Overlays im Fenster angezeigt werden. Das Array overlays der Kartenansicht enthält die Daten, die zum Generieren der Overlay-Ansichten verwendet werden. Es gibt keine Ansichten im overlays Array. Also, um Ihren Code funktioniert, ändern Sie diese Zeile

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

zu

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

in Ihrem dritten Schnipsel und Sie werden

+0

Thank you very viel! – user1553961

+0

@ user1553961 eine Hilfe in Mkmapkit. Wie kann ich mit Overlay eine Linie zwischen 2 Punkten auf der IOS Karte ziehen? Bitte hilf mir. – sathis

+0

@ user1553961 Ich habe einen Code, aber es funktioniert nicht für mich. Könntest du mir helfen, was ich in meinem Code falsch gemacht habe? – sathis