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:载入大图

最新文章

  1. Metro-UI系统-2-color和icon
  2. VTK初学一,a_Vertex图形点的绘制
  3. 【BZOJ】3676: [Apio2014]回文串
  4. html中的特殊符号
  5. 自己调用NTDLL函数
  6. [Windows Phone学习笔记]页面之间传递对象
  7. Linux教学辅助训练(第二阶段)
  8. JDBC连接Oracle数据库代码
  9. Mac系统占用空间大、空间不够、查看系统文件大小分布
  10. 关于jquery全选反选 批量删除的一点心得
  11. (转)HTTP协议漫谈
  12. 局部刷新Ajax
  13. [bzoj3875] [Ahoi2014]骑士游戏
  14. Python中模块之time&datetime的功能介绍
  15. SSM博客登录注册
  16. SpringCloud+ZUUL跨域请求中的OPTIONS请求处理
  17. 后端必备的Linux知识
  18. JS-给对象动态添加属性
  19. 源代码安装-非ROOT用户安装软件的方法
  20. java ee期末项目相关

热门文章

  1. NamedPipeStream的使用
  2. redis 服务器开放给其他电脑连接
  3. 小数末尾是0的,不显示0,有值才显示 StringFormat
  4. python-机器学习-深度学习-算法-面试题
  5. Docker 搭建本地 cnpm 私有仓库
  6. 【python基础】argparse模块
  7. 使用二进制的方式部署 K8S-1.16 高可用集群
  8. Oracle Spatial图层元数据坐标范围影响R-TREE索引的ROOT MBR吗?
  9. 2019年广东外语外贸大学程序设计竞赛(新手赛)-F题(好快的刀)题解
  10. ply2obj