#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 🙂