CALayer
本期干货陈小贱的gitHub源码
当我们提到Layer时,我们总会想到UIView。很多初学者并不了解,为什么iOS在为我们提供了UIView的同时,又为我们提供了CALayer?
接触过iOS开发的同学都知道,视图(View)用于在手机屏幕上显示一个矩形区域,并能够响应用户的输入。一个视图可以管理它的所有子视图。
对于CALayer来讲,它其实和UIView相似。它们最大的不同就是,CALayer不响应用户交互,而是来做高级动画,即UI增强效果的动画。
那么CALayer可以做哪些事情?
1.阴影,圆角,带颜色的边框
2.3D变换
3.非矩形范围
4.透明遮罩
5.多级非线性动画
而这些事情我们的UIView并不能办到。
接下来比较UIView和CALayer吧。
UIView有`frame`,`bounds`和`center`,`CALayer`对应地叫做`frame`,`bounds`和`position`。
`frame`代表了图层的外部坐标(也就是在父图层上占据的空间),`bounds`是内部坐标({0, 0}通常是图层的左上角),`position`代表了相对于父图层的锚点`anchorPoint`的位置(大家暂时可以将锚点想象成中心点)
举一个简单的例子:
在没有做任何形变的状态下,假设一个图层的frame = (10,30,60,30),那么其bounds=(0,0,60,30),position = (40,45)
关于 锚点 (`anchorPoint`)
锚点`anchorPoint`用单位坐标来描述,也就是图层的相对坐标,图层左上角是{0, 0},右下角是{1, 1},因此默认坐标是{0.5, 0.5}。anchorPoint可以通过指定x和y值小于0或者大于1,使它放置在图层范围之外。
例子:
比如说,默认锚点 {0.5, 0.5},现将锚点改成 (0,0),那么图层将会向视图的右下角移动,代码如下所示:
CALayer *layer = [[CALayer alloc] init];
layer.frame = self.testView.bounds;
layer.backgroundColor = [UIColor redColor].CGColor;
layer.anchorPoint = CGPointMake(0, 0);//默认anchorPoint={0.5, 0.5}
[self.testView.layer addSublayer:layer];
关于电子钟的示例:
关键代码:
//改变锚点,实质适应
self.second.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.minute.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.hour.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
note:git上面有源码,欢迎下载!下面会接着给大家分享关于layer的UI增强动画,欢迎期待!
陈小贱的gitHub源码