MapKit addAnnotation vs addAnnotations

问题描述 投票:0回答:1

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

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,我发现了另一种使用addAnnotations的方法,该方法正是我所需要的]MapKit in Swift, Part 3 - MKPointAnnotation, addAnnotations我的最终代码与该线程中的建议完全相同。

由于我是Swift编程的新手,所以本文的主要目的是试图了解为什么第一个代码无法正常工作。我在addAnnotation中缺少什么?

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

swift mapkit mapkitannotation
1个回答
0
投票

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

要使第一个示例生效,您需要为三个注释中的每个注释创建一个新的MKMapAnnotation。

((实际上我很惊讶基于计时器的那个起作用,因为您仍然似乎在更新相同的对象。我将和那个那个一起玩...)

© www.soinside.com 2019 - 2024. All rights reserved.