2017-06-17 95 views
1

我有一個數組,其中每個元素都有LatitudeLongitude以及其他一些值,可以在地圖上繪製標記。我正在使用以下代碼更新GMSMarker的片段,位置和圖標。我正在使用UISlider來遍歷數組。當我這樣做時,標記的圖標和位置會更新,標記的InfoWindow不會更新。它只顯示舊內容。但是,當我取消選擇並再次選擇它時,它會顯示正確的infowindow內容。我試圖使用tracksInfoWindowChanges,但它不起作用。GMSMarker infowindow content(snippet)not updating

@IBAction func progressChanged(_ sender: UISlider) { 

    let iVal = Int(sender.value) 

    if iVal < progressList.count { 

     let str = progressList[iVal] 

     let arr = str.components(separatedBy: "!") 



     let lat = Double(arr[4])! 

     let lng = Double(arr[5])! 



     let pos = CLLocationCoordinate2DMake(lat, lng) 

     let fRotation = Float(arr[9]) 

     let rotation = CGFloat(fRotation!) 



     let strTime = arr[0] 

     let idleFlag = arr[1] 

     let strSpeed = arr[2] 

     let strName = arr[3] 



     proMarker.position = pos 

     proMarker.title = strName 



     if idleFlag == "Y" { 

      proMarker.snippet = strSpeed + "!" + strTime + "!" + "idle" 

      proMarker.tracksInfoWindowChanges = true 

      let markerImage = UIImage(named: "arrow_red") 

      let rotated = markerImage?.imageRotatedByDegrees(rotation, flip: false) 

      proMarker.icon = rotated 

     } else { 

      proMarker.snippet = strSpeed + "!" + strTime + "!" + "moving" 

      proMarker.tracksInfoWindowChanges = true 

      let markerImage = UIImage(named: "arrow_green") 

      let rotated = markerImage?.imageRotatedByDegrees(rotation, flip: false) 

      proMarker.icon = rotated 

     } 

     proMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5) 



     let dTime = sdf5.date(from: strTime) 

     let sTime = sdf6.string(from: dTime!) 



     hTime.text = sTime 

     hSpeedIdle.text = strSpeed + " km/h" 

    } 

} 

請幫我解決我的問題。

回答

0

這不是一個正確的方法來添加lat_long,您應該將marker_obj添加到數組中,因爲每個標記都包含所有相關信息,並且它可以幫助您減少此類長度的代碼。

+0

這不是問題在這裏。標記位置和圖標更新沒有任何問題。只有infowindow沒有更新。 –

+0

好吧,嘗試在if {}條件下創建'proMarker'的新實例。 –

0

正如在評論中提到的,可能是因爲您沒有製作新標記,或者如果是的話,您需要從舊標記中刪除地圖(marker.map = nil)。所以當你點擊重疊標記時,信息窗口將依次出現。