2017-06-17 7 views
1

私は、各要素にLatitudeLongitudeとそれ以外のいくつかの値がマップ上にマーカーを描画する配列を持っています。私はGMSMarkerのスニペット、位置、およびアイコンを更新するために次のコードを使用しています。私はUISliderを使って配列を反復処理しています。私がこれを行うと、マーカーのアイコンと位置が更新され、マーカーのInfoWindowは更新されません。古いコンテンツのみが表示されます。しかし、私はこれをもう一度選択解除して選択すると、正しい情報ウィンドウの内容が表示されます。 tracksInfoWindowChangesを使用しようとしましたが、動作しません。GMSMarkerのインフォエリアコンテンツ(スニペット)が更新されていません

@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

ここで問題はありません。マーカーの位置とアイコンは問題なく更新されます。更新しない情報ウィンドウのみ。 –

+0

もし、{}条件の中に 'proMarker'の新しいインスタンスを作成してみてください。 –

0

コメントに記載されているとおり、新しいマーカーを作成していない可能性があります。古いマーカー(marker.map = nil)からマップを削除する必要があります。したがって、重なったマーカーをクリックすると、情報ウィンドウが順番に表示されます。

関連する問題