将图像添加到MKAnnotationView取代了pin

时间:2014-09-12 01:00:13

标签: ios swift mkannotation mkannotationview

我正在尝试使用图像放下一些代表公交车站的引脚,当我对图像进行广告时,它会更改引脚的位置。当我没有设置图像时,引脚会掉落在正确的位置。

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {

    if annotation is StopAnnotation {

        let identifier = "stopAnnotation"
        var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
        if pinView == nil {
            //println("Pinview was nil")
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
            pinView!.canShowCallout = true
            pinView.image = UIImage(named: "stopIcon")
        }
        return pinView

    }
    return nil
}

实例 enter image description here enter image description here

我想要使用的图片: enter image description here

有谁能告诉我为什么这样做?我在这个应用程序的Obj-C版本中使用完全相同的图像,一切正常。

1 个答案:

答案 0 :(得分:5)

代码正在使用自定义图片创建MKPinAnnotationView

MKPinAnnotationView类只应用于显示默认的图钉图像。

要显示自定义图片,最好使用普通MKAnnotationView


由于代码使用的是MKPinAnnotationView,因此图像会自动获取应用于它的偏移量(centerOffset属性)。

此内置偏移适用于默认图钉图像,但不适用于您的自定义图像。

不要试图覆盖此默认行为,而是使用普通MKAnnotationView代替:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {

    if annotation is StopAnnotation {

        let identifier = "stopAnnotation"
        var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
        if pinView == nil {
            //println("Pinview was nil")

            //Create a plain MKAnnotationView if using a custom image... 
            pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)

            pinView!.canShowCallout = true
            pinView.image = UIImage(named: "stopIcon")
        }
        else {
            //Unrelated to the image problem but...
            //Update the annotation reference if re-using a view...
            pinView.annotation = annotation
        }

        return pinView          
    }
    return nil
}