我正在构建一个应用程序,在其中将向地图添加几个注释。作为第一个测试,我尝试过
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
您所缺少的是MKPointAnnotation是引用类型(一个类),并且映射存储了对您创建的类的实例的引用。因此,每次尝试添加新注释时,实际上是在更新现有注释的属性,而不是创建和添加新注释。这就是为什么它始终是可见的最后一组值。
要使第一个示例生效,您需要为三个注释中的每个注释创建一个新的MKMapAnnotation。
((实际上我很惊讶基于计时器的那个起作用,因为您仍然似乎在更新相同的对象。我将和那个那个一起玩...)