Core Animation - 寄宿图<一>

  1. contents
    寄宿图如其名,它本身并不是这一块的,只是被放在这里寄宿的。在Core Animation中CALayer有一个属性叫做contents,它被定义为id类型,意味着contends可以是任何类型的对象,但除非我们给contents赋CGImage类型的值,否则得到的将是一片空白。
    但是我们并不能直接给contents赋值,Core Foundation和Cocoa的类型不能够兼容,所以我们需要对赋值的image做一个类型转化,上一篇博客中我们创建了一个简单的CALayer项目,现在我们往工程中加入一张图片,并赋值给contents,如下:
layer.contents = (__bridge id)image.CGImage;

此处UIImage有一个CGImage属性,它返回一个CGImageRef类型,直接赋值的话编辑器会报错,因为它不是一个Cocoa对象,而是一个Core Foundation类型,所以才有了上面的转化。

2.contentGravity
在视图中我们叫做contentModel,而在图层中,我们叫做contentGravity,它的作用是调整图片的比例,因为我们加载的图片有时候并不是很合适这个图层或者视图,所以这会导致图片变形,那么为了很好的解决这个问题我们用contentGravity或者contentModel来对图片做一些调整:
在view中

 view.contentMode = UIViewContentModeScaleAspectFit;

在CALayer中

self.layerView.layer.contentsGravity = kCAGravityResizeAspect;

这是一个枚举,它还有其他的值可以设置,大家可以自己在工程里面查看。

3.contentsScale
contentsScale是寄宿图的像素尺寸和视图大小的比例,默认为1.0,当这个属性设置为1.0的时候代表每个点为一个像素绘制图片,当为2.0的时候代表每个点为两个像素绘制图片。在我们开发中,经常会用到一倍图,二倍图,甚至三倍图,说的其实就是这个。它的作用是拉伸图片以适应图层,并不会考虑到分辨率的问题,所以设置太高图片就会显示颗粒状,在使用UIImage设置图片的时候,由于CGImage没有拉伸的概念,所以在转化的时候CGImage就丢失了,而UIImage直接读取了高质量的retain图片,就会使图片像素很低,出现模糊,这时候我们可以手动来修复这个问题,设置CALayer的contentsScale为图片的scale:

UIImage *image = [UIImage imageNamed:@"Snowman.png"]; self.layerView.layer.contents = (__bridge id)image.CGImage;
self.layerView.layer.contentsGravity = kCAGravityCenter;
self.layerView.layer.contentsScale = image.scale;

当没有图片时,我们设置为屏幕的scale

layer.contentsScale = [UIScreen mainScreen].scale;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值