2012-10-07 11 views
5

He leído muchas publicaciones al respecto y todavía tengo un problema. Este es mi código para dibujar una polilínea entre dos puntos:Eliminar un polyLine del 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; 

}

eso funciona bien. El problema es eliminar la línea. El siguiente código no funciona:

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

el siguiente código no funciona tampoco:

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

Gracias!

Respuesta

15

En el código que recorra gama overlays de la vista del mapa , esta línea es el problema:

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

La vista de mapa overlays array contiene objetos del tipo id<MKOverlay> (el for-loop declara correctamente overlayToRemove como tal).

Así la matriz overlays contiene el modelo objetos para las superposiciones y no los puntos de vista .

La clase MKPolylineView es la vista MKPolyline para una superposición modelo.

Así la condición if debería ser:

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

Tenga en cuenta que un bucle tales eliminará todos polilíneas a partir del mapa. Si desea eliminar polilíneas específicas, puede configurar el title en cada uno al agregarlo y luego verificarlo antes de eliminarlo.


La segunda pieza de código que comprueba y elimina self.routeLine directamente debería funcionar siempre y cuando no es self.routeLinenil y contiene una referencia válida a una superposición actualmente en el mapa.


Si sólo tiene una sola capa en el mapa (la polilínea), usted podría también acaba de llamar removeOverlays eliminar todas las superposiciones del mapa (cualesquiera que sean):

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

Gracias! Tengo otro problema, tal vez podría ayudar: http://stackoverflow.com/questions/12763469/ – user1553961

+0

Gracias @ Ana, esto me ayudó ... –

1

Su superposición es MKPolylineMKPolylineView es exactamente cómo se muestra la superposición cuando el mapa se acerca o se desplaza para que los datos de la superposición se muestren en la ventana. La matriz overlays de la vista de mapa contiene los datos que se usarán para generar las vistas superpuestas. No hay vistas en la matriz overlays. Por lo tanto, para hacer su trabajo de código, cambie esta línea

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

a

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

en su tercer fragmento y se le multa

+0

Muchas gracias ¡mucho! – user1553961

+0

@ user1553961 una ayuda en Mkmapkit. ¿Cómo puedo trazar una línea entre 2 puntos en el mapa de ios usando overlayer? por favor, ayúdame. – sathis

+0

@ user1553961 tengo un código pero no funciona para mí. ¿podría ayudarme qué hice mal en mi código? – sathis