在 Swift 中为 mapView 上的每个注释显示不同的图像

Posted

技术标签:

【中文标题】在 Swift 中为 mapView 上的每个注释显示不同的图像【英文标题】:Display different images for every annotation on mapView in Swift 【发布时间】:2014-08-11 22:26:49 【问题描述】:

在使用 MapKit 和 Swift 时,我试图显示一些注释,每个注释都有一个唯一的图像来显示在 leftCalloutAccessoryView 中。我能够显示具有不同标题和副标题的注释;但是,为每个注释显示的图像是相同的图像 - 我无法弄清楚如何使每个图像都独一无二。非常感谢任何和所有的反馈/指导,以使其发挥作用。下面的代码(ps 我知道我已经对图像进行了硬编码;我不确定如何遍历每个注释以显示适当的图像):

override func viewDidLoad() 
    super.viewDidLoad()

    mySearch.delegate = self
    theMapView.delegate = self

    var latAustin:CLLocationDegrees = 30.274751
    var lngAustin:CLLocationDegrees = -97.739141

    var latAustinDelta:CLLocationDegrees = 0.1
    var lngAustinDelta:CLLocationDegrees = 0.1

    var theSpan:MKCoordinateSpan = MKCoordinateSpanMake(latAustinDelta, lngAustinDelta)
    var austinLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latAustin, lngAustin)
    var theRegion:MKCoordinateRegion = MKCoordinateRegionMake(austinLocation, theSpan)

    theMapView.setRegion(theRegion, animated: true)
    //        println(theMapView.userLocation.coordinate.latitude)
    //        println(theMapView.userLocation.coordinate.longitude)

    for var i = 0; i < politicians.count; i++ 
        var politician = MKPointAnnotation()

        var politicianTotalFunding:String = politicians[i]["totalFunding"]! as String

        politician.coordinate = CLLocationCoordinate2DMake(politiciansCoords[i]["lat"]! as CLLocationDegrees, politiciansCoords[i]["lng"]! as CLLocationDegrees)
        politician.title = politicians[i]["name"]! as String
        politician.subtitle = "Total Funding: \(politicianTotalFunding)"

        theMapView.addAnnotation(politician)
    



// Delegate method called each time an annotation appears in the visible window
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! 

    if annotation is MKUserLocation 
        //return nil so map view draws "blue dot" for standard user location
        return nil
    

    let reuseId = "pin"

    var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
    if pinView == nil 
        pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView!.canShowCallout = true
        pinView!.animatesDrop = true
        pinView!.pinColor = .Red

        var imageview = UIImageView(frame: CGRectMake(0, 0, 45, 45))
        imageview.image = UIImage(named: politicians[0]["photo"])
        pinView!.leftCalloutAccessoryView = imageview

        pinView!.rightCalloutAccessoryView = UIButton.buttonWithType(.DetailDisclosure) as UIButton
     else 
        pinView!.annotation = annotation
    
    return pinView

再次感谢您的帮助!

【问题讨论】:

在 viewForAnnotation 中,您可以遍历数组以找到 name 等于 annotation.title 的政治家(或使用 filter 函数)。但是,更好的方法是创建一个包含照片名称的自定义注释类,然后在 viewForAnnotation 中根本不需要迭代或搜索(注释参数将包含政治家的所有数据)。 太棒了!作品!!非常感谢,安娜。 【参考方案1】:

您需要创建自定义 MKPointAnnotation 类,然后添加这些注释。当调用视图时,您可以将 MKPointAnnotation 中定义的自定义变量用作图像。

【讨论】:

以上是关于在 Swift 中为 mapView 上的每个注释显示不同的图像的主要内容,如果未能解决你的问题,请参考以下文章

Swift MKMapView 引脚注释问题

Swift MapKit - MapView 中不显示注释

在 Swift 中的同一个 mapView 中分配多个注释 pinColors?

ViewController 作为 Swift 中 MapView 的叠加层(如 Google 地图应用程序用户界面)

Swift - 将不同的图像从数组设置到注释引脚

MapView 注释:查找坐标