Sto provando a passare da Swift 1.2 a Swift 2.0 e sono alla fine delle modifiche. Attualmente sto apportando delle modifiche a MapViewController e non ci sono errori o avvertenze, ma l'immagine personalizzata per il mio pin (annotationView) non è assegnata al pin e mostra quella predefinita (punto rosso).Immagine pin personalizzata in annotationView in iOS
Ecco il mio codice, spero che mi può aiutare con qualche consiglio perché penso che tutto va bene ma non è ancora funzionante:
func parseJsonData(data: NSData) -> [Farmacia] {
let farmacias = [Farmacia]()
do
{
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary
// Parse JSON data
let jsonProductos = jsonResult?["farmacias"] as! [AnyObject]
for jsonProducto in jsonProductos {
let farmacia = Farmacia()
farmacia.id = jsonProducto["id"] as! String
farmacia.nombre = jsonProducto["nombre"] as! String
farmacia.location = jsonProducto["location"] as! String
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(farmacia.location, completionHandler: { placemarks, error in
if error != nil {
print(error)
return
}
if placemarks != nil && placemarks!.count > 0 {
let placemark = placemarks?[0]
// Add Annotation
let annotation = MKPointAnnotation()
annotation.title = farmacia.nombre
annotation.subtitle = farmacia.id
annotation.coordinate = placemark!.location!.coordinate
self.mapView.addAnnotation(annotation)
}
})
}
}
catch let parseError {
print(parseError)
}
return farmacias
}
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let identifier = "MyPin"
if annotation.isKindOfClass(MKUserLocation) {
return nil
}
// Reuse the annotation if possible
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
if annotationView == nil
{
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView!.canShowCallout = true
}
annotationView!.image = UIImage(named: "custom_pin.png")
let detailButton: UIButton = UIButton(type: UIButtonType.DetailDisclosure)
annotationView!.rightCalloutAccessoryView = detailButton
print(annotationView!.image)
return annotationView
}
Grazie in anticipo,
saluti.
Grazie per aver condiviso le tue soluzioni. Mi ha aiutato anche io –
non funziona per lo swift 2.2 – DeyaEldeen
Giù votato. 1) L'istanza "annotationView" viene creata in ambito if-let e non esiste in else-scope. 2) Se riesci a deselezionare una vista annotazione, dovresti usarla e non creare una nuova istanza. La nuova istanza deve essere creata nel dominio secondario, in cui non è possibile rimuovere dalla coda un riutilizzabile. – esbenr