Изменение цвета MKOverlay, который уже был добавлен в mapview

У меня есть некоторые MKOverlays (на самом деле это MKPolygons), которые загружаются, как только появляется карта. Я хотел бы изменить их цвет динамически. Единственный способ, которым я могу это сделать, - удалить наложение, а затем добавить его обратно с новым цветом. Есть ли лучший способ сделать это на существующем наложении?

Я совершенно новый в objective-c/xcode / ios ... поэтому, пожалуйста, будьте нежны:)

2 ответов


важно помнить, что большая часть MapKit имеет разные объекты (MKPolygon, MKCircle, MKShape) для хранения данных, связанных с рисованием вида (MKPolygonView, MKCircleView, MKOverlayView и т. д.) Во многих случаях вы хотите получить ссылку на объект view, чтобы затем установить цвет фона. т. е.

MKOverlayView *anOverlay;  //You need to set this view to the object you are interested in
anOverlay.backgroundColor = [UIColor redColor]; 
[anOverlay setNeedsDisplay];

Если ваш объект является MKPolygon, вы должны определить MKPolygonView он обращается в затем установить свойство fillColor и перерисовать объект с помощью вызов setNeedsDisplay:

MKPolygonView *theView;
theView.fillColor = [UIColor redColor];
[theView setNeedsDisplay];

в вашем mapView есть метод получения объекта визуализации для данного наложения. Затем вы можете использовать визуализатор для изменения цвета наложения.

if let renderer = mapView.rendererForOverlay(overlay) as? MKPolygonRenderer {
    renderer.fillColor = UIColor.redColor()
}

оставьте необязательное приведение в MKPolygonRenderer, если вы не ищете наложение MKPolygon.

(Я понимаю, что это довольно старый вопрос, но я просто наткнулся на него и нашел свое решение)