如何使用Swift将图像更改为MKAnnotation

时间:2016-12-02 16:06:41

标签: ios swift annotations

我有一个带有2个注释的地图,我想要每个都有2个不同的图像。

我知道如何使用一个注释来完成它,但我的问题是有两个注释。

以下是我的代码:

 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
        let reuseId = "pin"

        var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)


        anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        anView!.image = nil;
        anView!.image = UIImage(named:"destinationPin")


        return anView

    }

如果你能解释我什么是reuseId,那么我真的很感激。

提前致谢

2 个答案:

答案 0 :(得分:1)

首先,在向地图添加注释时,您需要区分它们。简单的方法是设置标记值。然后你可以按如下方式分支逻辑:

if annotation.tag == 0 {
    anView!.image = UIImage(named:"destinationPin")
} else {
    anView!.image = UIImage(named:"alternateDestinationPin")
}

注意MKAnnotation具有其他属性,如标题和坐标,可用于分支逻辑。

答案 1 :(得分:0)

您可以将它们作为选项投射。

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    let reuseId = "pin"

    var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)

    if let annotation1 = anView as? FirstAnnotation {
        annotation1.image = UIImage(named: "first.jpg")
    } else if let annotation2 = anView as? SecondAnnotation {
        annotation2.image = UIImage(named: "second.jpg")
    }
    return anView
}

这具有类型安全的附加好处,而不依赖于您自己对tag内部内容的了解。如果您有两个单独的MKAnnotation类型,那么您应该将它们分类为两个单独的类。