ios - 在 swift 中使用标记聚类时,如何向我的苹果 map 上的图钉添加注释 View ?

标签 ios swift mkmapview mapkit mapkitannotation

我正在使用取自此处 https://github.com/ribl/FBAnnotationClusteringSwift 的简单标记簇

我看到这部分代码负责在 map 上放置一个集群或一个图钉:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
        var reuseId = ""
        if annotation.isKindOfClass(FBAnnotationCluster) {
            reuseId = "Cluster"
            var clusterView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
            clusterView = FBAnnotationClusterView(annotation: annotation, reuseIdentifier: reuseId, options: nil)
            return clusterView
        } else {
            reuseId = "Pin"
            var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            pinView!.pinColor = .Green
            return pinView
        }
    }

它工作正常,我看到了集群或单个引脚,但现在我想为用户按下的每个引脚添加一个弹出窗口,如下所示:

enter image description here

我在这里找到了这张截图 http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial 按照本教程,我创建了一个类 SingleRequest 并修改了上面提到的代码,所以现在它看起来像这样:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
        var reuseId = ""
        if annotation.isKindOfClass(FBAnnotationCluster) {
            reuseId = "Cluster"
            var clusterView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
            clusterView = FBAnnotationClusterView(annotation: annotation, reuseIdentifier: reuseId, options: nil)
            return clusterView
        } else {
            reuseId = "Pin"

            if let annotation = annotation as? SingleRequest {

            var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            pinView!.pinColor = .Green
            pinView!.canShowCallout = true
            pinView!.calloutOffset = CGPoint(x: -5, y: 5)
            pinView!.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) as UIView

            return pinView
            }
            return nil
        }


    }

但是,当我点击 map 上的图钉时,仍然看不到任何东西。 更重要的是,单个引脚现在是红色的(默认颜色),看起来像这样一行:

pinView!.pinColor = .Green

在代码中被忽略了,可能其他的也是。

我在这里错过了什么?

最佳答案

我有 2 天遇到完全相同的问题。我不知道是否出于同样的原因(但没有足够的声誉来发表评论)。 (是的,我来晚了,抱歉 ^^)

你的 viewDidLoad() 函数中是否有这一行,在你的 View Controller 中:

mapView.delegate = self 

此外,关于您的颜色,您使用的线条已弃用。试试这个:

pinView?.pinTintColor = UIColor.purpleColor()

希望对您有所帮助。

关于ios - 在 swift 中使用标记聚类时,如何向我的苹果 map 上的图钉添加注释 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35683873/

相关文章:

ios - drawRect 不调整大小并跑出屏幕 3.5 英寸屏幕

swift - 使用 SwiftUI 基于用户输入的动态文本字段

ios - 为什么我的指示器在加载网页 View 时不起作用?

iphone - 如何在同一位置放置多个图钉

cocoa - 使用 KVO 时出现异常

iOS - TableView + 按钮布局(外部)

ios - 如何创建单独的方法来创建 SKLabelNode 或 SKSpriteNode

ios - 为什么点击后它不执行任务 2?

macos - 快速工具栏中的 TabView

ios - 检测选定的注释以更改图钉颜色