更改 MKOverlayView 的 MKOverlay 坐标
Posted
技术标签:
【中文标题】更改 MKOverlayView 的 MKOverlay 坐标【英文标题】:Change coordinate of MKOverlay for an MKOverlayView 【发布时间】:2012-01-30 02:13:36 【问题描述】:我在地图上有一个叠加层,我想更改它的坐标。为了无缝地执行此操作,我将在对视图进行更改后调用 setNeedsDisplayInMapRect: 方法。
我已经通过更改 fillColor 对其进行了测试,它工作正常:
overlayView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.3];
[overlayView setNeedsDisplayInMapRect:mapView.visibleMapRect];
但是,我似乎在尝试更改叠加视图的中心坐标时遇到了困难(这是 MKCircleView 和 MKCircle)。里面有个方法
MKCircle 符合MKAnnotation,称为setCoordinate: - 这似乎是我需要的。不幸的是,MKCircleView 中的circle
属性是只读的。而且MKOverlayView中的overlay
属性也是只读的。
实际上是否有一种方法可以更改叠加层的坐标,而无需移除叠加层视图并添加一个新视图(这会导致屏幕上非常明显的闪烁。)?
【问题讨论】:
我在查看 MKPolyline 时遇到了类似的问题。在我的情况下,这条线总是会变长,所以我总是画两条折线,然后删除旧的一条。这样较长的线隐藏了闪烁。 我也在努力实现同样的目标。就我而言,我有自定义 MKOverLay 并希望在地图上对其进行动画处理。 【参考方案1】:这里发生了同样的问题,所以我正在创建一组方法并根据需要调用它。
-(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];
【讨论】:
以上是关于更改 MKOverlayView 的 MKOverlay 坐标的主要内容,如果未能解决你的问题,请参考以下文章
MKOverlayRenderer 比 MKOverlayView 差?