在CALayer中绘制的UIImage太模糊了

Dar*_*loc 2 iphone calayer uiview uiimage

我遇到了一些问题,我在CALayer中绘制UIImage以显示它没有它的模糊性.我将400x300px图像放入123x89 CALayer中.这个尺度应该意味着得到的CALayer相对比较尖锐,但事实并非如此.

这是我用来绘制UIImage的代码:

    CGSize s = image.size;
    CGRect r = CGRectInset (bounds, 8, 8);
    CGFloat scale = MIN (r.size.width / s.width, r.size.height / s.height);
    s.width *= scale; s.height *= scale;
    r.origin.x += (r.size.width - s.width) * .5;
    r.size.width = s.width;
    r.origin.y += (r.size.height - s.height) * .5;
    r.size.height = s.height;

    CGContextSaveGState (ctx);
    CGContextTranslateCTM (ctx, 0, bounds.size.height);
    CGContextScaleCTM (ctx, 1, -1);

    if (image != nil) {
        CGContextDrawImage (ctx, r, image.CGImage);
    }

    CGContextRestoreGState (ctx);
Run Code Online (Sandbox Code Playgroud)

如果您遇到同样的问题或知道这个问题的解决方案,任何帮助将不胜感激.

谢谢,

约书亚李塔克.

Ben*_*Ben 9

为什么不将CALayer contents属性设置为CGImageRef并使用contentsGravity属性来定义缩放?您可以通过CALayer框架或边界控制大小.

myLayer.contentsGravity = kCAGravityResizeAspect;
myLayer.contents = (id) [myImage CGImage];
Run Code Online (Sandbox Code Playgroud)


Bre*_*eno 5

不要忘记在CALayer上设置contentsScale值,否则您可能会发现CGImage在视网膜边界之外延伸到视网膜设备的正常尺寸的2倍.出于某种原因,CALayers上的默认比例始终为1.0,即使在Retina设备上也是如此.

layer.contentsScale = [UIScreen mainScreen].scale;
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用CAShapeLayer绘制形状并想知道其边缘在视网膜设备上看起来有点锯齿,请尝试:

shapeLayer.rasterizationScale = [UIScreen mainScreen].scale;
shapeLayer.shouldRasterize = YES;
Run Code Online (Sandbox Code Playgroud)