Yapmak istediklerim hakkında bazı kötü yollar vardır, ancak bu "daha iyi bir yol olmalı" gibi durumlardan biri gibi görünüyor.Yakınlaştırılmış bir MKMapView üzerinde ek açıklamaları konsolide edin
Bir iPhone uygulamasında bir takım ek açıklamaları görüntüleyen bir MKMapView kullanıyorum. Bir ABD eyaletindeki her kasabanın bir ek açıklamasına sahip olduğu kavramsal tartışmayı varsayın, bu nedenle ekranda çok yoğun bir ek not yığını var. Kullanıcı haritayı yakınlaştırdıkça, bu açıklamaların üst üste gelmesine ve birbirini seçmeye zorlanıncaya kadar birbiri içine girmeye başlar.
Yapmak istediğim şey, ek açıklamaların belirli bir yoğunluğuna (herhangi bir ek açıklamaların çakıştığı zaman söyleyin), bu ek açıklamaları bir dizi alt ek açıklamalar içeren tek bir ek açıklamada birleştirin (bazı görsel göstergeler için söyleyin) , "yakınlaştırın ve daha fazla ek açıklama göreceksiniz").
ben açıklama görünümlerinde CGRectIntersectsRect diyebiliriz, ama bu kullanarak bir N^2 sorunu olarak görünecektir - Ben her ek açıklamadan için her ek açıklamadan üzerinde yineleme gerekir. Bu pseudocode düşünün:
FOR firstAnnotationView IN allAnnotationViews FOR secondAnnotationView in allAnnotationViews IF CGRectIntersectsRect(firstAnnotationView.frame, secondAnnotationView.frame) // found two overlapping annotations, consolidate them ENDIF ENDFOR ENDFOR
Bunu yavaş olacağını neden görebilirsiniz ve bu harita veya dışarı yakınlaştırılmış her zaman çalıştırmak zorunda kalacak!
Haritadaki örtüşen ek açıklamaları nasıl algılayacaksınız ve performans konusunda bilinçli bir şekilde bunları akıllı bir şekilde birleştirin?
arama alanını düşünün. Dış döngüdeki tüm ek açıklamaları dikkate almak gerekli mi? Şu anda incelenen ek açıklamaları değerlendirmek ne dersiniz? –