我正在开发一个iOS swift应用程序,该应用程序将图像显示为地图上的注释。当多个注释重叠时,它们应聚在一起,而不是显示为图像之一。
苹果提供的群集有时无法正常工作。缩小并多次放大时,图像可能会重叠很多。
它应该是这样的:
出现错误时的外观如下:
我已将示例视频上传到Youtube(https://youtu.be/kaI0bTS8_HY)
有关实现的一些详细信息:
我正在使用专门的MKAnnotationView:
class PhotoAnnotationView: MKAnnotationView {
let annotationWidth = 100
var imageView = UIImageView()
override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
clusteringIdentifier = "LocatedPhoto"
collisionMode = .circle
addSubview(imageView)
imageView.frame = annotationFrame
frame = annotationFrame
}
var annotationFrame: CGRect {
return CGRect(x: 0, y: 0, width: annotationWidth, height: annotationWidth)
}
override var annotation: MKAnnotation? {
willSet {
if let annotation = newValue as? PhotoAnnotation {
let url = annotation.locatedPhoto.thumbnailURL
let displayLocation = annotation.displayLocation
setImage(url: url)
}
}
}
func setImage(url: URL) {
//...
}
}
MapViewController注册此注释类型以显示注释:
mapView.register(PhotoAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
省略,因为我认为这不是问题的根源: -MKClusterView(常规ClusterView中也存在此错误) -将注释添加到地图视图
此问题的根源是什么?
答案 0 :(得分:0)
在PhotoAnnotationView
中,您的annotation
观察者应重置clusteringIdentifier
:
override var annotation: MKAnnotation? {
willSet {
if let annotation = newValue as? PhotoAnnotation {
clusteringIdentifier = "LocatedPhoto" // make sure to reset this
let url = annotation.locatedPhoto.thumbnailURL
let displayLocation = annotation.displayLocation
setImage(url: url)
}
}
}
随着它们出队和重复使用,clusteringIdentifier
可以被清除。再次进行设置,可以确保仍然可以进行群集。