Существует много плохих способов пойти о том, что я хочу сделать, но это походит на один из тех случаев "должен быть лучший путь".
Я использую MKMapView в приложении для iPhone, которое отображает много аннотаций. Притворитесь для концептуального обсуждения, что каждый город в штате США имеет аннотацию, таким образом, существует довольно плотная груда аннотаций на экране. Поскольку пользователь уменьшает карту, те аннотации начинают уплотнять в друг на друге, пока они не накладываются и становятся твердыми выбрать индивидуально.
То, что я хотел бы сделать, в особой плотности аннотаций (скажите, когда любые аннотации накладываются), консолидируйте те аннотации в единственную аннотацию, которая указывает, что включает много поданнотаций (некоторый визуальный индикатор для высказывания, "увеличьте масштаб, и Вы будете видеть больше аннотаций").
Я мог назвать 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
Вы видите, почему это было бы медленно, и это должно будет работать каждый раз, когда карта была увеличена или!
Таким образом, как Вы все обнаружили бы перекрывающиеся аннотации в карте, и опытным производительностью способом, консолидируйте их разумно?