【发布时间】:2011-08-05 15:41:12
【问题描述】:
我正在为 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 时遇到了绘图故障。 Apple 目前正在为我们调查此问题,但与此同时,我们需要找到解决方法。我在上面介绍的这种解决方法是我的“最佳”方法,但它有点慢。
P.S.我已经开始赏金了,因为我也在这里寻找答案。具体来说,我的目标是 OS X。所以答案应该在那里工作。 OP 正在 iOS 上寻找答案。
【问题讨论】:
-
您找到解决问题的合适方法了吗?我现在面临同样的问题...
-
不幸的是,没有...尽管
CGFloat在 64 位 iOS 设备上是double,但在呈现非常小的更改时,较大的整数甚至更大的分数仍然会引入足够的抖动到地图图块。
标签: objective-c swift core-graphics cgcontext