MKMapView遮挡是否会剔除它的注释?

时间:2015-12-02 15:18:00

标签: ios xcode mkmapview mkannotation occlusion-culling

我试图在MKMapView上向用户显示数千个潜在的引脚(注释)。有谁知道地图是否使用遮挡剔除来仅渲染可见注释?

这适用于使用xCode 6.4的iOS 7+

1 个答案:

答案 0 :(得分:1)

在谈论管理大量注释时,我们应该区分“注释”和“注释视图”。向地图视图添加许多注释时,这些轻量级MKAnnotation对象的集合仍保留在annotations数组中。但是地图视图提供了一种机制来缓解大量相关“注释视图”可能引起的内存问题。

当您向地图视图添加数千个注释时,实例化的唯一注释视图是可见的(以及那些靠近地图可见部分的注释视图。如果您在{{dequeueReusableAnnotationViewWithIdentifier中正确使用viewForAnnotation 1}},当您滚动和注释视图脱离视图时,当它需要新的注释视图时,它将回收那些已滚出视图的视图:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(annotationIdentifier)
    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
    } else {
        annotationView?.annotation = annotation
    }
    return annotationView
}

因此,这会将注释视图的数量保持为一些可管理的数字,不一定要实例化新的注释视图,直到它们被绝对需要为止(即,没有任何旧的注释视图已经滚动出视图,可用重用)。

但是,如果用户缩小地图以便同时显示无法管理的注释视图数量,则必须自行管理此情况。回到WWDC 2011,有一段视频Visualizing Information Geographically with MapKit在处理大量注释时展示了有趣的模型。具体来说,它们处理您缩小的问题,并且有太多的注释视图,它们开始重叠并变得太多。此视频演示了一种在向外滚动时(如有必要)将注释视图聚合在一起的方法。实施相当简陋,但它说明了这一概念。

相关问题