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

   CGRect rect = self.containerView.bounds;CAShapeLayer *shaper = [CAShapeLayer new];shaper.backgroundColor = [UIColor yellowColor].CGColor;shaper.lineWidth = 2;shaper.strokeColor = [UIColor redColor].CGColor;//单独设置左上,右上圆角UIRectCorner rcorner = UIRectCornerTopLeft|UIRectCornerTopRight;UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:rcorner cornerRadii:CGSizeMake(30, 30)];//设置路径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:14];CFStringRef fontStrRef = (__bridge CFStringRef)font.fontName;CGFontRef fontRef = CGFontCreateWithFontName(fontStrRef);textLayer.font = fontRef;CFRelease(fontRef);textLayer.fontSize = font.pointSize;//设置缩放倍数,防止像素化textLayer.contentsScale = [UIScreen mainScreen].scale;//这里也可以设置富文本字符串NSMutableStringtextLayer.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(-50, -50, 100, 100);layer.backgroundColor = [UIColor colorWithRed:rand()/(double)INT_MAX green:rand()/(double)INT_MAX  blue:rand()/(double)INT_MAX alpha:1].CGColor;layer.transform = transform;return layer;
}

- (CALayer*)cubeWithTransform:(CATransform3D)transform{CATransformLayer *cubeLayer = [CATransformLayer layer];//1CATransform3D ct = CATransform3DMakeTranslation(0, 0, 50);[cubeLayer addSublayer:[self faceWithTransform:ct]];//2ct = CATransform3DMakeTranslation(50, 0, 0);ct = CATransform3DRotate(ct, M_PI_2, 0, 1, 0);[cubeLayer addSublayer:[self faceWithTransform:ct]];//3ct = CATransform3DMakeTranslation(0, -50, 0);ct = CATransform3DRotate(ct, -M_PI_2, 1, 0, 0);[cubeLayer addSublayer:[self faceWithTransform:ct]];//4ct = CATransform3DMakeTranslation(0, 50, 0);ct = CATransform3DRotate(ct, -M_PI_2, 1, 0, 0);[cubeLayer addSublayer:[self faceWithTransform:ct]];//5ct = CATransform3DMakeTranslation(-50, 0, 0);ct = CATransform3DRotate(ct, -M_PI_2, 0, 1, 0);[cubeLayer addSublayer:[self faceWithTransform:ct]];//6ct = CATransform3DMakeTranslation(0, 0, -50);ct = CATransform3DRotate(ct, M_PI, 0, 1, 0);[cubeLayer addSublayer:[self faceWithTransform:ct]];cubeLayer.position = CGPointMake(self.containerView.bounds.size.width/2, self.containerView.bounds.size.height/2);//运用3D变换cubeLayer.transform = transform;return cubeLayer;} 

- (void)testTransformLayer{CATransform3D tran = CATransform3DIdentity;tran.m34 = -1.0/500;
//添加透视效果self.containerView.layer.sublayerTransform = tran;CATransform3D ct2  = CATransform3DIdentity;ct2 = CATransform3DTranslate(ct2, 100, 0, 0);ct2 = CATransform3DRotate(ct2, -M_PI_4, 1, 0, 0);ct2 = CATransform3DRotate(ct2, -M_PI_4, 0, 1, 0);[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(0, 0);gradientLayer.endPoint = CGPointMake(1, 1);//各个渐变点开始渐变的位置,和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 = 10;CATransform3D transform = CATransform3DIdentity;transform = CATransform3DTranslate(transform, 0, 200, 0);transform = CATransform3DRotate(transform, M_PI/5.0, 0, 0, 1);transform = CATransform3DTranslate(transform, 0, -200, 0);//运用变换replayer.instanceTransform = transform;//改变下一图层的蓝红通道 ,每个复制的图层颜色不一样replayer.instanceBlueOffset = -0.1;replayer.instanceRedOffset = - 0.1;//放一个子图层进去CALayer *layer = [CALayer layer];layer.frame = CGRectMake(100, 100, 100, 100);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 = 2;CATransform3D transform = CATransform3DIdentity;CGSize size = self.bounds.size;
    transform = CATransform3DTranslate(transform, 0, size.height+2, 0);/**y方向倒转*/transform = CATransform3DScale(transform, 1, -1, 0);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/2, size.height/2);CAEmitterCell *cell =[ CAEmitterCell emitterCell];
//注意图片大小cell.contents = (__bridge id)[UIImage imageNamed:@"spark.jpg"].CGImage;cell.birthRate = 50;//每秒多少个cell.lifetime = 5;cell.color = [UIColor colorWithRed:1 green:0.5 blue:1 alpha:1].CGColor;cell.alphaSpeed = -0.3;cell.velocity = 150;cell.velocityRange = 150;
//发散范围cell.emissionRange = M_PI*2;emmitLayer.emitterCells = @[cell];

7.其他

CAEAGLLayer

CAScrollLayer

CATiledLayer:载入大图

转载于:https://www.cnblogs.com/cnman/p/10702848.html

Core Animation笔记(特殊图层)相关推荐

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

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

  2. Core Animation学习笔记—第二节Setting up Layer Objects

    各位iOS开发大佬们好: 我是一名Swift+SwiftUI栈的iOS小白,目前还在上大三,最近准备实习,面试的过程中发现现在大公司很多还在用OC + UIKit的技术栈,OC我还在考虑要不要学,目前 ...

  3. Core Animation Advanced Technique 学习笔记(5)

    第一部分:下面的图层 6.专用图层(Specialized Layers) 6.1.CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类. 你指定诸如 ...

  4. 媒体层图形技术之Core Animation 学习笔记

    1.CADisplayLink //自行定義的函式,用來設定使用CADisplayLink的相關參數 -(void)initializeTimer {//theTimer是CADisplayLink型 ...

  5. CORE ANIMATION的学习备忘录

    CORE ANIMATION的学习备忘录(第一天) 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性 ...

  6. Nancy in .Net Core学习笔记 - 初识Nancy

    原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...

  7. Core Animation

    iOS 核心动画高级技术 核心动画是基于苹果iOS用户界面的技术.通过使用核心动画的全部功能,可以用2D和3D视觉效果来提升应用程序并创造炫酷的全新接口. iOS开发者尼克·洛克伍德会带你一步一步体验 ...

  8. Core Animation简介

    1.我们是使用Core Animatioin创建动画的时,实质上是更改CALayer的属性,然后让这些属性流畅的变化.可以使用Core Animation对象的位置.颜色.透明度以及CGAffine变 ...

  9. 使用Core Animation对象来实现动画

    转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...

最新文章

  1. bind、call、apply
  2. 搭建Web服务器之Step1:VMWare+CentOS6.3
  3. Spark配置参数详解
  4. 瞧瞧 Fog Creek 软件公司办公环境
  5. ajax中datatype是json,dataType:'json'vs data:$ .ajax中的JSON.stringify(obj)
  6. 【C++基础学习】C++中union结构
  7. 备用小知识[不断更新***]
  8. Scala学习(六)练习
  9. 标准C时间与日期函数、内存函数
  10. MyBatis传入参数为0时条件不生效
  11. Linux开发_GDB_dump_Core调试
  12. Masonry的使用
  13. O2O营销方法有哪些 O2O营销模式的特点是什么?
  14. 高等数学(下)思维导图
  15. python半圆代码_r或python中的半圆形色轮[闭合]
  16. 批量下载网页上ts视频文件(撸sir!你还在为下载小电影而苦恼吗?)
  17. 渗透测试原理与基本进程
  18. kali下载速度慢_kali Linux 2020.1最新安装教程,绝对能帮你安装好!不是root、没有桌面、中文乱码、下载太慢、ssh链接等问题!...
  19. linux可执行文件怎么打开代码,linux可执行文件的加载和运行(转)
  20. 博弈对抗游戏AI的技术方法的一些总结和思考

热门文章

  1. 修改最后一次commit提交信息
  2. 这些痛,只有程序员懂… | 搞笑动图
  3. KVM创建桥接网卡--最简洁最详细
  4. 2019Android 网络编程总结篇,你想要的三次握手和四次握手
  5. oracle parameter文件
  6. Nubia Z5S 官方4.4 201内測版 内核版本号信息
  7. 微软IE本地文件探测漏洞
  8. 图解css3:核心技术与案例实战. 1.1 什么是CSS3
  9. 爬虫下载腾讯视频免费视频
  10. 奥地利采用漱口检测方法对抗新冠病毒