iOS CALayer应用详解

时间:2021-03-13 20:28:42

跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents

一 CALayer是什么?

Layers是绘图和动画的基础,  Layer是在3D空间中的2D平面。Layer管理的几何(例如rotate,transfrom),内容(image等),和可视属性(backgroundColor,alpha)等信息。Layer主要通过管理bitmap来维护自己的状态信息,从这一点上来说,Layer可以看作对象模型,因为他们主要用来管理数据。

Layer是基于bitmap的,它会捕获View要呈现的内容,然后cache在一个bitmap中,这个bitmap可以看作一个对象。这样每次进行操作,例如平移旋转等,只是bitmap的矩阵运算。基于Layer的动画过程如图

iOS CALayer应用详解

由于基于Layer的绘制是处理静态的Bitmap的,而bitmap的处理又是GPU所擅长的,所以它的效率要比基于View绘制的高很多,因为基于View绘制的每次都要进行drawRect的调用重新绘制。

二 Layer支持继承 支持添加新的SubLayer 支持对sublayer进行层次调整

常见的Layer子类

iOS CALayer应用详解

管理Layer内容的几个函数

addSublayer:
insertSublayer:above:
insertSublayer:atIndex:
insertSublayer:below:
removeFromSuperlayer
replaceSublayer:with:

三 直接设置UIView 的Layer

先看一个示例,然后我们列出常用的属性,最后就是找几个比较不容易理解的属性单独分析

现在Stroyboard上拖拽一个UIView。然后control+drag出一个IBOutlet,命名为containView

@property (weak, nonatomic) IBOutlet UIView *containView;

在ViewDidLoad 中添加如下代码

    self.containView.layer.backgroundColor = [UIColor lightGrayColor].CGColor;//背景颜色 使用CGColor
self.containView.layer.cornerRadius = 20.0;//圆角
self.containView.layer.shadowColor = [UIColor blueColor].CGColor;//阴影颜色
self.containView.layer.shadowOpacity = 0.8;//阴影透明度
self.containView.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.containView.layer.borderWidth = 2.0f;//设置边界的宽度
self.containView.layer.borderColor = [UIColor redColor].CGColor;//边界颜色

这样,运行后的效果

iOS CALayer应用详解

四 添加SubLayer

    CALayer *subLayer1 = [CALayer layer];
subLayer1.frame = CGRectMake(, , , );
subLayer1.backgroundColor = [UIColor blueColor].CGColor;
subLayer1.anchorPoint = CGPointMake(0.5, 0.5);
subLayer1.position = CGPointMake(, );
[self.containView.layer addSublayer:subLayer1];

效果图如图

iOS CALayer应用详解

有可能添加SubLayer的时候,sublayer的frame范围已经超过了super Layer的frame,那么会怎么样呢?

sublayer1.position = CGPointMake(,CGRectGetMaxY(containView.bounds)-);  

iOS CALayer应用详解

但是很多时候我们并不想subLayer的范围超出super layer 这个时候可以设置这个属性

self.containView.layer.masksToBounds = YES;  

aaarticlea/png;base64,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" alt="" />

这里再添加两个常用的CALayer 的子类UIShapeLayer 和 UITextLayer的示例

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, , );
CGPathAddLineToPoint(path, nil, , CGRectGetHeight(_containView.frame)/);
shapeLayer.path = path;
shapeLayer.bounds = CGRectMake(,,5.0,CGRectGetHeight(_containView.bounds)/);
shapeLayer.anchorPoint = CGPointMake(0.5, 0.5);
shapeLayer.position = CGPointMake(CGRectGetMidX(_containView.bounds),CGRectGetMidY(_containView.bounds));
shapeLayer.lineWidth = 5.0;
shapeLayer.lineCap = kCALineCapRound;
shapeLayer.strokeColor = [UIColor yellowColor].CGColor;
[self.containView.layer addSublayer:shapeLayer]; CATextLayer * textLayer = [CATextLayer layer];
NSString * text = @"blog.csdn.net/hello_hwc";
NSAttributedString * attributeString = [[NSAttributedString alloc] initWithString:text];
textLayer.string = text;
textLayer.alignmentMode = @"center";
textLayer.fontSize = ;
textLayer.foregroundColor = [UIColor brownColor].CGColor;
CGRect bounds;
bounds.origin = CGPointMake(, );
bounds.size = attributeString.size;
textLayer.bounds = bounds;
textLayer.position = CGPointMake(,);
[_containView.layer addSublayer:textLayer];

效果图如下

iOS CALayer应用详解

五 anchorPoint和position

和UIView不同,Layer主要由三个属性来设置位置(极少用Frame):
bounds -  设置大小
anchorPoint -设置锚点(锚点对后续的layer动画有很大影响)
position -  锚点在superLayer中的位置
这样说有点抽象,我们看看以下的图就了解了

对于iOS来说,坐标系如图,archPoint(x,y)的两个值通常取0.0-1.0,默认值是(0.5,0.5)这里的值可以看作所占用x的比例,比如默认的0.5,0.5就是在x的中间和y的中间。

iOS CALayer应用详解

而position则是AnchorPoint在super layer中的位置
如下图

iOS CALayer应用详解

六 layer 显示图片

CALayer * imageLayer = [CALayer layer];
imageLayer.bounds = CGRectMake(,,,);
imageLayer.position = CGPointMake(,);
imageLayer.contents = (id)[UIImage imageNamed:@"lichen.jpg"].CGImage;
imageLayer.contentsGravity = kCAGravityResizeAspect;
[containView.layer addSublayer:imageLayer];

效果图

iOS CALayer应用详解

这里,要详细讲解以下contentGravity这个属性。这个属性决定了contents如何填充。
具体分为两个方面,
方面一,位置方面
具体如图
iOS CALayer应用详解

方面二

iOS CALayer应用详解