Criando um MKMapSnapshotter com um MKPolylineRenderer

Pensei em iOS 7MKMapSnapshotters seria uma maneira simples de tirar uma foto de umMKMapView, o benefício é que você pode fazer isso sem carregar o mapa na visualização. Embora pareça mais trabalhoso adicionar pinos e sobreposições (devido à necessidade de gráficos principais). Os vídeos da WWDC dão um bom exemplo de criação de umMKMapSnapshotter com a adição de umMKAnnotationView.

No entanto, para alguém com pouca experiência gráfica principal, não é realmente óbvio como você cria umMKMapSnapshotter de umMKPolylineRenderer.

Eu tentei fazer isso, mas o caminho é impreciso. Desenha cerca de 10% da linha com precisão, mas depois desenha o restante do caminho reto.

Aqui está o meu 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();
            }
}];

Alguém tem um bom exemplo viável de como fazer isso, por favor?

questionAnswers(1)

yourAnswerToTheQuestion