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