iOS CALayer的简单学习

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上:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值