移动/上的MKMapView
更新MKOverlay是有办法来更新(即走动),其已添加到MKMapView
一个MKOverlay
。删除旧的并添加新的是非常糟糕的(缓慢)。移动/上的MKMapView
即我想触发时,屏幕上的覆盖移动正在调用该函数的背景功能:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
(与MKAnnotions
其更好一点我想,但我不能使用MKPolyline
,MKPolygon
等,并且在整个信息被减少到一个点)
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 - 我相信会导致覆盖在整个地图上重新加载(一次可见)。
它看起来像我......从iOS 7开始,这些方法在'MKOverlayRenderer'上,而不是在'MKOverlayView'上。 – livingtech 2014-05-15 21:27:30
如果要更新整个地图,你可以直接调用'setNeedsDisplay ' – gcamp 2015-05-29 19:25:47
其实我有给力的叠加视图无效的路径,建立一个新的人之前先清除掉旧的路径。 [polygonView invalidatePath]。告诉地图视图它需要刷新显示对我来说是不够的。
使用MKAnnotations
。你可以改变它们的坐标。只需禁用任何触摸相关的东西。你需要自己的绘图代码来绘制注释,OpenGL可能会做到这一点。没有人会知道这个区别。
AnnotationViews保持相同的大小,如果你放大,虽然,覆盖尺寸相对于缩放比例吗?我需要在地图上指定一个应标记特定区域(可能是公园或其他地方)的圆圈。 – yuf 2013-12-11 23:57:05
这似乎是强制地图刷新覆盖。可能还有注释。
[self.mapView setCenterCoordinate:self.mapView.centerCoordinate];
另外:给你的印象,我需要这样的功能: 我用在它上面的一个MapView和地点批注显示卫星的位置。每个卫星还应该显示一个足迹(您可以“看到”地平线上的卫星的区域)。这些信息(脚印的位置和形状)必须定期更新。 在当下我有一个解决方案,一个视图vor所有的脚印,我用CoreGraphics绘制正确的形状。但我宁愿与MKOverlay的解决方案,但我不能让他们动态... 任何想法? – user398877 2010-07-27 10:29:27