marmaralone
marmaralone

Reputation: 516

How to change non selected annotation pin images on mapkit with Swift

I have a map and on this map, I have 10 custom annotation pins. All pins have the same custom image. When I click on a pin, I need to change all the other 9 annotation's images. it's possible to change the clicked pin's image but I need to keep as it is and I need to change all other pins images.

I tried to get all annotations with Map mapView.annotations and tried to find selected annotations and change other images but couldn't manage it. And idea how to do it?

Thanks in advance.

Upvotes: 1

Views: 2767

Answers (3)

michalbanan
michalbanan

Reputation: 165

You just have to overrride isSelected property inside your MKAnnotationView subclass.

override var isSelected: Bool {
    didSet {
        if isSelected {
            // do stuff where annotation is selected
        } else {
            // do opposite
        }
    }
}

Upvotes: 1

marmaralone
marmaralone

Reputation: 516

finally managed :) solved the problem little bit hard way but working smooth :) thank you for the tip rshev ;)

i used a bool for tap recognize

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

    if annotation is CustomAnnotation {
        var pin = mapView.dequeueReusableAnnotationViewWithIdentifier(customAnnotationViewIdentifier)
        pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: customAnnotationViewIdentifier)

        if tapControl {
            pin.image = UIImage(named: "MapAnnotationIcon")
        } else {
            pin.image = UIImage(named: "SelectedMapAnnotationIcon")
        }

        if pin == nil {
            pin.canShowCallout = false
        } else {
            pin.annotation = annotation
        }

        return pin

and when pin tapped ->

  if let annotation = view.annotation as? CustomAnnotation {

        tapControl = !tapControl
        for annotation in mapView.annotations {
            if let annotation = annotation as? MKAnnotation where !annotation.isEqual(selectedAnnotation) {
                mapView.removeAnnotation(annotation)
            }
        }
        addAnnotations()
        println("tapped")

i removed all pins without selected pin, and then draw them back but this time tapcontrol is false so other pins are redrawed with another imageview, so thats what i exactly want to do.

Upvotes: 1

rshev
rshev

Reputation: 4186

Conform to MKMapViewDelegate protocol and then:

func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!) {
    let selectedAnnotation = view.annotation
    for annotation in mapView.annotations {
        if let annotation = annotation as? MKAnnotation where !annotation.isEqual(selectedAnnotation) {
            // do some actions on non-selected annotations in 'annotation' var
        }
    }

Also you can save the selected annotation for later use here, if you want to process all annotations in another moment.

Upvotes: 3

Related Questions