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

#objective-c #ios4 #xcode4 #mapkit

#цель-c #ios4 #xcode4 #mapkit #objective-c

Вопрос:

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

Я совершенно новичок в objective-c / xcode / ios… так что, пожалуйста, будьте нежны 🙂

Ответ №1:

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

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

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

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

Комментарии:

1. Теперь это правильный ответ, поскольку я полагаю, что iOS 7

2. разве вы не должны каким-то образом отображать измененный цвет? возможно, необходимо отобразить renderer.set

3. @Spire Да, это всего лишь фрагмент для настройки цвета, делайте все, что необходимо в вашем контексте, чтобы затем обновить пользовательский интерфейс.

Ответ №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];
  

Комментарии:

1. Это сработало отлично! Спасибо, Чип! и оставайтесь с нами, поскольку в будущем у меня появится множество вопросов для новичков в ios 🙂