Ich brauche vor allem eine MKPolyline
in einem UIImage
ohne die Verwendung eines MKMapView
, wenn möglich (für Leistungen Gründen zu machen, möchte ich so schnell wie möglich den Weg anzuzeigen, während die Karte screenshotter asynchron die liefert Karte, wie die App Strava).Render eine MKPolyline in einem UIImage
kam ich mit diesem Stück Code oben:
func pathImageForSize(size: CGSize) -> UIImage {
let region = regionForPath() // MKCoordinateRegion
let coordinates = locations.map { $0.coordinate }
UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
CGContextSetStrokeColorWithColor(context, UIColor.palette_mainColor().CGColor)
CGContextSetLineWidth(context, 4.0)
CGContextBeginPath(context)
let origin = CGPoint(x: region.center.latitude - region.span.latitudeDelta/2, y: region.center.longitude - region.span.longitudeDelta/2)
for (index, coordinate) in coordinates.enumerate() {
let point = CGPoint(x: ((CGFloat(coordinate.latitude) - origin.x)/CGFloat(region.span.latitudeDelta)) * size.width,
y: ((CGFloat(coordinate.longitude) - origin.y)/CGFloat(region.span.longitudeDelta)) * size.height)
if index == 0 {
CGContextMoveToPoint(context, point.x, point.y)
} else {
CGContextAddLineToPoint(context, point.x, point.y)
}
}
CGContextStrokePath(context)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
Der Code neu skaliert im Grunde die Koordinaten und zieht sie mit Core Graphics. Der Weg ist gezeichnet, aber es wird auch um 90 Grad gedreht, wie Sie hier sehen können:
Linienzug durch meinen Code gemacht:
Jede Idee, was mache ich falsch?
Für glatte Kurven Sie bei der so genannten 'miterLimit' aussehen wollen könnte, die Sie über' CGContextSetMiterLimit' offenbar einstellen. – luk2302