Google 为点击和未选择状态映射不同的标记图像
Google Maps different marker images for tapped and unselected state
有没有办法添加 ID、案例或类似的东西,以便为选中和未选中状态设置自定义标记图像?
我有多个不同 names/title 的标记,我需要特定类型的标记有另一个用于选择和未选择状态的图像。
例如:
标记 1 - marker_1_image
标记 2 - marker_2_image
Atm 我只能用正确的图像设置 2 个图像,但如果我单击一个标记,它将继承在“.contains”函数上设置的特定类型。
我做了一个“.contains”函数,以便在 POI/location 名称下的 JSON 响应中找到特定的字符串。例如:currentAtmModel?.placeName?.contains("restaurant"),因此名称为 "restaurant" 的标记将以特定的图标图像显示。
我正在为 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({ [=11=].location?.coordinates?.latitude == marker.position.latitude && [=11=].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
时,您可以为 GMSMarker
分配一个唯一标识符,使用它的 zIndex
属性 来识别标记。
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
方法中获取marker中的marker唯一标识,用于设置不同的图片或者根据marker进行其他操作
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
}
}
希望对您有所帮助。
有没有办法添加 ID、案例或类似的东西,以便为选中和未选中状态设置自定义标记图像?
我有多个不同 names/title 的标记,我需要特定类型的标记有另一个用于选择和未选择状态的图像。
例如:
标记 1 - marker_1_image
标记 2 - marker_2_image
Atm 我只能用正确的图像设置 2 个图像,但如果我单击一个标记,它将继承在“.contains”函数上设置的特定类型。 我做了一个“.contains”函数,以便在 POI/location 名称下的 JSON 响应中找到特定的字符串。例如:currentAtmModel?.placeName?.contains("restaurant"),因此名称为 "restaurant" 的标记将以特定的图标图像显示。
我正在为 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({ [=11=].location?.coordinates?.latitude == marker.position.latitude && [=11=].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
时,您可以为 GMSMarker
分配一个唯一标识符,使用它的 zIndex
属性 来识别标记。
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
方法中获取marker中的marker唯一标识,用于设置不同的图片或者根据marker进行其他操作
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
}
}
希望对您有所帮助。