MapKit addAnnotation 与 addAnnotations

MapKit addAnnotation vs addAnnotations

我正在构建一个应用程序,我将在其中向地图添加多个注释。 作为第一个测试,我尝试了

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)
        }

即使不是 "usable" 在真实项目中,上面的代码在地图上显示了 3 个注释。

搜索 Whosebug 我发现了另一种方法,即使用 addAnnotations,这正是我需要的MapKit in Swift, Part 3 - MKPointAnnotation, addAnnotations 我的最终代码看起来与该线程中建议的完全一样。

因为我是 Swift 编程的新手,所以我用这个 post 的要点是试图理解为什么第一个代码不起作用。我缺少 addAnnotation 什么?

我正在使用 Xcode 11.2、Swift4、IOS13 和 macOS Catalina

您缺少的一点是 MKPointAnnotation 是引用类型(class)并且地图存储了对您创建的 class 实例的引用。因此,每次您尝试添加新注释时,您实际上是在更新现有注释的属性,而不是创建和添加新注释。这就是为什么它始终是最后一组可见的值。

要使您的第一个示例正常工作,您需要为三个注释中的每一个创建一个新的 MKMapAnnotation。

(我真的很惊讶基于计时器的工作原理,因为你似乎仍然在更新同一个对象。我会玩那个...)