【粒子动画】iOS流星雨效果如何实现
基于CAEmitterLayer实现从右上方到左下方滑过的流星雨效果
- (void)startRainEmitterAnimations {// 从右向左 斜下流星雨CAEmitterLayer *rainEmitter = [CAEmitterLayer layer];_rainEmitter = rainEmitter;[rainEmitter setEmitterPosition:CGPointMake(-300, 0)];[rainEmitter setEmitterSize:CGSizeMake(400, 0)];rainEmitter.birthRate = 1;[rainEmitter setEmitterMode:kCAEmitterLayerLine];[rainEmitter setEmitterShape:kCAEmitterLayerCuboid];[rainEmitter setRenderMode:kCAEmitterLayerAdditive];CAEmitterCell *rainFlake = [CAEmitterCell emitterCell];[rainFlake setBirthRate:10];[rainFlake setVelocity:500.0];[rainFlake setVelocityRange:300.0];[rainFlake setYAcceleration:0.0];[rainFlake setScale:0.3];[rainFlake setScaleSpeed:0.1];[rainFlake setLifetime:1.8];[rainFlake setEmissionLongitude:0.750 * M_PI];[rainFlake setContents:(id)[[UIImage imageNamed:@"starline"] CGImage]];[rainFlake setColor:[[UIColor colorWithRed:1 green:1 blue:1 alpha:0.600] CGColor]];[rainEmitter setEmitterDepth:10.0f];rainEmitter.shadowOpacity = 0.0;rainEmitter.shadowRadius = 0.0;rainEmitter.emitterCells = [NSArray arrayWithObject:rainFlake];[self.layer addSublayer:rainEmitter];
}
其他类似功能:
/*
CAEmitterLayer是继承自CALayer的layer类,拥有很多属性,其中此demo用到的属性有: emitterCells:是用来与CAEmitterLayer关联显示粒子效果的,是CAEmitterCell的实例化对象,必须有值; emitterPosition:粒子排放位置,默认值是(0, 0); emitterShape:粒子排放形状,默认值是kCAEmitterLayerPoint; emitterSize:粒子排放的大小,取决于emitterShape,可忽略; emitterMode:粒子排放模式,默认值是kCAEmitterLayerVolume; renderMode:粒子渲染模式,默认值是kCAEmitterLayerUnordered.
*/ /*
CAEmitterCell继承自NSObject且遵循一定协议的类,拥有很多属性,其中此demo用到的属性有: birthRate:粒子每秒产生个数; lifetime:粒子的生命周期; emissionRange:粒子排放的范围; velocity:粒子的速度; velocityRange:粒子速度变化值; alphaSpeed:粒子生命周期内颜色变化速度; contents:CAEmitterCell的内容,是CGImageRef类型。
*///核心代码// 下雨、下雪
/** * 设置emitterLayer的属性 */
- (void)initEmitterLayerProperties { self.emitterLayer.emitterSize = self.frame.size; self.emitterLayer.emitterPosition = CGPointMake(self.frame.origin.x, self.frame.origin.y);
} /** * 设置emitterCell的属性并与emitterLayer关联显示动画效果 * * @param weather 天气名称 */
- (void)showWeather:(NSString *)weather { CAEmitterCell *emitterCell = [CAEmitterCell emitterCell]; emitterCell.birthRate = 20.f; emitterCell.lifetime = 100.f; emitterCell.velocity = 10.f; emitterCell.velocityRange = 3.f; emitterCell.yAcceleration = 5.f; emitterCell.emissionRange = 6 * M_2_PI; emitterCell.contents = (__bridge id _Nullable)([UIImage imageNamed:weather].CGImage); self.emitterLayer.emitterCells = @[emitterCell];
}
// 火焰
/** * 设置emitterLayer的属性 */
- (void)initEmitterLayerProperties { self.emitterLayer.emitterSize = self.frame.size; self.emitterLayer.emitterPosition = CGPointMake(self.frame.origin.x, self.frame.origin.y); self.emitterLayer.emitterMode = kCAEmitterLayerPoints; self.emitterLayer.renderMode = kCAEmitterLayerBackToFront;
} /** * 设置emitterCell的属性并与emitterLayer关联显示动画效果 */
- (void)show { CAEmitterCell *emitterCell = [CAEmitterCell emitterCell]; emitterCell.birthRate = 200.f; emitterCell.lifetime = 10.f; emitterCell.velocity = 10.f; emitterCell.velocityRange = 15.f; emitterCell.emissionRange = 2 * M_PI; emitterCell.alphaSpeed -= 0.5f; emitterCell.contents = (__bridge id _Nullable)([UIImage imageNamed:@"fire_selected"].CGImage); self.emitterLayer.emitterCells = @[emitterCell];
}
// 烟花
/** * 设置emitterLayer的属性 */
- (void)initEmitterLayerProperties { self.emitterLayer.emitterSize = self.frame.size; self.emitterLayer.emitterPosition = CGPointMake(self.frame.origin.x, self.frame.origin.y); self.emitterLayer.emitterMode = kCAEmitterLayerPoints; self.emitterLayer.renderMode = kCAEmitterLayerBackToFront;
} /** * 设置emitterCell的属性并与emitterLayer关联显示动画效果 */
- (void)show { CAEmitterCell *emitterCell = [CAEmitterCell emitterCell]; emitterCell.birthRate = 50.f; emitterCell.lifetime = 6.f; emitterCell.velocity = 50.f; emitterCell.velocityRange = 100.f; emitterCell.emissionRange = 2 * M_PI; emitterCell.alphaSpeed -= 0.5f; emitterCell.contents = (__bridge id _Nullable)([UIImage imageNamed:@"fireworks_selected"].CGImage); self.emitterLayer.emitterCells = @[emitterCell];
}
参考:
https://github.com/CoderXLL/Benyue
https://blog.csdn.net/JoyceZhaoQian/article/details/79899219
https://github.com/zhaoqianJoyce/ZQCAEmitterLayer
【粒子动画】iOS流星雨效果如何实现相关推荐
- android 矢量粒子动画,iOS CAEmitterLayer实现粒子发射动画效果
iOS实现粒子发射动画效果图 动画效果用 CAEmitterLayer 实现.CAEmitterLayer 显示粒子发射动画,具体的粒子由 CAEmitterCell 封装.代码示例是展示 CAEmi ...
- H5实例教学--ThreeJs 实现粒子动画飘花效果
粒子动画在ThreeJs可以用几种方式实现 本次样例使用Sprite类来构建粒子 官方对Sprite类的解释 Sprite A sprite is a plane that always faces ...
- html 页面飘花,HTML5开发实例-ThreeJs实现粒子动画飘花效果代码分享
粒子动画在ThreeJs可以用几种方式实现 本次样例使用Sprite类来构建粒子 大概意思:这个类创建的对象是一个始终面向相机的平面,可以把贴图应用在上面,Sprite对象无法添加阴影 ,所以cast ...
- python 粒子动画_python-pygame-粒子效果
您可能只想制作一个由矩形构成的类,每次更新烟熏时,它们都会向上和向左或向左随机移动.然后在需要时将它们制成大量.我将在下面尝试创建一个示例代码,但是我无法保证它会起作用.您可以为其他粒子效果创建类似的 ...
- android 烟雾动画,android使用粒子动画实现炊烟袅袅的效果
很久以前,做了一个关于旅游景区的项目,要求在等待页面实现一个炊烟袅袅升起的效果,本来是没有这个的,鬼知道我们的ios大神(坑货)从哪找来的,我们项目经理一看非常满意,要我们也加一个!(团队有这样的大神 ...
- html5 粒子动画效果制作,8款惊艳的HTML5粒子动画特效
原标题:8款惊艳的HTML5粒子动画特效 HTML5确实非常强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷的粒子动画效果,粒子动画在HTML5应用中也是比较消耗本地资源的,尤其是CPU,但 ...
- html5粒子效果,8款惊艳的HTML5粒子动画特效
[导读] HTML5确实强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷的粒子动画效果,粒子动画在HTML5应用中也是比较消耗本地资源的,尤其是CPU,但是有些HTML5粒子效果确实能给用户 ...
- 视觉粒子html,带视觉差效果可互动的背景粒子动画特效
这是一款效果非常炫酷的jQuery和CSS3网页背景粒子动画特效.该背景特效中粒子可以使用鼠标来进行互动,并且在粒子运动的过程中带有一些视觉差特效. 制作方法 HTML结构 这个背景粒子动画特效的HT ...
- Javascript Canvas 实现粒子动画效果分享
今天和大家一起分享一下用 canvas 实现粒子动画效果的实现,就像下图的效果 要实现这样的效果,我们首先需要一段包含了 canvas 的基础 html 代码 <!DOCTYPE html> ...
最新文章
- 舍不得孩子套不着狼,早就应该换SSD硬盘了!
- B-树和B+树的应用:数据搜索和数据库索引
- 白话Elasticsearch05- 结构化搜索之使用range query来进行范围过滤
- 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客
- 区块链技术应用的关键问题和挑战
- java+cache使用方法_java相关:Spring boot redis cache的key的使用方法
- java tomcat jndi,Tomcat JNDI 资源
- 微内核操作系统能做服务器系统吗,科普:微内核操作系统现状
- html5游戏开发box2djs,Box2D.js简易示例
- Jmeter系列之no-gui模式
- eclipse报错 : One or more constraints have not been satisfied.
- idea 格式化模板修改
- 点分十进制ip地址的理解
- 设备管理器---usb大容量储存设备感叹号,USB大容量存储设备无法启动
- 魅族计算机软件不见了,非常全面的魅族手机常见故障原因及解决办法
- Python批量合并多个excel文件
- USBCAN卡解决新能源汽车CAN总线测试问题
- 私网ip和公网ip_详解
- c语言printf小数乘整数,如何将小数化为整数
- C语言自学指南(总觉 光阴不够)