ios - MKMapView 遮挡会剔除它的注释吗?

标签 ios xcode mkmapview mkannotation occlusion-culling

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

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

最佳答案

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

当您向 map View 添加数千个注释时,实例化的唯一注释 View 是那些可见的(以及靠近 map 可见部分的那些。如果您正确使用 dequeueReusableAnnotationViewWithIdentifierviewForAnnotation 中,当您滚动并且注释 View 从 View 中消失时,当它需要新的注释 View 时,它将回收那些已经滚动到 View 之外的 View :

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
}

因此,这将注释 View 的数量保持在一些可管理的数量,在绝对需要它们之前不一定要实例化新的注释 View (即不会碰巧有任何旧的注释 View 已经滚出 View ,可用以供重复使用)。

但是,如果用户在 map 上缩小,导致同时可见的注释 View 数量无法控制,则您必须自己处理这种情况。回到 WWDC 2011,有一个视频 Visualizing Information Geographically with MapKit在处理大量注释时展示了有趣的模型。具体来说,它们处理的是缩小时的问题,注释 View 太多以至于它们开始重叠并变得太多。该视频演示了一种方法,在这种方法中,您可以在滚动时将注释 View 聚合在一起(如有必要)。该实现相当初级,但它说明了这个概念。

关于ios - MKMapView 遮挡会剔除它的注释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34046312/

相关文章:

c++ - Boost、Lib C++ 和 Xcode

ios - Xcode 项目不显示模拟器列表

iphone - 应用程序在后台时出现后台问题

iphone - Objective-C : Handling references to object deleted from in NSMutableArray

ios - 在 ScrollView 中使用自动布局缩放图像如何居中?

ios - 在添加到主页的 Mobile XPage 中保留登录凭据

iphone - 多个注释未显示在 Iphone map View 中

ios - iOS 6 上的 allowsAirPlayVideo 属性

iphone - 带有 CLGeocoder 问题的正向地理编码

ios - 在 map 应用 iOS 上获取方向功能