跟着大神一起进步,本篇博客原文地址: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的动画过程如图

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

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

常见的Layer子类

管理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;//边界颜色

这样,运行后的效果

四 添加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];

效果图如图

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

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

但是很多时候我们并不想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];

效果图如下

五 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的中间。

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

六 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];

效果图

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

方面二

最新文章

  1. mysql mybatis-generator plugin 分页
  2. TypeScript - Interfaces
  3. MVC6的内置ActionResult类型
  4. ES6新特性--多行文本
  5. DataItem,gridview,repeater数据控件数据绑定
  6. LeetCode57 Insert Interval
  7. 转载 SharePoint Foundation和SharePoint Server的区别
  8. mvc Routing特性优化
  9. StringList 自定义快速排序
  10. 设定MS SQL Server 2008定期自动备份
  11. android TransFormexecption 解决
  12. Codeforces D. Sorting the Coins
  13. 《图解HTTP》读书笔记(二:各种协议与HTTP协议之间的关系)
  14. Jsの练习-数组常用方法 -forEach()
  15. QTREE6&&7 - Query on a tree VI &&VII
  16. MapReduce编程:平均成绩
  17. [CF1082E] Increasing Frequency
  18. Android--根据子控件的大小自动换行的ViewGroup
  19. ArcEngine二次开发错误编码对照表(转)
  20. iOS设计模式 - 中介者

热门文章

  1. Web缓存杂谈
  2. 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
  3. DDD 领域驱动设计-如何完善 Domain Model(领域模型)?
  4. 读书笔记--SQL必知必会08--使用函数处理数据
  5. 基于hexo+github搭建一个独立博客
  6. 模仿东京首页banner轮播,京东新闻上下滚动动画实现(动画实现)
  7. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
  8. php:ci学习笔记1
  9. JAVA基础培训(isoft)
  10. mysql 用户管理和权限设置