Swift - MKPinAnnotation display issue

I'm trying to change my pin annotation image to something other than a pin.

    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 = .Green
            pinView!.image = UIImage(named: "icon1.png")

            // Add image to left callout
            var mugIconView = UIImageView(image: UIImage(named: "test.png"))
            pinView!.leftCalloutAccessoryView = mugIconView

            // Add detail button to right callout
            var calloutButton = UIButton.buttonWithType(.DetailDisclosure) as UIButton
            pinView!.rightCalloutAccessoryView = calloutButton
        }
        else {
            pinView!.annotation = annotation
        }

        return pinView

      

Everything works, except for changing the pin image. I have a custom subcomponent of a subclass which is

I searched for hours, but every other question I found didn't help. I would appreciate any help ... thanks.

UPDATED FROM ANSWERS

   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
    }

    var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier("pin")

    if pinView == nil {
        pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin")
        pinView!.canShowCallout = true
        pinView!.image = UIImage(named: "test.png")

        // Add image to left callout
        var mugIconView = UIImageView(image: UIImage(named: "test.png"))
        pinView!.leftCalloutAccessoryView = mugIconView

        // Add detail button to right callout
        var calloutButton = UIButton.buttonWithType(.DetailDisclosure) as UIButton
        pinView!.rightCalloutAccessoryView = calloutButton
    }
    else {
        pinView!.annotation = annotation
    }

    return pinView
}

      

+3


source to share


1 answer


You want MKAnnotationView

, not MKPinAnnotationView

. Contact connectors cannot customize their image.



See this SO answer for more information

+3


source







All Articles