2011-03-14 94 views
4

我有一個MKMapView,其中有一些自定義註釋在地圖變焦太遠時看起來不太好看。iOS - MKMapView僅顯示某個縮放級別的註釋

當地圖處於特定縮放級別時,是否可以僅顯示/添加它們?

+0

請參閱我的anser下http://stackoverflow.com/questions/14707080/after-json-parsing-viewforannotation-shows-only-one-single-annotation- on-mkmapv/32965056#32965056希望可以幫助別人。 – blackjacx 2015-10-06 08:25:30

回答

3

您可以通過的MKMapView的

[map region]; 

屬性獲取地圖的縮放級別。你也通過實現MKMapViewDelegate方法和設置委託

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 

在這裏你可以查看你當前的縮放級別是什麼得到區域變化的事件 通知。我不建議在縮放/平移時刪除或添加所有註釋,因爲這可能會影響應用的性能。我沒有真正嘗試設置爲0.0或MKAnnotationView上的隱藏屬性,但這可能是你最好的選擇。

4

使用Marko的答案我來到這個解決方案。

每次區域更改,我更改ViewController's屬性isAtBigZoom

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 
    isAtBigZoom = mapView.region.span.latitudeDelta < 0.01 
} 

然後在didSet的屬性,我執行此代碼。

var isAtBigZoom = false { 
    didSet { 
     // this guard ensures, that the showing and hiding happens only once 
     guard oldValue != isAtBigZoom else { 
      return 
     } 

     // in my case I wanted to show/hide only a certain type of annotations 
     for case let annot as MapTextAnnotation in mapView.annotations { 
      mapView.viewForAnnotation(annot)?.alpha = isAtBigZoom ? 1 : 0 
     } 
    } 
} 

如果你也想開始隱藏註釋,只是增加阿爾法改變代碼viewForAnnotation方法。

工程很好,我沒有注意到與性能有關的大問題。雖然這可能會隨着註釋數量的增加而改變...

+0

由於視圖會在您有很多註釋時重複使用,因此for循環中的每個註釋都不會保證有視圖。所以如果你在縮放變化之後平移,你應該小心地使用正確的alpha屬性創建視圖 – Pieter 2016-08-26 11:25:13