有很多不好的方法可以解决我想要做的事情,但这似乎是"必须有更好的方法"的案例之一.
我在一个显示许多注释的iPhone应用程序中使用MKMapView.假装概念性的讨论,美国各州的每个城镇都有一个注释,所以屏幕上有一堆相当密集的注释.当用户缩小地图时,这些注释开始彼此紧缩,直到它们重叠并变得难以单独挑选.
我想做的是,在特定的注释密度(比如当任何注释重叠时),将这些注释合并到一个注释中,表明它包含了许多子注释(一些视觉指示符,"放大")你会看到更多的注释").
我可以在注释视图上调用CGRectIntersectsRect,但使用它似乎是一个N ^ 2问题 - 我将不得不迭代每个注释的每个注释.考虑这个伪代码:
FOR firstAnnotationView IN allAnnotationViews
FOR secondAnnotationView in allAnnotationViews
IF CGRectIntersectsRect(firstAnnotationView.frame, secondAnnotationView.frame)
// found two overlapping annotations, consolidate them
ENDIF
ENDFOR
ENDFOR
你可以看到为什么这会很慢,每次放大或缩小地图都必须运行!
那么你们如何在地图中检测重叠注释,并以精通业绩的方式智能地整合它们?