更改 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 差?

手动设置 MKOverlayView(或子视图)的框架

MKOverlayView 性能问题。啥也不做。但慢

如何更改 Apple Map (MKMapView) 背景颜色?

添加两个 MKPolylineView

为 iOS 地图视图提供自定义颜色