使用MKPolylineRenderer创建mkmapsnapshot



我认为iOS 7的MKMapSnapshotter将是一个简单的方法来拍摄MKMapView的快照,好处是你可以做到这一点,而不需要加载地图到视图中。尽管添加引脚和覆盖看起来需要更多的工作(因为需要核心图形)。WWDC视频给出了一个添加MKAnnotationView创建MKMapSnapshotter的很好的例子。

然而,对于没有很多核心图形经验的人来说,如何从MKPolylineRenderer创建MKMapSnapshotter并不是很明显。

我已经尝试这样做了,但是路径不准确。它准确地画出了10%的直线,然后把其余的路径画直。

下面是我的代码:

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();
            }
}];

有没有人有一个很好的可行的例子,关于如何做到这一点,请?

刚刚遇到了同样的问题,下面的代码似乎可以工作:

UIImage * res = nil;
UIImage * image = snapshot.image;
UIGraphicsBeginImageContextWithOptions(image.size, YES, image.scale);
[image drawAtPoint:CGPointMake(0, 0)];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context,  [COLOR_FLASHBLUE CGColor]);
CGContextSetLineWidth(context,2.0f);
CGContextBeginPath(context);
CLLocationCoordinate2D coordinates[[polyline pointCount]];
[polyline getCoordinates:coordinates range:NSMakeRange(0, [polyline pointCount])];
for(int i=0;i<[polyline pointCount];i++)
{
    CGPoint point = [snapshot pointForCoordinate:coordinates[i]];
    if(i==0)
    {
        CGContextMoveToPoint(context,point.x, point.y);
    }
    else{
        CGContextAddLineToPoint(context,point.x, point.y);
    }
}
CGContextStrokePath(context);
res = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

相关内容

  • 没有找到相关文章