1

我正在尝试展示很多MKCircles使用 MapKit 的内容。到目前为止,我已经扩展MKCircle <MKOverlay>了一个名为 Circle 的类。我有一个名为 circleView 的只读属性。在吸气剂中,我构造了MKCircleView.

-(MKCircleView *)circleView {
    if(!_circleView){
        _circleView = [[MKCircleView alloc] initWithOverlay:self];

        [_circleView setFillColor:self.color];
    }

    return _circleView;
}

然后,在地图中,我这样做:

- (MKOverlayView *)mapView:(MKMapView *)mapView 
            viewForOverlay:(id<MKOverlay>)overlay {
   if ([overlay isKindOfClass:Circle.class]) {
       Circle *region = overlay;

       return [region circleView];
    }

    return nil;
}

我正在从服务器加载这些圈子,但是我可以有几个圈子(在一个区域中显示超过 1k)。

我觉得 UI 反应不够灵敏。即使从服务器缓存中的圆圈,重新绘制它们也需要一段时间,并且在该区域中移动可能会很痛苦。有什么办法可以提高这种性能吗?

编辑

我发现我正在显示更多必要的圆圈,但它仍然很慢。

4

1 回答 1

0

它不仅会影响 UI 和绘图速度,而且在地图上绘制如此多的叠加层会导致实际设备上的内存问题。这是由于 MapKit 没有重用覆盖。由于注释有reuseWithIdentifier, 覆盖但是没有。每个叠加层都会在地图上创建一个新图层,MKOverlayView其中包含叠加层。这样一来,内存使用量将快速上升,滚动变得……让我们说缓慢到几乎不可能。

因此,有一种解决方法:您可以将所有MKOverlays(在您的情况下MKCircles)添加到 one中,而不是单独绘制每个叠加层MKOverlayView。这样,您实际上只创建了一个MKOverlayView,因此无需重用.

这个问题的答案包含一个解决方法。

我已经将这种方法与多个 MKPolygons 一起使用,并且效果很好。

于 2013-07-14T20:27:41.463 回答