如何使用 Google 集群管理器自定义默认引脚标记?

How to customize default pin marker using Google Cluster Manager?

如何使用 Google 集群管理器自定义默认的非集群,而是红色针标记?周围有一些类似的问题,但没有有效的答案。 当我使用:

func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) {

        marker.icon = UIImage(named: "my_marker")
        marker.setIconSize(scaledToSize: .init(width: 18, height: 24))

}

它也可以自定义集群和图标。如何只自定义图钉标记而不是集群标记?

marker 有一个 属性 iconView 这是一个 UIView。由于它是一个 UIView,因此您可以根据需要进行自定义。

func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) {
    marker.iconView = MyView()
}

作品在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
     }
}