2015-12-02 70 views

回答

1

在談到管理大量的註釋,我們應該「註釋」和「註釋視圖」之間進行區分。將許多註釋添加到地圖視圖時,這些輕量級MKAnnotation對象的集合保留在annotations陣列中。但是地圖視圖提供了一種機制來緩解可能由大量相關的「註釋視圖」引起的內存問題。

當你添加數千註釋到地圖視圖,實例化的唯一註解看法是那些可見的(和那些靠近地圖的可見部分,如果你正確地在viewForAnnotation使用dequeueReusableAnnotationViewWithIdentifier,當滾動和註釋的觀點掉下來的觀點,當它需要新的註解視圖,它會回收那些滾出視:

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,演示了處理大量註釋時有趣的模型。具體來說,它們處理縮小的問題,並且有太多的註釋視圖會開始重疊並變得太多。本視頻演示了在您向外滾動時(如有必要)將註釋視圖聚合在一起的方法。這個實現是相當簡陋的,但它說明了這個概念。