iOS文化,博大精深···
所以本期给大家说一下CALayer,它是屏幕上的一个具体可见内容的矩形区域,每个UIView都有一个根CALayer,其所有的绘制都是在这个Layer上进行的。
CALayer的可以影响其外观的特性有:
� 层的大小尺寸
� 背景色
� 内容(比如图像或使用Core Graphics绘制的内容)
� 是否使用圆角
� 是否使用阴影
� 等等
需要说明的是CALayer的大部分属性都可以用来实现动画效果。
另外,你可以直接使用CALayer,也可使用其子类,如CAGradientLayer,CATextLayer,CAShapeLayer等等。
示例
创建一个带圆角的层,在你的ViewController里面的ViewDidLoad中加入下面代码
//新建一个view用于对比
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 100, 300, 300)];
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];
//用于改变layer的view
UIView *view2 = [[UIView alloc]initWithFrame:CGRectMake(10, 100, 300, 300)];
view2.backgroundColor = [UIColor blueColor];
[self.view addSubview:view2];
//设置layer的背景色为橙色
view2.layer.backgroundColor = [UIColor orangeColor].CGColor;
//设置layer的半径为20
view2.layer.cornerRadius = 20.0;
//设置layer的frame 横-2*10 竖-2*10
view2.layer.frame = CGRectInset(view2.layer.frame, 10, 10);
如图所示:
然后添加一个带阴影效果的子层
//添加一个带阴影效果的子层
CALayer *subLayer = [CALayer layer];
//子层 背景颜色
subLayer.backgroundColor = [UIColor blueColor].CGColor;
//子层 位置大小
subLayer.frame = CGRectMake(15, 15, 250, 250);
//阴影 偏移量 水平偏移5 垂直偏移5
subLayer.shadowOffset = CGSizeMake(5, 5);
//阴影 半径 0.5
subLayer.shadowRadius = 0.5;
//阴影 颜色 黑色
subLayer.shadowColor = [UIColor blackColor].CGColor;
//阴影 透明度
subLayer.shadowOpacity = 0.5;
//在view2的layer层上加子layer
[view2.layer addSublayer:subLayer];
为子层添加内容(图片),你还可以设置层的边框,代码如下:
//设置子层的内容为一张图片
subLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"image.png"].CGImage);
//设置子层的边框颜色为黑色
subLayer.borderColor = [UIColor blackColor].CGColor;
//设置子层的边框宽度为2.0
subLayer.borderWidth = 2.0;
如图所示:
如果你希望子层也是圆角怎么办?
设置CornerRadius属性在这里是行不通的,图片不会显示圆角。
我们需要结合masksToBounds为YES,但是这样做还是不够的,
因为如果这样,这个层的阴影显示就会丢失。
如图所示:
我们可以用两个层实现。
1.创建subLayer,只是不设置它的contents
2.创建imageLayer,设置它的contents为图片。
CALayer *imageLayer = [CALayer layer];
imageLayer.frame = subLayer.bounds;
imageLayer.cornerRadius = 10.0;
imageLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"image.png"].CGImage);
imageLayer.masksToBounds = YES;
[subLayer addSublayer:imageLayer];
Code在github上:点击打开链接