Существует странное явление, если вы используете 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()
}
Это визуальный вывод для разных полигонов: