2012-01-30 60 views
6

我在地圖上覆蓋了一層,我想更改它的座標。要做到這一點無縫地進行,我將在對視圖進行更改之後調用setNeedsDisplayInMapRect:方法。爲MKOverlayView更改MKOverlay的座標

我已經只是改變了填充顏色測試了這一點,它工作正常:

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

不過我貌似撞了南牆努力也改變我的重疊視圖的中心座標(這是MKCircleViewMKCircle)。 MKCircle符合的 MKAnnotation中有一種方法,稱爲setCoordinate: - 這看起來像我所需要的。不幸的是,MKCircleView中的circle屬性是隻讀的。此外,MKOverlayView中的overlay財產也是隻讀的。

實際上是否有改變覆蓋層座標的方法,而不求助於移除覆蓋層視圖並添加一個新層(這會在屏幕上引起非常明顯的閃爍)?

+0

我有類似的問題查看MKPolyline。在我的情況下,這條線總是變長,所以我總是畫兩條折線,然後去掉那條較老的線。這樣,較長的線隱藏了閃爍。 – theaob 2013-08-16 10:06:15

回答

0

同樣的問題發生在這裏,所以我創建了一套方法,並根據需要調用它。

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