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。
(我真的很惊讶基于计时器的工作原理,因为你似乎仍然在更新同一个对象。我会玩那个...)
我正在构建一个应用程序,我将在其中向地图添加多个注释。 作为第一个测试,我尝试了
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。
(我真的很惊讶基于计时器的工作原理,因为你似乎仍然在更新同一个对象。我会玩那个...)