1.shapeLayer: 渲染快速,内存占用小,不会被图层边界裁掉(可以在边界之外绘制),不会像素化(当做3D变化如缩放是不会失真)

   CGRect rect = self.containerView.bounds;

    CAShapeLayer *shaper = [CAShapeLayer new];
shaper.backgroundColor = [UIColor yellowColor].CGColor;
shaper.lineWidth = ;
shaper.strokeColor = [UIColor redColor].CGColor;
//单独设置左上,右上圆角
UIRectCorner rcorner = UIRectCornerTopLeft|UIRectCornerTopRight; UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:rcorner cornerRadii:CGSizeMake(, )];
//设置路径
shaper.path = path.CGPath;
// [self.containerView.layer addSublayer:shaper]; //定义父图层的可见区域(这里使父图层的圆角单独设置左上,右上)
self.containerView.layer.mask = shaper;

2.CATextLayer

     CATextLayer *textLayer = [CATextLayer new];
textLayer.frame = self.containerView.bounds;
[self.containerView.layer addSublayer:textLayer]; //设置文本属性
textLayer.foregroundColor = [UIColor blueColor].CGColor;
textLayer.alignmentMode = kCAAlignmentJustified;
textLayer.wrapped = YES; //设置字体
UIFont *font = [UIFont systemFontOfSize:];
CFStringRef fontStrRef = (__bridge CFStringRef)font.fontName;
CGFontRef fontRef = CGFontCreateWithFontName(fontStrRef);
textLayer.font = fontRef;
CFRelease(fontRef);
textLayer.fontSize = font.pointSize;
//设置缩放倍数,防止像素化
textLayer.contentsScale = [UIScreen mainScreen].scale;
//这里也可以设置富文本字符串NSMutableString
textLayer.string = @"on my god we you yao bei rangyizhuier le ma ,zhe me zhen shi de ma ,ai ";

3.CATransformLayer: 不平面化子图层,用于构建3D 形状,如下代码用于构建一个正方体

//产生某个面的子layer
- (CALayer*)faceWithTransform:(CATransform3D)transform{
CALayer *layer = [CALayer layer]; layer.frame = CGRectMake(-, -, , ); layer.backgroundColor = [UIColor colorWithRed:rand()/(double)INT_MAX green:rand()/(double)INT_MAX blue:rand()/(double)INT_MAX alpha:].CGColor;
layer.transform = transform; return layer;
}
- (CALayer*)cubeWithTransform:(CATransform3D)transform{
CATransformLayer *cubeLayer = [CATransformLayer layer];
//
CATransform3D ct = CATransform3DMakeTranslation(, , );
[cubeLayer addSublayer:[self faceWithTransform:ct]]; //
ct = CATransform3DMakeTranslation(, , );
ct = CATransform3DRotate(ct, M_PI_2, , , );
[cubeLayer addSublayer:[self faceWithTransform:ct]]; //
ct = CATransform3DMakeTranslation(, -, );
ct = CATransform3DRotate(ct, -M_PI_2, , , );
[cubeLayer addSublayer:[self faceWithTransform:ct]];
//
ct = CATransform3DMakeTranslation(, , );
ct = CATransform3DRotate(ct, -M_PI_2, , , );
[cubeLayer addSublayer:[self faceWithTransform:ct]];
//
ct = CATransform3DMakeTranslation(-, , );
ct = CATransform3DRotate(ct, -M_PI_2, , , );
[cubeLayer addSublayer:[self faceWithTransform:ct]];
//
ct = CATransform3DMakeTranslation(, , -);
ct = CATransform3DRotate(ct, M_PI, , , );
[cubeLayer addSublayer:[self faceWithTransform:ct]];
cubeLayer.position = CGPointMake(self.containerView.bounds.size.width/, self.containerView.bounds.size.height/); //运用3D变换
cubeLayer.transform = transform; return cubeLayer; }
- (void)testTransformLayer{
CATransform3D tran = CATransform3DIdentity;
tran.m34 = -1.0/;
//添加透视效果
self.containerView.layer.sublayerTransform = tran; CATransform3D ct2 = CATransform3DIdentity;
ct2 = CATransform3DTranslate(ct2, , , );
ct2 = CATransform3DRotate(ct2, -M_PI_4, , , );
ct2 = CATransform3DRotate(ct2, -M_PI_4, , , ); [self.containerView.layer addSublayer:[self cubeWithTransform:ct2]]; }

4.CAGradientLayer:渐变图层

 CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.containerView.bounds;
[self.containerView.layer addSublayer:gradientLayer]; gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,(__bridge id)[UIColor yellowColor].CGColor,(__bridge id)[UIColor greenColor].CGColor];
gradientLayer.startPoint = CGPointMake(, );
gradientLayer.endPoint = CGPointMake(, );
//各个渐变点开始渐变的位置,和colors数组个数必须一致.
gradientLayer.locations = @[@0.0,@0.1,@0.2]

5.CAReplicatorLayer,生成重复的子图层,并未每个图层应用变换

    CAReplicatorLayer *replayer = [CAReplicatorLayer layer];
replayer.frame = self.containerView.bounds;
[self.containerView.layer addSublayer:replayer];
//复制个数
replayer.instanceCount = ; CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DTranslate(transform, , , );
transform = CATransform3DRotate(transform, M_PI/5.0, , , );
transform = CATransform3DTranslate(transform, , -, );
//运用变换
replayer.instanceTransform = transform; //改变下一图层的蓝红通道 ,每个复制的图层颜色不一样
replayer.instanceBlueOffset = -0.1;
replayer.instanceRedOffset = - 0.1; //放一个子图层进去
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(, , , );
layer.backgroundColor = [UIColor whiteColor].CGColor;
[replayer addSublayer:layer];

产生一个倒影效果(这里自定义一个view用于产生倒影效果):

自定义view,返回指定的图层
+ (Class)layerClass{
return [CAReplicatorLayer class];
}
- (instancetype)init{
if (self = [super init]) {
[self setUp];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self setUp]; }
return self;
}
- (void)awakeFromNib{
[super awakeFromNib];
[self setUp];
}
- (void)setUp{
CAReplicatorLayer *layer = (CAReplicatorLayer*)self.layer;
layer.instanceCount = ; CATransform3D transform = CATransform3DIdentity; CGSize size = self.bounds.size;
transform = CATransform3DTranslate(transform, 0, size.height+2, 0); /**
y方向倒转
*/
transform = CATransform3DScale(transform, , -, );
layer.instanceTransform = transform;
layer.instanceAlphaOffset = -0.6; }

6.CAEmitterLayer:粒子发散效果

 CAEmitterLayer *emmitLayer = [CAEmitterLayer layer];
emmitLayer.frame = self.containerView.bounds;
[self.containerView.layer addSublayer:emmitLayer];
CGSize size = self.containerView.frame.size; emmitLayer.masksToBounds = true;
//重叠部分效果,kCAEmitterLayerAdditive,重叠部分更亮
emmitLayer.renderMode = kCAEmitterLayerAdditive;
//发散点
emmitLayer.emitterPosition = CGPointMake(size.width/, size.height/); CAEmitterCell *cell =[ CAEmitterCell emitterCell];
//注意图片大小
cell.contents = (__bridge id)[UIImage imageNamed:@"spark.jpg"].CGImage;
cell.birthRate = ;//每秒多少个
cell.lifetime = ; cell.color = [UIColor colorWithRed: green:0.5 blue: alpha:].CGColor;
cell.alphaSpeed = -0.3;
cell.velocity = ;
cell.velocityRange = ;
//发散范围
cell.emissionRange = M_PI*; emmitLayer.emitterCells = @[cell];

7.其他

CAEAGLLayer

CAScrollLayer

CATiledLayer:载入大图

Core Animation笔记(特殊图层)的更多相关文章

  1. Core Animation笔记(动画)

    一.隐式动画 layer默认开启隐式动画 禁用隐式动画 [CATransaction setDisableActions:true]; 设置隐士动画时间 //默认0.25s [CATransactio ...

  2. Core Animation笔记(变换)

    1.仿射变换 CGAffineTransformMakeScale : CGAffineTransformMakeTranslation CGAffineTransformMakeRotation(C ...

  3. Core Animation笔记(- Layer 基本属性)

    一.Layer的基本属性 1. contents 图层内容默认为nil 可以指定一张图片作为内容展示 self.layerView.layer.contents = (__bridge id)imag ...

  4. IOS Core Animation Advanced Techniques的学习笔记(一)

    转载. Book Description Publication Date: August 12, 2013 Core Animation is the technology underlying A ...

  5. IOS Core Animation Advanced Techniques的学习笔记(五)

    第六章:Specialized Layers   类别 用途 CAEmitterLayer 用于实现基于Core Animation粒子发射系统.发射器层对象控制粒子的生成和起源 CAGradient ...

  6. IOS Core Animation Advanced Techniques的学习笔记(四)

    第五章:Transforms   Affine Transforms   CGAffineTransform是二维的     Creating a CGAffineTransform   主要有三种变 ...

  7. Core Animation学习总结

    文件夹: The Layer Beneath The Layer Tree(图层树) The Backing Image(寄宿层) Layer Geometry(图层几何学) Visual Effec ...

  8. iOS 图形图像动画 Core Animation

    //Core Animation #define WeakSelf __weak __typeof(self) weakSelf = self #define StrongSelf __strong ...

  9. iOS开发之Core Animation

    在IOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了. 在Core Animation中我们经常使用的是 CABasi ...

随机推荐

  1. python import 上级目录(转)

    python import 上级目录  有时候我们可能需要import另一个路径下的python文件,例如下面这个目录结构,我们想要在_train.py里import在networks目录下的_lst ...

  2. dubbo、zookeeper心跳相关参数解析与测试

    dubbo consumer和provider的心跳机制 dubbo客户端和dubbo服务端之间存在心跳,目的是维持provider和consumer之间的长连接.由dubbo客户端主动发起,可参见d ...

  3. openresty开发系列32--openresty执行流程之1初始化阶段

    openresty开发系列32--openresty执行流程之初始化阶段 一)初始化阶段 1)init_by_lua   init_by_lua_block     init_by_lua_file语 ...

  4. Python高级笔记(九)Python使用MySQL

    1. MySQL基本使用 1.1 数据库简介 Mysql: 关系型数据库,做网站 redis:当作缓存 mongodb:非关系型数据库,做爬虫 SQL语句: DQL:数据查询语言,用于对数据进行查询, ...

  5. springboot 整合rabbitMQ

    RabbitMQ RabbitMQ是一个被广泛使用的开源消息队列.它是轻量级且易于部署的,它能支持多种消息协议.RabbitMQ可以部署在分布式和联合配置中,以满足高规模.高可用性的需求. 在pom. ...

  6. 大名鼎鼎的UniDAC手工安装

    第一次开博,该写点什么.由于懒,很多事情,都不想动.不过,懒不能解决遗忘的毛病.还是动手,记录一下吧. 好了,言归主题. UniDAC 的手工安装. 现在Delphi,已经发展到了XE6,支持多种移动 ...

  7. Python:self理解

    Python类 class Student: # 类变量,可以通过类.类变量(Student.classroom)或者实例.类变量(a.classroom)方式调用 classroom = '火箭班' ...

  8. JAVA windows环境配置,jdk的安装配置

    一.需要的文件与下载1.jdk:jdk下载:二.安装与配置1.jdk安装与路径选择 双击安装,然后一直下一步,直至完成. 这是个人的自定义的安装目录路径(安装路径可在安装的时候自行选择,) 2.jdk ...

  9. 【剑指offer】面试题 21. 调整数组顺序使奇数位于偶数前面

    面试题 21. 调整数组顺序使奇数位于偶数前面

  10. 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn

    https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...