У меня есть MKMapView с 2 оверлеями.Они представляют 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);
}
}
}
Что может быть причиной этих дополнительных перерисовок?