Изменить цвет полилинии Swift Xcode - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь условно изменить цвет полилинии, но мне нужно проверить переменную, которая находится за пределами метода рендерера.Насколько я знаю, я не могу передать дополнительную переменную в метод рендерера.Предложения?

MKPolyline инициализируется в viewDidLoad() вместе с переменной x ниже - функция рендерера

extension ViewController {
  func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> 
  MKOverlayRenderer {
    if overlay is MKPolyline {

        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = UIColor.blue
        renderer.lineWidth = 3
        return renderer
    }
    return MKOverlayRenderer(overlay: overlay)
}

если x! = Y, тогда я хочу renderer.strokeColor = UIColor.green

1 Ответ

0 голосов
/ 20 февраля 2019

Если x и y являются свойствами вашего View Controller, вы можете ссылаться на них, как на любую переменную в методе рендерера:

extension ViewController {
  func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKPolyline {          
        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = x == y ? UIColor.blue : UIColor.green
        renderer.lineWidth = 3
        return renderer
    }
    return MKOverlayRenderer(overlay: overlay)
}

Если x и y являются конкретнымик каждому оверлею нужно подкласс MKPolyline:

class MyPolyline: MKPolyline {
    // Initialize them specific to your needds
    var x = 0
    var y = 0
}

extension ViewController {
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        guard let overlay = overlay as? MyPolyline else {
            return MKOverlayRenderer(overlay: overlay)
        }

        let renderer = MKPolylineRenderer(overlay: overlay)
        // You can also add a strokeColor as a computed property to the MyPolyline class
        renderer.strokeColor = overlay.x == overlay.y ? UIColor.blue : UIColor.green
        renderer.lineWidth = 3
        return renderer
    }
}
...