我从服务器获取数组,并且必须在地图上显示带协调的注释(带有coord的数组) 我有数组“状态”。数组的值必须改变注释图像(1 =绿色图片,2 - 红色pic,3 - 黄色pic) 这是工作 但是,当我更新我的位置数组和状态数组时,我的图片发生了变化。 当我获得另一种状态时,图像必须改变,但是所有时间都有变化。 如何解决这个问题?
class SuperPin: MKPointAnnotation {
var lon: Double!
var lat: Double!
var name: String!
var status: String!
}
func DriverData(string: String) {
if (string != nil)
//there I'm get my array
var t = 0
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
let ann = self.myMap.annotations.filter { $0 !== self.myMap.userLocation }
self.myMap.removeAnnotations(ann)
dispatch_async(dispatch_get_main_queue(), {
do {
var pin: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: self.longitude[t].doubleValue, longitude: self.latitude[t].doubleValue)
var my_color = SuperPin()
if (self.status[t].toInt() == 1){
my_color.status = "1.png"
} else {
if (self.status[t].toInt() == 2){
my_color.status = "2.png"
} else {
my_color.status = "3.png"
}
}
my_color.lat = self.latitude[t].doubleValue
my_color.lon = self.longitude[t].doubleValue
my_color.coordinate.latitude = my_color.lon
my_color.coordinate.longitude = my_color.lat
my_color.title = self.name[t]
self.myMap.addAnnotation(my_color)
t++
} while (t < namearr.count)
})
})
} else {
timer1.invalidate()
}
}
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
let reuseID = "test"
var anView = myMap.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView
if (annotation is MKUserLocation) {
anView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID)
anView!.image = UIImage(named: "usrloc")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
anView!.canShowCallout = true
}
if anView == nil {
anView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID)
let cpa = annotation as! SuperPin
anView!.image = UIImage(named: cpa.status)
anView!.canShowCallout = true
} else {
anView!.annotation = annotation
}
return anView
}
答案 0 :(得分:0)
- &GT;首先从mapview中删除所有来自旧数组的注释,然后获取或更新您的位置并在地图上获取新注释,请尝试以下逻辑。它帮助我很好,也可以帮助你。
var arrannotations = NSMutableArray();
map.removeAnnotations(map.annotations);
for var i = 0; i <arrannotations; i++
{
map.addAnnotation(arrannotations.objectAtIndex[i])
}