移动/上的MKMapView

问题描述:

更新MKOverlay是有办法来更新(即走动),其已添加到MKMapView一个MKOverlay。删除旧的并添加新的是非常糟糕的(缓慢)。移动/上的MKMapView

即我想触发时,屏幕上的覆盖移动正在调用该函数的背景功能:

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

(与MKAnnotions其更好一点我想,但我不能使用MKPolylineMKPolygon等,并且在整个信息被减少到一个点)

+0

另外:给你的印象,我需要这样的功能: 我用在它上面的一个MapView和地点批注显示卫星的位置。每个卫星还应该显示一个足迹(您可以“看到”地平线上的卫星的区域)。这些信息(脚印的位置和形状)必须定期更新。 在当下我有一个解决方案,一个视图vor所有的脚印,我用CoreGraphics绘制正确的形状。但我宁愿与MKOverlay的解决方案,但我不能让他们动态... 任何想法? – user398877 2010-07-27 10:29:27

MKOverlayView有下列方法迫使MapKit重新呈现所述给定mapRect:

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect

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

如果您使用的定时器(或周期性的HTTP请求或某种用于确定您的覆盖应该更新其他方法),要求对OverlayView的上述方法之一将导致它在地图上重新渲染该点(即,将再次调用-canDrawMapRect:zoomScale:,如果前者返回YES,则将调用-drawMapRect:zoomScale:inContext:)。


更新:

如果你不知道什么mapRect你需要重新渲染,你可能能够使用MKMapRectWorld常量作为mapRect - 我相信会导致覆盖在整个地图上重新加载(一次可见)。

+1

它看起来像我......从iOS 7开始,这些方法在'MKOverlayRenderer'上,而不是在'MKOverlayView'上。 – livingtech 2014-05-15 21:27:30

+0

如果要更新整个地图,你可以直接调用'setNeedsDisplay ' – gcamp 2015-05-29 19:25:47

其实我有给力的叠加视图无效的路径,建立一个新的人之前先清除掉旧的路径。 [polygonView invalidatePath]。告诉地图视图它需要刷新显示对我来说是不够的。

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

+3

AnnotationViews保持相同的大小,如果你放大,虽然,覆盖尺寸相对于缩放比例吗?我需要在地图上指定一个应标记特定区域(可能是公园或其他地方)的圆圈。 – yuf 2013-12-11 23:57:05

这似乎是强制地图刷新覆盖。可能还有注释。

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