0
私のアプリケーションでは、いくつかの異なる画像でポイントを示すマップがあります。イメージを定義するために使用されるいくつかのパラメータにいくつかの変更を加えると、そのマップを削除して追加することでマップを更新しようとします。問題は、注釈を更新してもう一度追加すると、viewFor注釈メソッドは注釈をnilとして受け取るということです。私は何が間違っていますか?Viewforannotationは、マップを更新した後でアノテーションをnilとして取得します。
ここで私は変更を行った後、私のマップを更新しています:
func reloadMap(){
for annotation in mapView.annotations {
let a = annotation
self.mapView.removeAnnotation(a)
DispatchQueue.main.async {
self.mapView.addAnnotation(a)
}
}
}
をこれは私がアノテーション画像を設定するために使用私のviewForAnnotationです:あなたが考えることができますどのような
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let annotationIdentifier = "pin"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
annotationView?.canShowCallout = true
var categoryName = ""
var colorName = ""
// Resize image
if annotation is MyAnnotation{
let index = (annotation as! MyAnnotation).annotationIndex
let annotationData = searchResult[index]
let categories = annotationData.object(forKey: "category") as! NSArray
for item in categories {
let category = item as! String
if hasCategory(category: category) {
categoryName = translateCategoryName(category: category)
break
}
}
let status = annotationData.object(forKey: "status") as! String
if status == "Lotado"{
colorName = "vermelho"
} else if status == "Quase cheio"{
colorName = "laranja"
} else if status == "Médio"{
colorName = "amarelo"
}else if status == "Vazio"{
colorName = "verde"
} else {
colorName = "cinza"
}
}
var imageName = ""
if categoryName != "" {
imageName = "\(colorName)-\(categoryName)"
} else {
imageName = "verde-padaria"
}
if annotation is MKUserLocation {
let userAvatar = defaults.integer(forKey: "avatarNumber")
imageName = "balao-avatar\(userAvatar)"
}
let pinImage = UIImage(named: imageName)
let size = CGSize(width: 30, height: 50)
UIGraphicsBeginImageContext(size)
pinImage?.draw(in: CGRect.init(x: 0.0, y: 0.0, width: size.width, height: size.height))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
annotationView?.image = resizedImage
if !(annotation is MKUserLocation) {
let btn = UIButton(type: .infoLight)
btn.addTarget(self,action:#selector(showEstablishment),for:.touchUpInside)
annotationView?.rightCalloutAccessoryView = btn
}
return annotationView
}
else {
annotationView?.annotation = annotation
}
return annotationView
}
http://stackoverflow.com/questions/25591038/is-there-any-mエソートからキューへのリセットを使用してデキュー可能な通知 – breno