如何使用 Google Cluster Manager 自定义默认引脚标记?
Posted
技术标签:
【中文标题】如何使用 Google Cluster Manager 自定义默认引脚标记?【英文标题】:How to customize default pin marker using Google Cluster Manager? 【发布时间】:2019-08-26 13:15:28 【问题描述】:如何使用 Google 集群管理器自定义默认的 NOT CLUSTER,但红色 pin 标记?周围有一些类似的问题,但没有有效的答案。 当我使用:
func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker)
marker.icon = UIImage(named: "my_marker")
marker.setIconSize(scaledToSize: .init(width: 18, height: 24))
它也可以自定义集群和图标。如何只自定义 pin 标记而不是集群标记?
【问题讨论】:
【参考方案1】:marker
有一个属性iconView
,它是一个 UIView。由于它是 UIView,因此您可以根据需要进行自定义。
func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker)
marker.iconView = MyView()
【讨论】:
效果与使用“icon”属性相同——集群图像和pin标记图像是iconView。我想要集群的默认标记和我的自定义图像 pin 标记 - 摆脱默认的红色 pin google 标记。如何区分它们? 在您的didRenderMarker
中检查marker.userData
是否为GMUStaticCluster
类型。如果是,那么您知道它是一个集群标记。然后你可以相应地切换你的标记视图。
我已经在willRenderMarker
中完成了。就是这样,谢谢!【参考方案2】:
在 Swift 5 中工作
class POIItem: NSObject, GMUClusterItem
var position: CLLocationCoordinate2D
var name: String!
var icon: UIImage
init(position: CLLocationCoordinate2D, name: String, icon: UIImage)
self.position = position
self.name = name
self.icon = icon
class PrincipalViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
self.google_map.clear()
let iconGenerator = GMUDefaultClusterIconGenerator()
let algorithm = GMUNonHierarchicalDistanceBasedAlgorithm()
let renderer = GMUDefaultClusterRenderer(mapView: self.google_map, clusterIconGenerator: iconGenerator)
renderer.delegate = self
self.clusterManager = GMUClusterManager(map: self.google_map, algorithm: algorithm, renderer: renderer)
self.clusterManager.setDelegate(self, mapDelegate: self)
//insert your markers type POIItem
//self.clusterManager.add(item)
self.clusterManager.cluster()
extension PrincipalViewController: GMUClusterRendererDelegate
func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker)
if marker.userData is POIItem
if let item = marker.userData as? POIItem
marker.icon = item.icon
marker.title = item.name
if marker.userData is GMUStaticCluster
if let staticCluster = marker.userData as? GMUStaticCluster
//this is a custom UIView (.xib) contain a UIImage with custom marker and one label (countLabel) where show number of grouped markers
let customClusterMarker:CustomClusterMarker = CustomClusterMarker()
customClusterMarker.countLabel.text = "\(staticCluster.count)"
let view = UIView(frame: CGRect(x: 0, y: 0, width: 52, height: 70))
view.addSubview(customClusterMarker)
marker.iconView = view
extension PrincipalViewController: GMUClusterManagerDelegate
func clusterManager(_ clusterManager: GMUClusterManager, didTap clusterItem: GMUClusterItem) -> Bool
print("didTap clusterItem")
return true
func clusterManager(_ clusterManager: GMUClusterManager, didTap cluster: GMUCluster) -> Bool
print("didTap cluster")
return true
【讨论】:
以上是关于如何使用 Google Cluster Manager 自定义默认引脚标记?的主要内容,如果未能解决你的问题,请参考以下文章
Terraform data.google_container_cluster.cluster.endpoint 为空
在 google dataproc 上执行 hive 作业时如何使用参数/属性标志值
#云原生征文# 在 Google Kubernetes Cluster 上使用 HANA Expression Database Service