Пользовательский MKAnnotationView хочет снова нажать - PullRequest
0 голосов
/ 19 июня 2019

У меня проблемы с пользовательским MKAnnotationView. Я загружаю координату, где разместить его из моего REST API, и помещаю булавку на карту с этим кодом:

private func refreshMapView(andCenterMap: Bool){
    DispatchQueue.main.async { [weak self] in
        guard let self = self else {
            return
        }

        self.mapView.addAnnotations(self.spotsArray)
        if andCenterMap {
            self.centerMap(at: self.mapView.userLocation.coordinate)
        }
    }
}

Один булавка установлена. Я автоматически увеличиваю карту.

Вот код для создания пользовательской аннотации:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    // Do not touch the annotation of the user location
    if annotation.isKind(of: MKUserLocation.self){
        return nil
    }

    let annoIdentifier = "SPOT"
    var annotationView: MKAnnotationView?

    if let dequeued = mapView.dequeueReusableAnnotationView(withIdentifier: annoIdentifier) {
        annotationView = dequeued
    }else{
        let av = MKAnnotationView(annotation: annotation, reuseIdentifier: annoIdentifier)
        annotationView = av
    }

    // Changing the image of the pin
    annotationView!.annotation = annotation
    if let image = UIImage(named: "map_pin") {
        annotationView!.image = image
        let deltaY = image.size.height/2
        annotationView!.centerOffset = CGPoint(x: 0.0, y: -deltaY)
    }else{
        annotationView!.image = nil
    }

    return annotationView
}

Как вы можете заметить, мой собственный пин-код использует это изображение (@ 1x, @ 2x, @ 3x)

map_pin map_pin@2x map_pin@3x

Нажатие. Я хочу показать «подробный вид», и я использую аннотацию в качестве отправителя, чтобы получить всю необходимую мне информацию в следующем представлении. Вот код:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
        guard let ann = view.annotation else {
            return
        }
        if ann.isKind(of: MKUserLocation.self){
            return
        }
        self.performSegue(withIdentifier: "showDetailSegue", sender: ann)
}

Итак, я предоставляю все необходимые данные и могу вернуться к «представлению карты».

Проблема:

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

Я могу видеть это (в нужном месте), но я могу выбрать его снова, только если я немного увеличу масштаб и нажму "вокруг" аннотации.

Есть предложения, как решить эту проблему?

Заранее спасибо!

1 Ответ

1 голос
/ 19 июня 2019

Добавьте этот конец didSelect

mapView.deselectAnnotation(ann,animated:false)
...