基于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流星雨效果如何实现相关推荐

  1. android 矢量粒子动画,iOS CAEmitterLayer实现粒子发射动画效果

    iOS实现粒子发射动画效果图 动画效果用 CAEmitterLayer 实现.CAEmitterLayer 显示粒子发射动画,具体的粒子由 CAEmitterCell 封装.代码示例是展示 CAEmi ...

  2. H5实例教学--ThreeJs 实现粒子动画飘花效果

    粒子动画在ThreeJs可以用几种方式实现 本次样例使用Sprite类来构建粒子 官方对Sprite类的解释 Sprite A sprite is a plane that always faces ...

  3. html 页面飘花,HTML5开发实例-ThreeJs实现粒子动画飘花效果代码分享

    粒子动画在ThreeJs可以用几种方式实现 本次样例使用Sprite类来构建粒子 大概意思:这个类创建的对象是一个始终面向相机的平面,可以把贴图应用在上面,Sprite对象无法添加阴影 ,所以cast ...

  4. python 粒子动画_python-pygame-粒子效果

    您可能只想制作一个由矩形构成的类,每次更新烟熏时,它们都会向上和向左或向左随机移动.然后在需要时将它们制成大量.我将在下面尝试创建一个示例代码,但是我无法保证它会起作用.您可以为其他粒子效果创建类似的 ...

  5. android 烟雾动画,android使用粒子动画实现炊烟袅袅的效果

    很久以前,做了一个关于旅游景区的项目,要求在等待页面实现一个炊烟袅袅升起的效果,本来是没有这个的,鬼知道我们的ios大神(坑货)从哪找来的,我们项目经理一看非常满意,要我们也加一个!(团队有这样的大神 ...

  6. html5 粒子动画效果制作,8款惊艳的HTML5粒子动画特效

    原标题:8款惊艳的HTML5粒子动画特效 HTML5确实非常强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷的粒子动画效果,粒子动画在HTML5应用中也是比较消耗本地资源的,尤其是CPU,但 ...

  7. html5粒子效果,8款惊艳的HTML5粒子动画特效

    [导读] HTML5确实强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷的粒子动画效果,粒子动画在HTML5应用中也是比较消耗本地资源的,尤其是CPU,但是有些HTML5粒子效果确实能给用户 ...

  8. 视觉粒子html,带视觉差效果可互动的背景粒子动画特效

    这是一款效果非常炫酷的jQuery和CSS3网页背景粒子动画特效.该背景特效中粒子可以使用鼠标来进行互动,并且在粒子运动的过程中带有一些视觉差特效. 制作方法 HTML结构 这个背景粒子动画特效的HT ...

  9. Javascript Canvas 实现粒子动画效果分享

    今天和大家一起分享一下用 canvas 实现粒子动画效果的实现,就像下图的效果 要实现这样的效果,我们首先需要一段包含了 canvas 的基础 html 代码 <!DOCTYPE html> ...

最新文章

  1. 舍不得孩子套不着狼,早就应该换SSD硬盘了!
  2. B-树和B+树的应用:数据搜索和数据库索引
  3. 白话Elasticsearch05- 结构化搜索之使用range query来进行范围过滤
  4. 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客
  5. 区块链技术应用的关键问题和挑战
  6. java+cache使用方法_java相关:Spring boot redis cache的key的使用方法
  7. java tomcat jndi,Tomcat JNDI 资源
  8. 微内核操作系统能做服务器系统吗,科普:微内核操作系统现状
  9. html5游戏开发box2djs,Box2D.js简易示例
  10. Jmeter系列之no-gui模式
  11. eclipse报错 : One or more constraints have not been satisfied.
  12. idea 格式化模板修改
  13. 点分十进制ip地址的理解
  14. 设备管理器---usb大容量储存设备感叹号,USB大容量存储设备无法启动
  15. 魅族计算机软件不见了,非常全面的魅族手机常见故障原因及解决办法
  16. Python批量合并多个excel文件
  17. USBCAN卡解决新能源汽车CAN总线测试问题
  18. 私网ip和公网ip_详解
  19. c语言printf小数乘整数,如何将小数化为整数
  20. C语言自学指南(总觉 光阴不够)

热门文章

  1. 树莓派安装网易云音乐amd64(Exagear)
  2. c 语言中是什么作用是什么意思,在C语言中%C是什么意思
  3. Zabbix监控web基本配置
  4. golang学习之negroni/gizp源码分析
  5. 测试工程师等级评定细则
  6. 盘点 10大 数据库!
  7. 开源作者遭受小白的9种伤害
  8. Python迷宫生成器
  9. 工厂IT人员如何自学ERP系统
  10. 协同过滤算法的简单理解《推荐系统实践》