Swift - настроить более одного fillColor в MKCircle - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь изменить MKCircle fillColor, когда тип маркера отличается. Например, если markerType - «аэропорт», то заливка должна быть красной, а если это «База морских самолетов», то заливка должна быть черной.

// MARK: Radius overlay
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKCircle {
        let circle = MKCircleRenderer(overlay: overlay)

        for markerType in airports {
            if markerType.markerType == "airport" {
                circle.strokeColor = UIColor.red
                circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1)
                circle.lineWidth = 1
            } else {
                circle.strokeColor = UIColor.black
                circle.fillColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1)
                circle.lineWidth = 1
            }
        }

        return circle
    } else {
        return MKPolylineRenderer()
    }
}

Я использую эту функцию, чтобы показать радиус.

func mainAirportRadius(radius: CLLocationDistance) {
    //MARK: Airport location
    for coordinate in airports {
        let center = coordinate.coordinate
        let circle = MKCircle(center: center, radius: radius)
        mapView.add(circle)
    }
}

Тогда я вызываю это в viewDidLoad методе

mainAirportRadius(radius: 8046.72)

1 Ответ

0 голосов
/ 14 сентября 2018

Это мое первое приближение решения вашей проблемы.

Первая проблема заключается в том, что airports представляется глобальным списком или другой глобальной итерируемой.При любом вызове mapView он будет генерировать circle и выполнять итерацию по airports, изменяя атрибуты circle один раз для каждого элемента в airports.То есть, вы будете видеть одно и то же поведение каждый раз, когда вызывается mapView.

Что вы должны сделать, это сначала обновить определение вашей функции, включив в нее markerType и remove итерацию:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay, markerType: String) -> MKOverlayRenderer {

    if overlay is MKCircle {

        let circle = MKCircleRenderer(overlay: overlay)

        if markerType == "airport" {
            circle.strokeColor = UIColor.red
            circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1)
            circle.lineWidth = 1
        } else {
            circle.strokeColor = UIColor.black
            circle.fillColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1)
            circle.lineWidth = 1
        }

        return circle
    } else {
        return MKPolylineRenderer()
    }
}

Затем, по вызову mapView, введите маркер этого аэропортаТип:

mapView.add(circle,coordinate.markerType)
...