Istnieje wiele złych sposobów, aby poradzić sobie z tym, co chcę zrobić, ale wydaje się, że jeden z tych przypadków "musi być lepszy sposób".Skonsoliduj adnotacje na powiększonym MKMapView
Używam MKMapView w aplikacji na iPhone'a wyświetlającej wiele adnotacji. Udawaj, że każda miejscowość w amerykańskim stanie ma adnotację, więc na ekranie jest dość gęsta kupka adnotacji. Gdy użytkownik pomniejsza mapę, te adnotacje zaczynają się wzajemnie zaciskać, dopóki nie nakładają się na siebie i stają się trudne do oddzielenia.
Chciałbym, aby w przypadku gęstości adnotacji (np. Gdy adnotacje nakładają się), skonsoliduj te adnotacje w jedną adnotację, która wskazuje, że zawiera wiele sub-adnotacji (niektóre wskaźniki wizualne do powiedzenia , "powiększ i zobaczysz więcej adnotacji").
Mogę wywołać CGRectIntersectsRect w widokach adnotacji, ale używając tego problemu wydaje się być N^2 - musiałbym iterować nad każdą adnotacją dla każdej adnotacji. Rozważmy to Pseudokod:
FOR firstAnnotationView IN allAnnotationViews FOR secondAnnotationView in allAnnotationViews IF CGRectIntersectsRect(firstAnnotationView.frame, secondAnnotationView.frame) // found two overlapping annotations, consolidate them ENDIF ENDFOR ENDFOR
Można zrozumieć, dlaczego to byłoby powolne, a to trzeba uruchomić za każdym razem, gdy mapa została powiększać lub na zewnątrz!
Jak można wykryć nakładające się adnotacje na mapie i inteligentnie je konsolidować?
Zastanów się przestrzeń poszukiwań. Czy konieczne jest uwzględnienie wszystkich adnotacji w zewnętrznej pętli? A co z prostą oceną aktualnie oglądanych adnotacji? –