MapKit addAnnotation против addAnnotations - PullRequest
0 голосов
/ 23 октября 2019

Я создаю приложение, в которое я добавлю несколько аннотаций на карту. В качестве первого теста я попробовал

let anotacao = MKPointAnnotation()
anotacao.coordinate.latitude = -23.623558
anotacao.coordinate.longitude = -46.581787
anotacao.title = "Annotation 1 Title"
anotacao.subtitle = "Annotation 1 Subtitle"
self.mapa.addAnnotation(anotacao)

anotacao.coordinate.latitude = -23.623658
anotacao.coordinate.longitude = -46.582787
anotacao.title = "Annotation 2 Title"
anotacao.subtitle = "Annotation 2 Subtitle"
self.mapa.addAnnotation(anotacao)

anotacao.coordinate.latitude = -23.623258
anotacao.coordinate.longitude = -46.591787
anotacao.title = "Annotation 3 Title"
anotacao.subtitle = "Annotation 3 Subtitle"
self.mapa.addAnnotation(anotacao)

Мой ожидаемый результат - увидеть 3 аннотации на карте, но у меня была только последняя. Я также попытался добавить эти строки кодов в

Timer.scheduledTimer(withTimeInterval: 8, repeats: true) { (timer) in
         if index == 1 {
                 anotacao.coordinate.latitude = -23.623558
                 anotacao.coordinate.longitude = -46.581787
                 anotacao.title = "Annotation 1 Title"
                 anotacao.subtitle = "Annotation 1 Subtitle"
                 self.mapa.addAnnotation(anotacao)
                 index += 1
         } else if index == 2 {
                 anotacao.coordinate.latitude = -23.623658
                 anotacao.coordinate.longitude = -46.582787
                 anotacao.title = "Annotation 2 Title"
                 anotacao.subtitle = "Annotation 2 Subtitle"
                 self.mapa.addAnnotation(anotacao)
                 index += 1
         } else if index == 3 {
                 anotacao.coordinate.latitude = -23.623258
                 anotacao.coordinate.longitude = -46.591787
                 anotacao.title = "Annotation 3 Title"
                 anotacao.subtitle = "Annotation 3 Subtitle"
                 self.mapa.addAnnotation(anotacao)
        }

Даже если это не «пригодно для использования» в реальном проекте, приведенный выше код показывает 3 аннотации на карте.

Поиск в Stackoverflow Iнашел другой способ сделать это, используя addAnnotations, который делает именно то, что мне нужно . MapKit в Swift, часть 3 - MKPointAnnotation, addAnnotations Мой окончательный код выглядит в точности так, как предлагается в этой теме.

Поскольку я очень новичок в программировании Swift, моя основная мысль в этом постепопытаться понять, почему первый код не сработал. Чего мне не хватает в addAnnotation?

Я использую Xcode 11.2, Swift4, IOS13 и macOS Catalina

1 Ответ

1 голос
/ 23 октября 2019

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

Чтобы ваш первый пример работал, вам нужно создать новую MKMapAnnotation для каждой из трех аннотаций.

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

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