我有一个带有 2 个叠加层的 MKMapView。它们代表 1. 某人所走的路线。2. 一系列圆形感兴趣区域。为了更新其中一个覆盖,我更新了他们的数据,然后使他们的相关视图无效:
[(RoutePolyline *)self.overlay appendPolylines:polylines];
MKOverlayPathView *overlayView = (MKOverlayPathView *)[self.mapView viewForOverlay:self.overlay];
[overlayView invalidatePath];
问题是向我的 RoutePolyline 添加一条线并使其相关视图无效会导致每个覆盖视图重绘大约 80 次。鉴于每次位置更新都会发生这种情况,这是非常昂贵的。
这是我的 RouteOverlayView 中唯一方法的代码:
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
RoutePolyline *routePolyline = (RoutePolyline *)self.overlay;
int polylineCount = [routePolyline.polylines count];
for (int i = 0; i < polylineCount; i++)
{
MKPolyline *polyline = [routePolyline.polylines objectAtIndex:i];
CGPathRef path = [MKUtils newPolyPathWithPolyline:polyline overlayView:self];
if (path)
{
[self applyFillPropertiesToContext:context atZoomScale:zoomScale];
CGContextBeginPath(context);
CGContextAddPath(context, path);
CGContextDrawPath(context, kCGPathStroke);
[self applyStrokePropertiesToContext:context atZoomScale:zoomScale];
CGContextBeginPath(context);
CGContextAddPath(context, path);
CGContextStrokePath(context);
CGPathRelease(path);
}
}
}
什么可能导致这些额外的重绘?