4

我有一个带有 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);
        }
    }
}

什么可能导致这些额外的重绘?

4

0 回答 0