自定义注释引脚

时间:2017-05-29 05:12:04

标签: swift mkannotationview mkpointannotation

我想自定义我的注释(引脚),以便我可以更改其图像。我使用了一个函数(mapview)来改变图片,所以我不知道是否应该再次使用它来改变另一组引脚的图片;假设我有两个地方,一个餐馆和一个医院,所以我想分别放一个盘子和一个红叉。这是我的功能代码:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "identifier")
        if annotationView == nil{
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "identifier")
            annotationView!.canShowCallout = true
            annotationView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)

            let pinImg = UIImage(named: "curz")
            let size = CGSize(width: 50, height: 50)
            UIGraphicsBeginImageContext(size)
            pinImg!.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
            let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            annotationView!.image = resizedImage
            }
    else {
    annotationView!.annotation = annotation
  }
return annotationView
}

2 个答案:

答案 0 :(得分:0)

您可以通过比较坐标信息为不同的地方返回不同的注释视图。例如:

if ((annotation.coordinate.latitude == theCoordinate1.latitude) 
    && (annotation.coordinate.longitude == theCoordinate1.longitude))

{   返回someAnnotationView }

点击此链接Adding different images to different annotation views in xcode

答案 1 :(得分:0)

为不同的注释类型(或不同注释类型的组)返回不同视图的正确方法是对注释进行子类化,并为每个注释分配不同的重用标识符(在init期间)。该标识符类似于表视图单元标识符,用于在单元格滚出视线时重用(而不是从头开始创建)单元格。对于注释也是如此,而不是每次被删除时都创建一个新的注释。注释可以重复使用。

然后在mapview viewfor annotation中,您可以测试annotation.identifier并分配正确的图像。