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);
}
}
}
これらの余分な再描画の原因は何でしょうか?