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)
如果您遇到同样的问题或知道这个问题的解决方案,任何帮助将不胜感激.
谢谢,
约书亚李塔克.
为什么不将CALayer contents属性设置为CGImageRef并使用contentsGravity属性来定义缩放?您可以通过CALayer框架或边界控制大小.
myLayer.contentsGravity = kCAGravityResizeAspect;
myLayer.contents = (id) [myImage CGImage];
Run Code Online (Sandbox Code Playgroud)
不要忘记在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)
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |