我正在为一个MKMapOverlayView创建的CGContext执行一些CG绘图操作。在将图形绘制到自己的上下文中后,我会创建一个图片并将其粘贴到MapKit提供的上下文中。
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
CGColorSpaceRef colorRef = CGColorSpaceCreateDeviceRGB();
CGContextRef myContext = CGBitmapContextCreate(NULL, kTileSize, kTileSize, 8, 0, colorRef, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorRef);
CGContextSetAllowsAntialiasing(myContext, TRUE);
//...cut out drawing operations...
CGImageRef image = CGBitmapContextCreateImage(myContext);
CGContextDrawImage(context, [self rectForMapRect:mapRect], image);
CGImageRelease(image);
CGContextRelease(myContext);
}
有没有一种简单地将myContext
复制到context
而不必创建图像的方法?我知道你们中的一些人会说:“为什么不直接在MapKit提供的上下文中绘制呢?”不幸的是,当直接渲染到
context
时,我们遇到了绘制故障。苹果公司正在为我们调查此问题,但与此同时,我们需要找到一个解决方法。我上面提出的这种解决方法是我的“最佳”方法,但速度有点慢。P.S. 我已经开始发起奖励了,因为我也在寻找答案。具体来说,我针对的是OS X。因此答案应该在那里有效。OP正在寻找iOS上的答案。
CGFloat
是一个double
,但是当渲染地图瓦片的非常小的变化时,大整数和更大的分数仍会引入足够的抖动。 - Tim Reddy