Как удалить только определенный вид аннотации на MapKit? - PullRequest
0 голосов
/ 04 ноября 2018

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

Вот код, где я регистрирую аннотации:

map.register(customAnnotation.self, forAnnotationViewWithReuseIdentifier: "customAnnotation")
map.register(MKPointAnnotation.self, forAnnotationViewWithReuseIdentifier: "standardAnnotation")

и метод делегата:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }
    let annotation = mapkitView.dequeueReusableAnnotationView(withIdentifier: "customAnnotation") as! customAnnotation
    return annotation
}

Вот функция обновления местоположения аннотации:

@objc func updateFireMarkersOnMap(){
    print("data count:",fireData.count)
    for annot in mapkitView.annotations {
        if annot.isEqual(customAnnotation.self) {print("custom annotation found")}
        mapkitView.removeAnnotation(annot)
    }

    for data in fireData {
        let annotation = MKPointAnnotation()
        annotation.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(data.lat), longitude: CLLocationDegrees(data.long))
        mapkitView.addAnnotation(annotation)
    }
}

В этой функции я ожидал, что она напечатает «найденную пользовательскую аннотацию» 350 раз (количество аннотаций, которые у меня есть на карте). Он никогда не печатает эту строку. Я пытался использовать if annot is customAnnotation, annot.iskind(), isMember(), но ни один из них не работал. Как определить, с какой аннотацией я имею дело?

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

Когда я обновляю один вид аннотации, я не могу удалить другие.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 04 ноября 2018

Я думаю, это то, что вы ищете. Из-за выравнивания скобок все аннотации будут все время удаляться, что можно сделать в пакете

let annots = mapkitView.annotations
mapkitView.removeAnnotations(annots)

Но это тоже может сработать.

  @objc func updateFireMarkersOnMap(){
        print("data count:",fireData.count)
        for annot in mapkitView.annotations {
            if annot is customAnnotation { print("custom annotation found") }
            mapkitView.removeAnnotation(annot)
        }

        for data in fireData {
            let annotation = MKPointAnnotation()
            annotation.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(data.lat), longitude: CLLocationDegrees(data.long))
            mapkitView.addAnnotation(annotation)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...