Crear un MKMapSnapshotter con un MKPolylineRenderer
Pensé que iOS 7MKMapSnapshotter
s sería una manera simple de tomar una instantánea de unMKMapView
, el beneficio es que puede hacerlo sin cargar el mapa a la vista. Aunque parece más trabajo agregar pines y superposiciones (debido a la necesidad de gráficos centrales). Los videos de la WWDC dan un muy buen ejemplo de cómo crear unMKMapSnapshotter
con la adición de unMKAnnotationView
.
Sin embargo, para alguien con poca experiencia en gráficos básicos, no es realmente obvio cómo se crea unMKMapSnapshotter
desde unMKPolylineRenderer
.
He intentado hacer esto, pero el camino es inexacto. Dibuja aproximadamente el 10% de la línea con precisión, pero luego dibuja el resto del camino en línea recta.
Aquí está mi código:
MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:snapshotOptions];
[snapshotter startWithQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
completionHandler:^(MKMapSnapshot *snapshot, NSError *error)
{
if (error == nil)
{
UIImage *mapSnapshot = [snapshot image];
UIGraphicsBeginImageContextWithOptions(mapSnapshot.size,
YES,
mapSnapshot.scale);
[mapSnapshot drawAtPoint:CGPointMake(0.0f, 0.0f)];
CGContextRef context = UIGraphicsGetCurrentContext();
//Draw the points from the MKPolylineRenderer in core graphics for mapsnapshotter...
MKPolylineRenderer *overlay = (MKPolylineRenderer *)[self.mapView rendererForOverlay:[_mapView.overlays lastObject]];
if (overlay.path)
{
CGFloat zoomScale = 3.0;
[overlay applyStrokePropertiesToContext:context
atZoomScale:zoomScale];
CGContextAddPath(context, overlay.path);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextStrokePath(context);
}
UIImage *pathImage = UIGraphicsGetImageFromCurrentImageContext();
[map addMapIcon:pathImage];
UIGraphicsEndImageContext();
}
}];
¿Alguien tiene un buen ejemplo viable sobre cómo hacer esto, por favor?