Core Animation - 寄宿图<一>

简介: 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;


目录
相关文章
|
9月前
|
XML 存储 JavaScript
sap.ui.core.Configuration 的作用简析
sap.ui.core.Configuration 的作用简析
|
9月前
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
49 0
|
2月前
|
iOS开发
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
108 0
|
8月前
|
Windows
基于.Net Core实现自定义皮肤WidForm窗口
基于.Net Core实现自定义皮肤WidForm窗口
70 0
|
9月前
35avalon - 指令ms-widget(组件绑定介绍)
35avalon - 指令ms-widget(组件绑定介绍)
22 0
|
图形学
Core Animation - 寄宿图<二>
Core Animation - 寄宿图<二>
54 0
|
iOS开发
Core Animation - 第一次使用图层来创建一个简单的项目
Core Animation - 第一次使用图层来创建一个简单的项目
64 0
Core Animation -CGContextRef的运用,还有详细解释
Core Animation -CGContextRef的运用,还有详细解释
78 0
|
C#
WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)
原文 WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验。如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程。
2964 0
|
前端开发 C#
WPF MVVM 架构 Step By Step(4)(添加bindings - 完全去掉后台代码)
原文:WPF MVVM 架构 Step By Step(4)(添加bindings - 完全去掉后台代码)   之前的改进已经挺棒的,但是我们现在知道了后台代码的问题,那是否可能把后台代码全部去除呢?这时候就该WPF binding 和 commands 来做的事情了。
1149 0

热门文章

最新文章