Google 为点击和未选择的状态绘制不同的标记图像



有没有办法添加ID,案例或类似的东西,以便为选定和未选择的状态设置自定义标记图像?

我有多个具有不同名称/标题的标记,我需要特定类型的标记具有另一个用于选定和未选定状态的图像。

例如:

标记1 - marker_1_image

标记2 - marker_2_image

自动取款机我只能设置2张具有正确图像的图像,但是如果我单击标记,它将继承".contains"功能上设置的特定类型。 我做了一个".contains"函数,以便在 POI/位置名称下的 JSON 响应中找到特定字符串。例如:当前自动取款机模型?地名?。包含("餐厅"(,因此名称为"餐厅"的标记将显示特定的图标图像。

我使用的是最新版本的 iOS 版 Google Maps SDK。

这是我的代码:

var markersModel: [MarkersLocation] = [] {
didSet {
updateAllMarkers()
}
}
private func updateAllMarkers() {
for selectedPOIMarker in markersModel {
let currentPOIModel = selectedPOIMarker.location
let latitude = currentPOIModel?.coordinates?.latitude
let longitude = currentPOIModel?.coordinates?.longitude
let marker = GMSMarker()
marker.appearAnimation = GMSMarkerAnimation.pop
marker.position = CLLocationCoordinate2D(latitude: latitude ?? 0, longitude: longitude ?? 0)
if (currentPOIModel?.placeName?.contains("db")) ?? false {
marker.icon = restaurantMarkerIcon(selected: false)
} else {
marker.icon = normalMarkerIcon(selected: false)
}
marker.map = googleMapsView
}
}
extension POILocatorViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
googleMapsView.selectedMarker = marker
googleMapsView.animate(toLocation: marker.position)
googleMapsView.selectedMarker?.icon = normalMarkerIcon(selected: true)
googleMapsView.selectedMarker?.icon = restaurantMarkerIcon(selected: true)
guard let markersModel = markersModel.filter({ $0.location?.coordinates?.latitude == marker.position.latitude && $0.location?.coordinates?.longitude == marker.position.longitude }).first else { return false }
coordinatorDelegate?.poiLocatorViewController(self, didTap: markersModel, currentLocation: currentLocation)
return true
}
}
extension POILocatorViewController {
func reloadMarker() {
googleMapsView.selectedMarker?.icon = normalMarkerIcon(selected: false)
googleMapsView.selectedMarker?.icon = restaurantMarkerIcon(selected: false)
googleMapsView.selectedMarker = nil
}
}

当您将标记添加到GMSMapView时,您可以使用其zIndex属性为GMSMarker分配唯一标识符来标识标记。

let marker = GMSMarker()
marker.appearAnimation = GMSMarkerAnimation.pop
marker.position = CLLocationCoordinate2D(latitude: latitude ?? 0, longitude: longitude ?? 0)
if (currentPOIModel?.placeName?.contains("db")) ?? false {
marker.icon = restaurantMarkerIcon(selected: false)
} else {
marker.icon = normalMarkerIcon(selected: false)
}
marker.zIndex = Int32(id) //your marker unique id
marker.map = googleMapsView

然后您可以在didTap方法中获取标记中标记唯一标识符,以设置不同的图像或根据标记执行其他操作

extension POILocatorViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
print("Marker Identifier = (marker.zIndex)") //Get your marker your unique identifier here.
return true
}
}

希望这对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新