iOS开发-iOS粒子发射器开发-iOS粒子动画下雨下雪天气动画开发-CAEmitterLayer粒子发射器-CAEmitterCell粒子开发实践

本文介绍了如何在iOS开发中使用CAEmitterLayer和CAEmitterCell创建粒子动画,包括下雨、下雪和烟火效果。详细讲解了CAEmitterLayer的使用方式,CAEmitterCell的属性配置,以及如何实现粒子的发射方向和粒子动画的叠加效果。文章还提供了关键属性的调整以实现不同天气动画效果,并总结了做好粒子发射动画的关键点。
摘要由CSDN通过智能技术生成

本期内容:

  • CAEmitterLayer 粒子发射器(层)
  • CAEmitterCell 粒子
  • 下雨效果
  • 下雪效果
  • 烟火效果
  • 需要注意的属性叠加
  • 总结以及demo下载

CAEmitterLayer 粒子发射器(层)

简介:CAEmitterLayer是发射、动画和渲染粒子系统的层。 是CALayer的一个常用子类,CALayer的子类有很多,如果能很好的使用它们会得到一些意想不到的效果。CAEmitterLayer就是其中之一,CAEmitterLayer是用于实现基于Core Animation的粒子发生器系统。由CAEmitterCell实例定义的粒子被绘制在层的背景颜色和边框之上。

具体属性清单:
	// 常用属性:
     NSArray<CAEmitterCell *> *emitterCells; // 用来装粒子的数组
     
     CGPoint emitterPosition; 	// 决定了粒子发射形状的中心点
     CGFloat emitterZPosition;
     CGSize emitterSize; 			// 发射源的尺寸大小
     
     NSString *emitterShape; 		// 发射源的形状
     NSString *emitterMode; 		// 发射模式
     NSString *renderMode; 		// 渲染模式
     
   // 不常用属性:
     float birthRate; 			// 粒子产生系数,默认1.0 (可以在Cell里面赋值)
     float lifetime; 			// 粒子的生命周期系数, 默认1.0 (可以在Cell里面赋值)
     BOOL preservesDepth;		// 定义该层是否将其子层压平到其平面。
     CGFloat emitterDepth;		// 确定发射器形状的深度
     float velocity; 			// 粒子速度系数, 默认1.0 (可以在Cell里面赋值)
     float scale; 				// 粒子的缩放比例系数, 默认1.0 (可以在Cell里面赋值)
     float spin; 				// 粒子的自旋转速度系数, 默认1.0 (可以在Cell里面赋值)
     unsigned int seed; 		// 随机数发生器

CAEmitterLayer的使用方式如下:

    // 1.创建CAEmitterLayer
    emitterLayer = [CAEmitterLayer layer];
    
    // 2.设置CAEmitterLayer的属性(最主要的是前四个)
    // 发射源的形状 是枚举类型
    emitterLayer.emitterShape = kCAEmitterLayerLine;
    //    kCAEmitterLayerCircle
    //    粒子从一个以(发射位置)为中心的圆中发射出来。
    //    kCAEmitterLayerCuboid
    //    粒子从一个相反角的长方体(3D矩形)发射。
    //    kCAEmitterLayerLine
    //    粒子从(发射位置)沿直线发射。
    //    kCAEmitterLayerPoint
    //    粒子从一个点(发射位置)发射出来。
    //    kCAEmitterLayerRectangle
    //    粒子从一个有相对角的矩形发射。
    //    kCAEmitterLayerSphere
    //    粒子从一个以(发射位置)为中心的球体中发射出来。
    
    // 发射模式 枚举类型
    emitterLayer.emitterMode = kCAEmitterLayerSurface;
    //    kCAEmitterLayerOutline
    //    粒子从粒子发射器的轮廓发射出来。
    //    kCAEmitterLayerPoints
    //    粒子从粒子发射器上的点发射出来。
    //    kCAEmitterLayerSurface
    //    粒子从粒子发射器的表面发射出来。
    //    kCAEmitterLayerVolume
    //    粒子从粒子发射器中的a位置发射。
    
    // 发射源的size 决定了发射源的大小,如果做了倾斜或者便宜屏幕宽度是不够的,那时候就需要自定义
    emitterLayer.emitterSize = self.view.frame.size;
    // 发射源的位置
    emitterLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, -10);
    // 渲染模式 枚举类型 (⭐️这个渲染模式表达效果会很不好,不常用,kCAEmitterLayerAdditive,可以让重叠的部分高亮)
    emitterLayer.renderMode = kCAEmitterLayerAdditive;
    //  kCAEmitterLayerOldestFirst;
    //  kCAEmitterLayerOldestLast;
    //  kCAEmitterLayerBackToFront;
    //  kCAEmitterLayerAdditive;
    
    // 3.添加到目标视图的layer上
    [self.view.layer addSublayer:emitterLayer];

CAEmitterCell 粒子

简介:CAEmitterCell类表示CAEmitterLayer对象发出的一个粒子源。 CAEmitterCell定义发射粒子的方向和性质。CAEmitterLayer发射器可以有一系列子粒子,这些子粒子可以让粒子自己发射粒子,也就是CAEmitterCell也可以发射CAEmitterCell

/**
  具体属性清单:
  // 常用属性清单(以空行来划分使用点):
     NSString *name; 			// 粒子名字, 默认为nil

     float birthRate; 			// 粒子的产生率,默认0
     float lifetime; 			// 粒子的生命周期,以秒为单位。默认0
     float lifetimeRange; 		// 粒子的生命周期的范围,以秒为单位。默认0
     
     CGFloat emissionLatitude;// 指定纬度,纬度角代表了在x-z轴平面坐标系中与x轴之间的夹角,默认0:
     CGFloat emissionLongitude; // 指定经度,经度角代表了在x-y轴平面坐标系中与x轴之间的夹角,默认0:
     CGFloat emissionRange; 	//发射角度范围,默认0,以锥形分布开的发射角度。角度用弧度制。粒子均匀分布在这个锥形范围内;
     
     CGFloat velocity; 			// 速度和速度范围,两者默认0
     CGFloat velocityRange;
     CGFloat xAcceleration; 	// x,y,z方向上的加速度分量,三者默认都是0
     CGFloat yAcceleration;
     CGFloat zAcceleration;
     
     CGFloat scale; 			// 缩放比例, 默认是1
     CGFloat scaleRange; 		// 缩放比例范围,默认是0
     CGFloat scaleSpeed; 		// 在生命周期内的缩放速度,默认是0
     
     CGFloat spin; 				// 粒子的平均旋转速度,默认是0
     CGFloat spinRange; 		// 自旋转角度范围,弧度制,默认是0
     
     CGColorRef color; 			// 粒子的颜色,默认白色
     float redRange; 			// 粒子颜色red,green,blue,alpha能改变的范围,默认0
     float greenRange;
     float blueRange;
     float alphaRange;
     float redSpeed; 			// 粒子颜色red,green,blue,alpha在生命周期内的改变速度,默认都是0
     float greenSpeed;
     float blueSpeed;
     float alphaSpeed;
     
     id contents; 				// 粒子的内容,为CGImageRef的对象

     NSArray<CAEmitterCell *> *emitterCells; // 粒子里面的粒子
     
  // 非常不常用属性:
     BOOL enabled;
     NSDictionary *style;
     CGRect content
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值