4

2つのオーバーレイを持つMKMapViewがあります。それらは1を表します。誰かがたどったルート。2.一連の円形の関心領域。いずれかのオーバーレイを更新するために、データを更新してから、関連するビューを無効にします。

[(RoutePolyline *)self.overlay appendPolylines:polylines];
MKOverlayPathView *overlayView = (MKOverlayPathView *)[self.mapView viewForOverlay:self.overlay];
[overlayView invalidatePath]; 

問題は、RoutePolylineに1行を追加し、それに関連するビューを無効にすると、すべてのオーバーレイビューが約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