Ich versuche, von Swift 1.2 zu Swift 2.0 zu wechseln, und ich bin am Ende der Änderungen. Zur Zeit mache ich Änderungen im MapViewController, und es gibt keinen Fehler oder eine Warnung, aber das benutzerdefinierte Bild für meinen Pin (AnnotationView) ist nicht dem Pin zugewiesen und zeigt den Standard-Pin (roter Punkt).Benutzerdefiniertes Pin-Bild in AnnotationView in iOS
Hier ist mein Code, ich hoffe, Sie mir mit etwas Spitze helfen kann, weil ich alles gut denken, aber es funktioniert immer noch nicht:
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
}
Vielen Dank im Voraus,
Grüße. Hier
Vielen Dank für Ihre Lösungen. Es half mir auch –
funktioniert nicht für Swift 2.2 – DeyaEldeen
Down abgestimmt. 1) Die Instanz "annotationView" wird im if-let-Bereich erstellt und ist in else-scope nicht vorhanden. 2) Wenn Sie eine Annotationsansicht erfolgreich entfernen können, sollten Sie diese verwenden und keine neue Instanz erstellen. Die neue Instanz sollte im Bereich "else-scope" erstellt werden, in der ein wiederverwendbares Objekt nicht entfernt werden kann. – esbenr