iOS - MKMapView只在特定缩放级别显示注释

4

我有一个MKMapView,其中包含一些自定义注释,当地图缩放到一定程度时,它们看起来不是很好。

是否可以在地图达到特定缩放级别时仅显示/添加它们?


请查看我的回答,网址为http://stackoverflow.com/questions/14707080/after-json-parsing-viewforannotation-shows-only-one-single-annotation-on-mkmapv/32965056#32965056 希望对某些人有所帮助。 - blackjacx
2个回答

4

我参考了Marko的答案,得出了以下解决方案。

每次区域发生变化时,我会更改ViewController的属性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
        }
    }
}

如果你也想从隐藏的注释开始, 只需将Alpha更改代码添加到viewForAnnotation方法中即可。它很好用,性能方面我没有发现大问题。虽然随着注释数量的增加,情况可能会有所改变...

由于视图在具有大量注释时经常被重用,因此for循环中的每个注释都不能保证具有视图。因此,如果在缩放更改后进行平移,则应小心确保使用正确的alpha属性创建视图。 - Pieter

3

您可以通过以下方式获取地图缩放级别:

[map region];

MKMapView的属性。通过实现MKMapViewDelegate方法并设置代理,您还可以获取区域更改事件的通知。

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

在这里,您可以检查当前的缩放级别。我不建议在缩放/平移时删除或添加所有注释,因为那会严重影响应用程序的性能。我还没有真正尝试过在MKAnnotationView上设置alpha为0.0或隐藏属性,但这可能是最好的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接