iOS知识点(5)CALayer

1.那他与UIView又有什么区别和联系呢?

事实上CALayer负责所有的UIView及其子类图形的绘制。UIView下有一个layer属性,这个layer层就是真正绘制UIView所要展示的东西的人。然而之所以要将CALayer封装成UIView则是为了给其添加事件响应。

因为CALayer是继承与NSObject的,所以他是不具备响应的。而UIView是继承与UIResponder的,UIResponder本身可以提供事件响应,再用CALayer给他绘制一个图像,那一个具有响应事件的对象就诞生了,他就是我们的UIView。

当我们创建一个UIView对象时,系统自动为我们创建一个CALayer对象,这个对象就是UIView的layer属性。

2.CALayer有具体有什么属性呢?

CALayer有 boundspositionframe 的属性,他呢,其实就是UIView中bounds,center,frame的映射。事实上,我们在layer中一般只操作 boundsposition 两个属性。
CALayer还有一个非常重要的属性 anchorPoint ,即 锚点。说起来这个概念还是真难解释,锚点就好像是体心,一个物体抽象成一个点的对象。还记得物理中的质点么?我们操作属性,比如移动,旋转,缩放等等都是以锚点作为参考点的。他是一个CGPoint类型的对象,他的x、y取值范围都是0~1。数值就是从锚点到layer的左上角(类比UIView的origin)的 横向/纵向 距离占layer得 width/height 的比例。
contents,寄宿图。事实上这个属性我们操作的也很少,不过还是可以解释一下的。他可以看做是当前图层的背景图片。就是在当前图层的背景展示一张图片。也就是说你甚至可以用一个UIView展示一张图片了,就是这样。不过你别看他的类型是id,可不代表你给他传什么对象都可以。事实上你只能传CGImageRef类型的数据进去。他的id类型是为了配合OS X系统的。哦,你说为什么不能传UIIamge?是这样的,CALayer是在QuartzCore框架下的,他是可以跨平台的,也就是在iOS和OS X上都可以,所以他当然不能让你传入UIKit下的对象了。CALayer的所有属性都不能传入UIKit的对象。
transform,仿射变换啦,这个东西其实挺多能讲的,那套图像变换的原理挺有意思的,不过我矩阵真的不会算了=。=延展的东西数学好的同学们自己看吧,其实想用还是挺简单的。
cornerRadiusmasksToBounds。这两个属性比较常用啦,切圆角时候我们用的属性。
opacity,类比UIView的alpha。
shadowOpacityshadowColorshadowPathshadowOffsetshadowRadius,这几个阴影相关的属性。这里需要注意的是shadowOpacity的默认值现在是0。也就是说默认效果下你是看不到任何阴影效果的,想要实现阴影想过请先更改shadowOpacity为一个非0得小于等于1的值。还有一点就是由于shadow是图层外的延展效果,要想看到shadow效果请设置masksToBounds属性为No。
borderColorborderWidth,这是边框相关的属性。borderWidth默认值是0。
mask,这也是个有趣又有用的属性,遮罩属性。可以以一个layerA作为另一个layerB的遮罩,即layerB.mask = layerA。那么作为遮罩的layerA中的透明区域将被过滤掉,layerB只显示layerA的非透明区域。借助这个属性可以实现很多神奇的效果,比如歌词、图像展开等等。

详解CALayer 和 UIView的区别和联系

彻底理解position与anchorPoint

你可能感兴趣的:(iOS知识点(5)CALayer)