我有一个数组,其中每个元素都有Latitude
Longitude
,其中还有一些其他值可以在地图上绘制标记。我正在使用以下代码更新GMSMarker
的代码段,位置和图标。我正在使用UISlider
来遍历数组。当我这样做时,标记的图标和位置会更新,标记的InfoWindow
不会更新。它只显示旧内容。但是当我取消选择并再次选择它时,它会显示正确的信息内容。我曾尝试使用tracksInfoWindowChanges
,但它无效。
@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 :(得分:0)
这不是添加lat_long的正确方法,您应该将marker_obj添加到数组中,因为每个标记都包含所有相关信息,它可以帮助您减少这种类型的代码长度。
答案 1 :(得分:0)
正如评论中所提到的,可能是您没有制作新标记,或者如果您是,则需要从旧标记中移除地图(marker.map = nil
)。因此,当您单击重叠的标记时,infowindows将按顺序显示。