8

有没有办法更新(即移动)MKOverlay已经添加到MKMapView. 删除一个旧的并添加一个新的是可怕的(慢)。

即我想在屏幕上移动覆盖时触发调用此函数的后台函数:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay

MKAnnotions我认为它好一点,但我不能使用MKPolyline,MKPolygon等,并且整个信息被简化为一个点)

4

6 回答 6

4

MKOverlayView有以下方法强制 MapKit 重新渲染给定的 mapRect:

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale

如果您正在使用计时器(或定期 HTTP 请求或某种其他方法来确定应更新叠加层),则在 overlayView 上调用上述方法之一将导致它重新渲染地图上的该点( ie-canDrawMapRect:zoomScale:将被再次调用,-drawMapRect:zoomScale:inContext:如果前者返回 YES 则将被调用)。


更新:

如果您不确定需要重新渲染哪个 mapRect,您可以使用该MKMapRectWorld常量作为 mapRect — 我相信这会导致整个地图的覆盖重新加载(一旦可见)。

于 2010-08-11T18:34:15.987 回答
1

使用MKAnnotations. 您可以更改它们的坐标。只需禁用任何与触摸相关的东西。您需要自己的绘图代码来绘制注释,OpenGL 可能会做到这一点。没有人会知道其中的区别。

于 2013-09-12T00:33:49.347 回答
1

这似乎迫使地图刷新叠加层。可能还有注释。

[self.mapView setCenterCoordinate:self.mapView.centerCoordinate];

于 2017-02-17T00:51:38.020 回答
0

实际上,我不得不强制覆盖视图使路径无效,在设置新路径之前清除旧路径。[多边形视图无效路径]。告诉地图视图它需要显示刷新对我来说是不够的。

于 2010-10-10T20:43:11.013 回答
0

如果多边形的边界矩形发生变化,则raw 存在问题,setNeedsDisplay然后 MKMapView 将无法正确更新整个矩形,其次,MKPolygon/MKPolygonRenderer多边形不可更新,添加/删除管道的问题是更新请求过多MapView 它可以在管道中变慢,如果我添加/删除多边形中有更新,我目前使用 30Hz 线程循环

于 2018-10-19T05:28:41.280 回答
0

Swift 3+更新,这对我有用,感谢@zenchemical 的启发。

            DispatchQueue.main.async {
                self.map.add(overlay, level: .aboveRoads)
                self.map.setCenter(self.map.centerCoordinate, animated: false)
            }

旁注,我不禁觉得这不应该是必要的,并且有一个更合适的解决方案,但是,我还没有找到它。即使添加命令被分派到主队列,在我移动地图之前,覆盖不会再现地呈现。

于 2018-08-13T16:17:43.973 回答