跟着大神一起进步,本篇博客原文地址: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如何填充。
具体分为两个方面,
方面一,位置方面
具体如图

方面二

iOS CALayer应用详解的更多相关文章

  1. iOS CALayer应用详解(2)

    参考博客:http://blog.csdn.net/hello_hwc?viewmode=list 如果你对CALayer 还没有一个清晰的理解,欢迎看一下前面的博客: http://www.cnbl ...

  2. 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )

    原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...

  3. iOS中-Qutarz2D详解及使用

    在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...

  4. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  5. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  6. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  7. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  8. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  9. iOS开发者证书-详解

    iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...

随机推荐

  1. PHP用单例模式实现一个数据库类

    使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...

  2. JWT实现token-based会话管理

    上文<3种web会话管理的方式>介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下.本文主要介绍这方面的内容.上文提到token-based的实现目前有一个 ...

  3. 如何在一个页面添加多个不同的kindeditor编辑器

    kindeditor官方下载地址:http://kindeditor.net/down.php    (入门必看)kindeditor官方文档:http://kindeditor.net/doc.ph ...

  4. RabbitMQ Config

    默认访问地址:http://localhost:15672/ 要想修改内网访问: %APPDATA%\RabbitMQ\ 目录下添加文件 rabbitmq.config [ {rabbit, [%% ...

  5. bzoj1036--树链剖分

    模板题... #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...

  6. flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法

    flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和 ...

  7. pandas.DataFrame对行和列求和及添加新行和列

    导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...

  8. spring和struts2的整合的xml代码

    导入spring的pring-framework-4.0.4.RELEASE的所有包,导入struts2下(对于初学的推荐)bin下所有的包,虽然有些包可以能现在你用不到,但可以保证你基本上不会出现缺 ...

  9. CSS3学习总结——实现瀑布流布局与无限加载图片相册

    首先给大家看一下瀑布流布局与无限加载图片相册效果图: 一.pic1.html页面代码如下: <!DOCTYPE html> <html> <head> <me ...

  10. JavaScript中‘this’关键词的优雅解释

    本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...