【问题标题】:MapKit addAnnotation vs addAnnotationsMapKit addAnnotation 与 addAnnotations
【发布时间】:2019-10-22 23:40:51
【问题描述】:

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

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】:

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

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

    (实际上,我很惊讶基于计时器的功能可以正常工作,因为您似乎仍在更新同一个对象。我会玩一下那个...)

    【讨论】:

    • 感谢侧翼的解释。基于计时器的流程真的很奇怪......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多