Как получить видимые оверлеи в 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)
}
}