Как получить видимые оверлеи в MapKit? (т.е. MKOverlay/MKOverlayRender от Mapkit Ivew)

Как получить список (массив) видимых в настоящее время оверлеев из MapkitView?

Фон - например, я хочу показать стрелки направления к центру определенных типов наложения в моем mapkitview, однако как мне получить видимые? Кажется, нет никакого способа сделать это, я вижу? Так что мне нужно пройти через все оверлеи (на самом деле ~8000) и сделать свою собственную проверку, чтобы увидеть, что будет отображаться на экране? Кажется пустой тратой, если MapKit уже эффективно сделал бы это как часть решения о том, какие оверлеи должны отображаться в данный момент времени.

1 ответ

Я возился с некоторыми подобными проблемами, и самый эффективный способ, который я мог выяснить, - это добавить оверлеи в качестве аннотаций, так как MKOverlay инвентарь MKAnnotation, Тогда вы сможете использовать annotationsInMapRect для отображаемой в данный момент mapRect. Однако это также вернет все обычные примечания MKA и использует только вычисленную середину наложения. Единственный способ (насколько я понял) получить только оверлеи - это перебрать каждый оверлей и использовать:

-(BOOL)intersectsMapRect:(MKMapRect)mapRect;

на видимой в данный момент карте Rect. Если бы вы нашли другой способ, я был бы рад услышать!

Для всех, кто ищет что-то в Swift и хочет что-то в Swift, как говорили другие, вы можете использовать:

let map = MKMapView()
let arrayOfOverlays : [MKOverlay] = []

for overlay in map.overlays {

    if overlay.boundingMapRect.intersects(map.visibleMapRect) {
        arrayOfOverlays.append(overlay)
    }

}
Другие вопросы по тегам