Core Animation笔记(特殊图层)
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笔记(特殊图层)相关推荐
- IOS Core Animation Advanced Techniques的学习笔记(五)
第六章:Specialized Layers 类别 用途 CAEmitterLayer 用于实现基于Core Animation粒子发射系统.发射器层对象控制粒子的生成和起源 CAGradient ...
- Core Animation学习笔记—第二节Setting up Layer Objects
各位iOS开发大佬们好: 我是一名Swift+SwiftUI栈的iOS小白,目前还在上大三,最近准备实习,面试的过程中发现现在大公司很多还在用OC + UIKit的技术栈,OC我还在考虑要不要学,目前 ...
- Core Animation Advanced Technique 学习笔记(5)
第一部分:下面的图层 6.专用图层(Specialized Layers) 6.1.CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类. 你指定诸如 ...
- 媒体层图形技术之Core Animation 学习笔记
1.CADisplayLink //自行定義的函式,用來設定使用CADisplayLink的相關參數 -(void)initializeTimer {//theTimer是CADisplayLink型 ...
- CORE ANIMATION的学习备忘录
CORE ANIMATION的学习备忘录(第一天) 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性 ...
- Nancy in .Net Core学习笔记 - 初识Nancy
原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...
- Core Animation
iOS 核心动画高级技术 核心动画是基于苹果iOS用户界面的技术.通过使用核心动画的全部功能,可以用2D和3D视觉效果来提升应用程序并创造炫酷的全新接口. iOS开发者尼克·洛克伍德会带你一步一步体验 ...
- Core Animation简介
1.我们是使用Core Animatioin创建动画的时,实质上是更改CALayer的属性,然后让这些属性流畅的变化.可以使用Core Animation对象的位置.颜色.透明度以及CGAffine变 ...
- 使用Core Animation对象来实现动画
转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...
最新文章
- bind、call、apply
- 搭建Web服务器之Step1:VMWare+CentOS6.3
- Spark配置参数详解
- 瞧瞧 Fog Creek 软件公司办公环境
- ajax中datatype是json,dataType:'json'vs data:$ .ajax中的JSON.stringify(obj)
- 【C++基础学习】C++中union结构
- 备用小知识[不断更新***]
- Scala学习(六)练习
- 标准C时间与日期函数、内存函数
- MyBatis传入参数为0时条件不生效
- Linux开发_GDB_dump_Core调试
- Masonry的使用
- O2O营销方法有哪些 O2O营销模式的特点是什么?
- 高等数学(下)思维导图
- python半圆代码_r或python中的半圆形色轮[闭合]
- 批量下载网页上ts视频文件(撸sir!你还在为下载小电影而苦恼吗?)
- 渗透测试原理与基本进程
- kali下载速度慢_kali Linux 2020.1最新安装教程,绝对能帮你安装好!不是root、没有桌面、中文乱码、下载太慢、ssh链接等问题!...
- linux可执行文件怎么打开代码,linux可执行文件的加载和运行(转)
- 博弈对抗游戏AI的技术方法的一些总结和思考