Swift 1.2からSwift 2.0に変更しようとしていますが、変更の最後です。現在、私はMapViewControllerを変更していますが、エラーや警告はありませんが、私のピン(annotationView)のカスタムイメージはピンに割り当てられておらず、デフォルトのもの(赤い点)を表示しています。ここでiOSのannotationViewのカスタムピンイメージ
私のコードで私はすべてがうまくだと思うが、それはまだ働いていないので、私はあなたには、いくつかのヒントで私を助けることを願って:事前に
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
}
おかげで、
よろしく。ここで
解決策をお寄せいただきありがとうございます。それも私を助けた –
はスウィフト2.2のために動作しません – DeyaEldeen
ダウン投票しました。 1) "annotationView"インスタンスはif-letスコープに作成され、elseスコープには存在しません。 2)アノテーションビューをデキューすることができれば、そのインスタンスを使用し、新しいインスタンスを作成する必要はありません。新しいインスタンスは、再利用可能なキューからデキューできないelseスコープ内に作成する必要があります。 – esbenr