MKPolygonRenderer создает различную визуальную ширину линии, используя одно и то же значение lineWidth - PullRequest
0 голосов
/ 21 марта 2020

Существует странное явление, если вы используете MKPolygonRenderer для визуализации многоугольника. Кажется, что он отображает разную ширину линии, используя одно и то же значение. Я знаю, что вы можете создать подкласс рендерера и переписать функцию, чтобы применить масштабирование следующим образом:

class CustomPolyline: MKPolylineRenderer {
    override func applyStrokeProperties(to context: CGContext, atZoomScale zoomScale: MKZoomScale) {
        super.applyStrokeProperties(to: context, atZoomScale: zoomScale)
        UIGraphicsPushContext(context)
        if let ctx = UIGraphicsGetCurrentContext() {
            ctx.setLineWidth(self.lineWidth)
        }
    }
} 

Но это не позволит мне создать линию с шириной линии, например 2.0 или 4.0. Все решения, которые вы найдете здесь в stackOverflow, по какой-то причине используют странные большие числа в качестве ширины линии.

Кто-нибудь знает, как это исправить?

Вот мой код для настройки рендер:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if let polygon = overlay as? MKPolygon, polygon != worldPolygon {
        let renderer = MKPolygonRenderer(polygon: polygon)
        renderer.strokeColor = Colors.secondary300.color
        renderer.lineWidth = 2
        return renderer
    } else if let polygon = overlay as? MKPolygon, polygon == worldPolygon {
        let renderer = MKPolygonRenderer(polygon: polygon)
        renderer.fillColor = Colors.anthracite.color.withAlphaComponent(0.3)
        return renderer
    }

    return MKOverlayRenderer()
}

Это визуальный вывод для разных полигонов:

enter image description here

enter image description here

...