点击标记时如何更新谷歌地图标记图像

Posted

技术标签:

【中文标题】点击标记时如何更新谷歌地图标记图像【英文标题】:How to Update Google Maps Marker Image when tap on the marker 【发布时间】:2019-06-07 01:16:43 【问题描述】:

我想更改标记图标并在点击标记时显示信息窗口。 我的问题是如何更改标记图标?

我已经存储了谷歌地图实例,并尝试将其更新为该标记的设置 iconView 属性

func setUpMarker() 
        let markerView = UIImageView(image: UIImage(named: "pinImage"))
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: lat, longitude: lng)
        marker.iconView = markerView

        storeMarker = marker
    

更新标记的方法

func updateMarker() 
        let markerView = UIImageView(image: UIImage(named: "circleImage"))
        storeMarker.iconView = markerView
    

但是,这会在前一个图标上添加一个新图标

【问题讨论】:

【参考方案1】:

你需要实现谷歌地图委托方法

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool 

 func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) 

 func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) 

【讨论】:

我已经添加了那些委托方法,你能告诉我我应该在这些方法中做什么。【参考方案2】:

在 cmets 中,您询问了如何取消选择当前选定的标记。这涉及更多一点。我这样做是这样的:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool 
    // `markers` is an array of all the markers currently on the map.
    markers.forEach 
        ($0.iconView as! UIImageView).image = #imageLiteral(resourceName: "unselected-pin")
    
    (marker.iconView as! UIImageView).image = #imageLiteral(resourceName: "selected-pin")
    return true


上一个答案

func mapView(_ mapView: GMSMapView, didTapMarker marker: GMSMarker) -> Bool 
    print("tapped on marker")
    if storeMarker == marker 
        (marker.iconView as! UIImageView).image = #imageLiteral(resourceName: "circleImage")
    
    return true

【讨论】:

哇,这很简单。你知道如何在点击另一个标记时取消选择“选定”标记吗?

以上是关于点击标记时如何更新谷歌地图标记图像的主要内容,如果未能解决你的问题,请参考以下文章

使用角度谷歌地图时如何正确处理标记点击事件?

当用户单击某些链接时更改谷歌地图标记图标

移动地图时,在谷歌地图中更新Ajax Json数组中的标记

如何获取谷歌地图标记的 UIView 实例?

只允许用户在谷歌地图上放置 1 个标记

设置后如何删除谷歌地图api标记