使用计时器更改注释上的图像 - Swift

时间:2015-07-24 09:17:08

标签: ios swift

我从服务器获取数组,并且必须在地图上显示带协调的注释(带有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
}

1 个答案:

答案 0 :(得分:0)

- &GT;首先从mapview中删除所有来自旧数组的注释,然后获取或更新您的位置并在地图上获取新注释,请尝试以下逻辑。它帮助我很好,也可以帮助你。

var arrannotations = NSMutableArray();
map.removeAnnotations(map.annotations);
for var i = 0; i <arrannotations; i++
{
map.addAnnotation(arrannotations.objectAtIndex[i])
}