Riccardo Caroli
Riccardo Caroli

Reputation: 341

change image pin maps

What should I write in order to put a personal picture instead of the traditional red pin?

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

    if annotation is MKUserLocation {
        return nil
    }

    let annView : MKPinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "currentloc")
    annView.pinTintColor = UIColor.redColor()
    annView.animatesDrop = true
    annView.canShowCallout = true
    annView.calloutOffset = CGPointMake(-8, 0)

    annView.autoresizesSubviews = true
    annView.rightCalloutAccessoryView = UIButton(type: UIButtonType.DetailDisclosure) as UIView

    return annView
}

Upvotes: 1

Views: 90

Answers (1)

Rob
Rob

Reputation: 437542

Use MKAnnotationView instead of MKPinAnnotationView, and then set its image property. I'd also suggest implementing the dequeue logic so that annotations can be reused:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }

    let annotationIdentifier = "SomeCustomIdentifier" // use something unique that functionally identifies the type of pin

    var annotationView: MKAnnotationView! = mapView.dequeueReusableAnnotationViewWithIdentifier(annotationIdentifier)

    if annotationView != nil {
        annotationView.annotation = annotation
    } else {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)

        annotationView.image = UIImage(named: "annotation.png")

        annotationView.canShowCallout = true
        annotationView.calloutOffset = CGPointMake(-8, 0)

        annotationView.autoresizesSubviews = true
        annotationView.rightCalloutAccessoryView = UIButton(type: UIButtonType.DetailDisclosure) as UIView
    }

    return annotationView
}

Upvotes: 2

Related Questions