iOS - MKMapView показывает аннотацию только определенного уровня масштабирования - PullRequest
4 голосов
/ 15 марта 2011

У меня есть MKMapView с некоторыми пользовательскими аннотациями, которые выглядят не очень хорошо, когда карта масштабируется очень далеко.

Можно ли показывать / добавлять их только тогда, когда карта находится на определенном уровне масштабирования?

Ответы [ 2 ]

4 голосов
/ 23 августа 2016

Используя ответ Марко, я пришел к этому решению.

Каждый раз, когда меняется регион, я меняю свойство 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.

Отлично работает, и я не заметил больших проблем с производительностью. Хотя это может измениться с увеличением количества аннотаций ...

3 голосов
/ 15 марта 2011

Вы можете получить уровень масштабирования карты через

[map region];

свойство MKMapView. также вы получаете уведомления о событиях изменения региона путем реализации метода MKMapViewDelegate и установки делегата

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

здесь вы можете проверить текущий уровень масштабирования. Я не рекомендую удалять или добавлять все аннотации при масштабировании / панорамировании, поскольку это может реально повлиять на производительность приложения. Я действительно не пытался установить альфа в 0.0 или скрытое свойство в MKAnnotationView, но это может быть вашим лучшим выбором.

...