Fr0zt
Fr0zt

Reputation: 1255

Add Annotations in MapKit - Programmatically

I am trying to add annotations to my map. I have an array of points with coordinates inside. I am trying to add annotations from those coordinates.

I have this defined:

var points: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]() 
let annotation = MKPointAnnotation()

points has coordinates inside. I checked. And I do this:

for index in 0...points.count-1 {
        annotation.coordinate = points[index]
        annotation.title = "Point \(index+1)"
        map.addAnnotation(annotation)
    }

It keeps adding only the last annotation... Instead of all of them. Why is this? By the way, is there a way to delete a specified annotation, by title for example?

Upvotes: 6

Views: 6835

Answers (2)

Harish Singh
Harish Singh

Reputation: 765

You can edit your for loop with the below code I think your array would be like points array

  let points = [
    ["title": "New York, NY",    "latitude": 40.713054, "longitude": -74.007228],
    ["title": "Los Angeles, CA", "latitude": 34.052238, "longitude": -118.243344],
    ["title": "Chicago, IL",     "latitude": 41.883229, "longitude": -87.632398]
]
for point in points {   
    let annotation = MKPointAnnotation()
    annotation.title = point["title"] as? String
    annotation.coordinate = CLLocationCoordinate2D(latitude: point["latitude"] as! Double, longitude: point["longitude"] as! Double)
    mapView.addAnnotation(annotation)
}

it's working for me. All the best for you.

Upvotes: 5

zisoft
zisoft

Reputation: 23078

Each annotation needs to be a new instance, you are using only one instance and overriding its coordinates. So change your code:

for index in 0...points.count-1 {
    let annotation = MKPointAnnotation()  // <-- new instance here
    annotation.coordinate = points[index]
    annotation.title = "Point \(index+1)"
    map.addAnnotation(annotation)
}

Upvotes: 6

Related Questions