如何使用Google Cluster Manager自定义默认的标记图钉?

3
如何使用Google Cluster Manager自定义默认的红色标记,而非集群标记?周围有一些类似的问题,但没有可行的答案。当我使用以下代码时:
func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) {

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

}

它可以自定义集群和图标。如何仅自定义引脚标记而不是集群标记?
2个回答

1

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

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

效果与使用“icon”属性相同 - 群集图像和标记图像都是iconView。我想要默认的群集标记和我的自定义图像标记 - 以摆脱默认的红色标记谷歌标记。如何区分它们? - Andrew V. Jackson
1
在你的 didRenderMarker 中检查 marker.userData 是否为类型 GMUStaticCluster。如果是,则知道它是一个聚类标记。然后,您可以相应地切换标记视图。 - u54r
我已经在 willRenderMarker 中完成了它。就这样,谢谢! - Andrew V. Jackson

0

适用于Swift 5

enter image description here

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
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接