Отображать различные изображения для каждой аннотации на картеView в Swift

Работая с MapKit и Swift, я пытаюсь отобразить ряд аннотаций, каждый из которых имеет уникальное изображение для отображения в leftCalloutAccessoryView. Я могу отображать аннотации с разными заголовками и субтитрами; однако изображение, отображаемое для каждой аннотации, является одним и тем же изображением. У меня возникли проблемы с определением того, как сделать каждое изображение уникальным. Большое удовлетворение по поводу любых отзывов и рекомендаций, направленных на то, чтобы это работало. Код ниже (ps) Я знаю, что у меня есть жестко закодированное изображение, я не уверен, как выполнять итерацию каждой аннотации, чтобы отобразить соответствующие изображения):

override func viewDidLoad() {
 super.viewDidLoad()

 mySearch.delegate = self
 theMapView.delegate = self

 var latAustin:CLLocationDegrees = 30.274751
 var lngAustin:CLLocationDegrees = -97.739141

 var latAustinDelta:CLLocationDegrees = 0.1
 var lngAustinDelta:CLLocationDegrees = 0.1

 var theSpan:MKCoordinateSpan = MKCoordinateSpanMake(latAustinDelta, lngAustinDelta)
 var austinLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latAustin, lngAustin)
 var theRegion:MKCoordinateRegion = MKCoordinateRegionMake(austinLocation, theSpan)

 theMapView.setRegion(theRegion, animated: true)
 // println(theMapView.userLocation.coordinate.latitude)
 // println(theMapView.userLocation.coordinate.longitude)

 for var i = 0; i < politicians.count; i++ {
 var politician = MKPointAnnotation()

 var politicianTotalFunding:String = politicians[i]["totalFunding"]! as String

 politician.coordinate = CLLocationCoordinate2DMake(politiciansCoords[i]["lat"]! as CLLocationDegrees, politiciansCoords[i]["lng"]! as CLLocationDegrees)
 politician.title = politicians[i]["name"]! as String
 politician.subtitle = "Total Funding: \(politicianTotalFunding)"

 theMapView.addAnnotation(politician)
 }
}


// Delegate method called each time an annotation appears in the visible window
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 = .Red

 var imageview = UIImageView(frame: CGRectMake(0, 0, 45, 45))
 imageview.image = UIImage(named: politicians[0]["photo"])
 pinView!.leftCalloutAccessoryView = imageview

 pinView!.rightCalloutAccessoryView = ********.buttonWithType(.DetailDisclosure) as ********
 } else {
 pinView!.annotation = annotation
 }
 return pinView
}

Еще раз спасибо за вашу помощь!

1 ответ

вам нужно создать собственный класс MKPointAnnotation, а затем добавить эти аннотации. при вызове view вы можете использовать пользовательскую переменную, определенную в MKPointAnnotation, как изображения.

licensed under cc by-sa 3.0 with attribution.