我试图在 MKMapView 上向用户显示数以千计的潜在引脚(注释)。有谁知道地图是否使用遮挡剔除来仅渲染可见注释?
这适用于使用 xCode 6.4 的 iOS 7+
我试图在 MKMapView 上向用户显示数以千计的潜在引脚(注释)。有谁知道地图是否使用遮挡剔除来仅渲染可见注释?
这适用于使用 xCode 6.4 的 iOS 7+
在谈论管理大量注释时,我们应该区分“注释”和“注释视图”。当您向地图视图添加许多注释时,这些轻量级MKAnnotation
对象的集合仍保留在annotations
数组中。但是地图视图提供了一种机制来缓解可能由大量相关“注释视图”引起的内存问题。
当您将数千个注释添加到地图视图时,唯一实例化的注释视图是那些可见的(以及靠近地图可见部分的那些。如果您正确使用dequeueReusableAnnotationViewWithIdentifier
in viewForAnnotation
,当您滚动和注释视图会从视图,当它需要新的注释视图时,它会回收那些已经滚动到视图之外的视图:
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演示了处理大量注释时的有趣模型。具体来说,它们处理的是您缩小并且注释视图太多以至于它们开始重叠并变得太多的问题。该视频演示了一种方法,在该方法中,您可以在滚动时将注释视图聚合在一起(如有必要)。实现是相当基本的,但它说明了这个概念。