Вы можете использовать MKMapSnapshotter
. К сожалению, вам придется stroke
указать ваш путь вручную, используя point(for:)
для преобразования CLLocationCoordinate2D
в CGPoint
в MKMapSnapshotter.Snapshot
:
let options = MKMapSnapshotter.Options()
options.region = mapView.region
options.size = mapView.bounds.size
MKMapSnapshotter(options: options).start { snapshot, _ in
guard let snapshot = snapshot else { return }
let image = UIGraphicsImageRenderer(size: options.size).image { _ in
snapshot.image.draw(at: .zero)
let count = route.polyline.pointCount
let points = route.polyline.points()
guard count > 1 else { return }
let path = UIBezierPath()
path.move(to: snapshot.point(for: points[0].coordinate))
for i in 1 ..< count {
path.addLine(to: snapshot.point(for: points[i].coordinate))
}
path.lineWidth = 4
path.lineCapStyle = .round
path.lineJoinStyle = .round
UIColor.blue.withAlphaComponent(0.75).setStroke()
path.stroke()
}
guard let data = image.pngData() else { return }
// you can now write this `data` to persistent storage
}
То выходы:
![enter image description here](https://i.stack.imgur.com/jTLRa.jpg)
Теперь вышеприведенное, очевидно, просто поглаживает route.polyline
, связанный с MKDirections
результатом в одном UIBezierPath
, и вы будете перебирать свою модель, по-видимому, поглаживая каждую из этих разноцветных частей в отдельном UIBezierPath
, но, надеюсь, это иллюстрирует идею.