Аннотации на карте перекрываются, когда они должны быть кластеризованы - PullRequest
0 голосов
/ 31 декабря 2018

Я работаю над приложением iOS swift, которое отображает изображения в виде аннотаций на карте.Когда несколько аннотаций перекрываются, они должны кластеризоваться и вместо этого показываться как одно из изображений.

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

Вот как это должно выглядеть: This is how it should look

Вот как это выглядит при возникновении ошибки: This is how it looks when the bug occurs

Я загрузил пример видео на Youtube(https://youtu.be/kaI0bTS8_HY)

Некоторые подробности о реализации:

  • Я использую специализированный MKAnnotationView:

    class PhotoAnnotationView: MKAnnotationView {
      let annotationWidth = 100
    
      var imageView = UIImageView()
    
      override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
        super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
        clusteringIdentifier = "LocatedPhoto"
        collisionMode = .circle
    
        addSubview(imageView)
        imageView.frame = annotationFrame
        frame = annotationFrame
      }
    
      var annotationFrame: CGRect {
        return CGRect(x: 0, y: 0, width: annotationWidth, height: annotationWidth)
      }
    
      override var annotation: MKAnnotation? {
        willSet {
            if let annotation = newValue as? PhotoAnnotation {
                let url = annotation.locatedPhoto.thumbnailURL
                let displayLocation = annotation.displayLocation
                setImage(url: url)
            }
        }
      }
    
      func setImage(url: URL) {
        //...
      } 
    }
    

MapViewController регистрирует этот тип аннотации для отображения аннотаций:

mapView.register(PhotoAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

Пропущен, потому что я думаю, что это не источник проблемы: - MKClusterView (ошибка также присутствует в обычном ClusterView) - Добавление аннотаций кпредставление карты

Что может быть источником этой проблемы?

1 Ответ

0 голосов
/ 31 декабря 2018

В PhotoAnnotationView ваш annotation наблюдатель должен сбросить clusteringIdentifier:

override var annotation: MKAnnotation? {
    willSet {
        if let annotation = newValue as? PhotoAnnotation {
            clusteringIdentifier = "LocatedPhoto"            // make sure to reset this
            let url = annotation.locatedPhoto.thumbnailURL
            let displayLocation = annotation.displayLocation
            setImage(url: url)
        }
    }
}

По мере удаления из очереди и повторного использования, clusteringIdentifier может быть очищено.Установив его снова, вы гарантируете, что кластеризация все еще будет иметь место.

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