Пользовательские аннотации Apple Map не работают должным образом - PullRequest
2 голосов
/ 11 января 2020

Я пытаюсь отобразить пользовательский вид аннотации на виде карты (MKMapView), который отлично работает в приложении. Проблема заключается в том, что когда я переключаюсь между приложениями или переключаюсь между темным и светлым режимами, пользовательский вид аннотации возвращается к выводу аннотации по умолчанию, как показано ниже.

Цель развертывания: iOS 11

Работает на: iPhone XS MAX iOS 13.3

Версия Xcode: 11.3 (11C29)

Версия Swift: 5.0

    private func addAnnotations(_ places : [QPPlaceDM]) {
        mapView.removeAnnotations(myAnnotations)
        var annotations = [MKPointAnnotation]()
        for item in places {
            let annotation = QPCustomAnnotaion()
            annotation.title = item.name
            annotation.coordinate = item.coordinates
            annotation.image = item.category.pinImage
            annotations.append(annotation)
        }
        myAnnotations = annotations
        mapView.addAnnotations(myAnnotations)
    }

.... ...

extension QPMainVC  : MKMapViewDelegate {

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

        if !(annotation is QPCustomAnnotaion) {
            return nil
        }
        let annotationID = "AnnotationId"
        var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationID)

        if annotationView == nil {
            annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: annotationID)
            annotationView?.canShowCallout = true
        }
        else {
            annotationView?.annotation = annotation
        }


        let myCustomAnnotation = annotation as? QPCustomAnnotaion
        annotationView?.image = myCustomAnnotation?.image

        annotationView?.displayPriority = .required

        return annotationView
    }

    func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
        guard let annotationLocation = view.annotation?.coordinate else { return }
        var indexOfAnnotation = 0
        for (index , item) in myAnnotations.enumerated() {
            if annotationLocation.latitude == item.coordinate.latitude{
                indexOfAnnotation = index
                break
            }
        }
        let indexPathOfMagorCell = IndexPath(row: indexOfAnnotation, section: 0)
        placesCollection.scrollToItem(at: indexPathOfMagorCell, at: .centeredHorizontally, animated: true)
    }
}

Правильно работает

После переключения приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...