Вот мой код для реализации кластеризации.справа от первого шага. Пожалуйста, дайте мне знать, если есть какая-либо ошибка в приведенном ниже коде.
var clusterManager: GMUClusterManager?
var clusterItems : [POIItem] = []
func removeMarker(userId : Double){
for (index,item) in clusterItems.enumerated(){
if item.participantUserId == userId{
clusterItems.remove(at: index)
clusterManager?.remove(item)
}
}
clusterManager?.cluster()
}
Вот метод делегата для этого
func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) {
if let poiItem = marker.userData as? POIItem {
if participantImageView == nil{
participantImageView = RideParticipantsImageView.loadFromNibNamed(nibNamed: "RideParticipantImageView") as? RideParticipantsImageView
}
participantImageView!.participantImageView.image = poiItem.image
marker.icon = ViewCustomizationUtils.getImageFromView(view: participantImageView!)
for rideParticipantLocation in rideParticipantLocationObject{
if poiItem.participantUserId == rideParticipantLocation.userId!{
if isLocationUpdateExpired(ridePartcipantLocation: rideParticipantLocation){
marker.opacity = GoogleMapUtils.MARKER_HALF_OPACITY
}else{
marker.opacity = GoogleMapUtils.MARKER_FULL_OPACITY
}
}
}
marker.zIndex = 11
}
}
, но кластер необновление и получение изображения старого размера, а также нового размера для значка кластера.
class CustomizedCusterIconGenerator: GMUDefaultClusterIconGenerator{
var markerView: RideParticipantsCountView?
override func icon(forSize size: UInt) -> UIImage {
if size == 2{
let image = UIImage(named : "cluster_image1")
return image!
}
else if size == 3{
let image = UIImage(named : "cluster_image2")
return image!
}
else if size == 4{
let image = UIImage(named : "cluster_image3")
return image!
}
else if size == 5{
let image = UIImage(named : "cluster_image4")
return image!
}
else{
self.markerView = RideParticipantsCountView.loadFromNibNamed(nibNamed: "RideParticipantsCountView") as? RideParticipantsCountView
markerView?.setMarker(count: size)
UIGraphicsBeginImageContextWithOptions(markerView!.frame.size,false, 0)
markerView!.layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
}
, если что-то не так в коде выше.Пожалуйста помоги.