2012-01-30 1 views
6

Ho una sovrapposizione sulla mappa e vorrei cambiare le sue coordinate. Per fare ciò, chiamerò il metodo setNeedsDisplayInMapRect: dopo che la modifica è stata apportata alla vista.Cambia coordinate di MKOverlay per un MKOverlayView

Ho testato questo fuori, semplicemente cambiando il fillColor e funziona benissimo:

overlayView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.3]; 
[overlayView setNeedsDisplayInMapRect:mapView.visibleMapRect]; 

Tuttavia ho apparentemente colpito un muro di mattoni cercando di cambiare anche le coordinate del centro del mio punto di vista di sovrapposizione (che è un MKCircleView con un MKCircle). C'è un metodo in MKAnnotation, a cui è conforme MKCircle, chiamato setCoordinate: - che sembra quello di cui ho bisogno. Sfortunatamente, la proprietà circle in MKCircleView è in sola lettura. Inoltre, la proprietà overlay in MKOverlayView è anche in sola lettura.

C'è davvero un modo per modificare le coordinate di una sovrapposizione, senza ricorrere alla rimozione della vista di sovrapposizione e aggiungerne una nuova (che causerebbe uno sfarfallio molto evidente sullo schermo).?

+0

Ho avuto un problema simile a vista MKPolyline. Nel mio caso la linea si allunga sempre, quindi disegno sempre due polilinee, quindi rimuovo quella più vecchia. In questo modo la linea più lunga nasconde lo sfarfallio. – theaob

risposta

0

lo stesso problema si è verificato qui, quindi sto creando un set di metodo e chiamandolo in base alle necessità.

-(void)removeAllAnnotationFromMapView{ 
    if ([[self.tmpMapView annotations] count]) { 
     [self.tmpMapView removeAnnotations:[self.tmpMapView annotations]]; 
    } 
} 
-(void)removeAllOverlays{ 
    if ([[self.tmpMapView overlays] count]) { 
     [self.tmpMapView removeOverlays:[self.tmpMapView overlays]]; 
    } 
} 

-(void)removeOverlayWithTag:(int)tagValue{ 
    for (MKOverlayView *oView in [self.tmpMapView overlays]) { 
     if (oView.tag == tagValue) { 
      [self.tmpMapView removeOverlay:oView]; 
     } 
    } 
}