iOS - MKMapView仅显示某个缩放级别的注释

时间:2011-03-14 21:24:49

标签: ios mkmapview mkannotation

我有一个带有一些自定义注释的MKMapView,当地图缩放时,这些注释看起来不太好。

当地图处于某个缩放级别时,是否可以只显示/添加它们?

2 个答案:

答案 0 :(得分: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
        }
    }
}

如果您还想从隐藏的注释开始,只需将alpha更改代码添加到viewForAnnotation方法。

效果很好,我没有注意到性能方​​面的重大问题。虽然这可能会随着注释数量的增加而改变......

答案 1 :(得分:3)

您可以通过

获取地图缩放级别
[map region];

MKMapView的属性。您还可以获得区域变更事件的通知 通过实现MKMapViewDelegate方法并设置委托

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

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