我FBAnnotationClustering
在我的应用程序中使用 cocoa pod 库来进行集群。这种removeAllAnnotation
方法仅在 Objective-C 中可用,但在 swift 3 中不可用。所以我发布了 swift 版本来帮助像我这样的其他人。请在下面查看我自己的答案。
问问题
323 次
1 回答
1
FBClusteringManager.swift:
open func removeAnnotations() {
if tree == nil {
return
}
lock.lock()
for annotation: MKAnnotation in allAnnotations() {
tree!.remove(annotation)
}
lock.unlock()
}
FBQuadTree.swift
func remove(_ annotation: MKAnnotation) -> Bool {
return self.remove(annotation, from: rootNode!)
}
func remove(_ annotation: MKAnnotation, from node: FBQuadTreeNode) -> Bool {
if !FBQuadTreeNode.FBBoundingBoxContainsCoordinate(node.boundingBox!, coordinate: annotation.coordinate) {
return false
}
do {
if let index = node.annotations.index(where: {self.equate(lhs: $0, rhs: annotation)}) {
node.annotations.remove(at: index)
node.count -= 1
}
} catch {
return false
}
if let northEast = node.northEast {
if self.remove(annotation, from: northEast) {
return true
}
}
if let northWest = node.northWest {
if self.remove(annotation, from: northWest) {
return true
}
}
if let southEast = node.southEast {
if self.remove(annotation, from: southEast) {
return true
}
}
if let southWest = node.southWest {
if self.remove(annotation, from: southWest) {
return true
}
}
return false
}
func equate(lhs: MKAnnotation, rhs: MKAnnotation) -> Bool{
return lhs.coordinate.latitude == rhs.coordinate.latitude
&& lhs.coordinate.longitude == rhs.coordinate.longitude
}
于 2016-10-22T08:43:39.333 回答