Próbuję zmienić wersję z Swift 1.2 na Swift 2.0 i jestem na końcu zmian. Obecnie dokonuję zmian w MapViewController i nie ma żadnego błędu ani ostrzeżenia, ale niestandardowy obraz dla mojego pinezka (annotationView) nie jest przypisany do pinezki i pokazuje domyślną (czerwona kropka).Niestandardowy obraz pinezki w adnotacjiW widoku na iOS
Oto mój kod, mam nadzieję, że może mi pomóc z pewnym końcówki, ponieważ myślę, wszystko jest w porządku, ale to nadal nie działa:
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
}
góry dzięki,
Pozdrawiam.
Dziękujemy za udostępnienie rozwiązań. Pomógł mi też –
nie działa dla szybkiego 2.2 – DeyaEldeen
Głosowanie odrzucone. 1) instancja "annotationView" jest tworzona w zasięgu if-let i nie istnieje w else-scope. 2) Jeśli z powodzeniem można wycofać annotację, należy ją użyć, a nie tworzyć nowej instancji. Nowa instancja powinna zostać utworzona w ramach innego zakresu, w którym nie można odjąć pakietu wielokrotnego użytku. – esbenr