使用下面的代码,CGContextDrawImage()绘制的图层质量低于原始显示图层。图像中的某些行别名。
这是我的代码
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
CGContextSaveGState(ctx);
UIGraphicsBeginImageContext(layer.bounds.size);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetShouldAntialias(c, YES);
CGContextSetAllowsAntialiasing(c, YES);
CGContextSetInterpolationQuality(c, kCGInterpolationHigh);
[self.view.layer renderInContext:c];
CGImageRef image = CGBitmapContextCreateImage(c);
UIGraphicsEndImageContext();
CGImageRef flipImage = CGImageCreateWithImageInRect(image, layer.bounds);
CGContextTranslateCTM(ctx, 0, layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0f, -1.0f);
CGContextSetShouldAntialias(ctx, YES);
CGContextSetAllowsAntialiasing(ctx, YES);
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
CGContextDrawImage(ctx, layer.bounds, flipImage);
CGContextRestoreGState(ctx);
LogMessage(@"drawLayer", 1, @"draw layer content");
}
更新1
drawLayer:
中绘制的图层与屏幕大小不同。
我想将屏幕切成碎片,然后将动画应用到它们。
原始图层:
绘制图层:
答案 0 :(得分:0)
为什么要首先打开图像上下文?直接绘制到作为第二个方法参数传递的层ctx
上下文。
此外,您需要将图层的contentsScale
属性设置为[UIScreen mainScreen].scale
。
要使用正确的设备比例绘制图像(在您的示例中不需要),请使用:
void UIGraphicsBeginImageContextWithOptions(
CGSize size,
BOOL opaque,
CGFloat scale // pass 0 to use screen scale
);
PS:截至目前,我真的看不出你想要用你的代码完成什么!