ant*_*kes 9 core-graphics ios retina-display
在我的iOS应用程序中,我正在尝试使用CoreGraphics绘制曲线.绘图本身工作正常,但在视网膜显示器上,图像使用相同的分辨率绘制,并且不会使像素加倍.结果是像素化图像.
我正在使用以下功能绘图:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.canvasView];
UIGraphicsBeginImageContext(self.canvasView.frame.size);
[canvasView.image drawInRect:self.canvasView.frame];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetShouldAntialias(ctx, YES);
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineWidth(ctx, 5.0);
CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(ctx, currentPoint.x, currentPoint.y);
CGContextStrokePath(ctx);
canvasView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastPoint = currentPoint;
// some code omitted from this example
}
Run Code Online (Sandbox Code Playgroud)
我发现的建议是使用scaleFactor属性或CGContextSetShouldAntialias()函数,但到目前为止这些都没有帮助.(虽然我可能不恰当地使用它们.)
任何帮助将不胜感激.
Evg*_*kov 28
你需要替换UIGraphicsBeginImageContext
if (UIGraphicsBeginImageContextWithOptions != NULL) {
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
} else {
UIGraphicsBeginImageContext(size);
}
Run Code Online (Sandbox Code Playgroud)
UIGraphicsBeginImageContextWithOptions是在4.x软件中引入的.如果您要在3.x设备上运行此代码,则需要弱链接UIKit框架.如果您的部署目标是4.x或更高,则可以使用UIGraphicsBeginImageContextWithOptions而无需任何其他检查.
| 归档时间: |
|
| 查看次数: |
4677 次 |
| 最近记录: |