[核心动画]您对CAEmitterLayer有什么了解?

CAEmitterLayer是一种高性能的粒子引擎,旨在创建诸如火,雨,烟,雪等的粒子动画。

CAEmitterLayer是用于定义粒子效果的CAEmitterCell实例集合的容器。 您可以创建一个或多个CAEmitterCell对象作为模板 对于不同的粒子类型。 CAEmitterLayer负责根据这些模板实例化粒子流。

发射极层和电池特性如何?


CAEmitterLayer属性

CAEmitterLayer的属性控制粒子系统的位置和形状。 在birthRate上指定的属性诸如birthRatelifetimevelocity重复值。 它们作为乘数工作。 您可以使用单个值来加快或增加整个粒子系统。

其他重要特性:

  • renderMode :定义如何将粒子单元渲染到图层中。
  • preservesDepth :定义3D粒子系统是扁平化为单层(默认情况下)还是可以与其容器层的3D空间中的其他层融合。

您可以在此处检查CAEmitterLayer的许多其他可配置属性。


CAEmitterCell属性

CAEmitterCell的属性分为三类:

  • 粒子特定属性的起始值 。 例如, color属性定义将与contents图像中的颜色组合的混合颜色。
  • 特定属性的值在粒子之间变化的范围。 例如,如果将emissionRange属性设置为2π,则可以在360度半径内的任何方向上发射粒子。 如果指定较小的值,则可以为粒子创建圆锥形漏斗。
  • 特定值随时间的变化 。 例如,如果将alphaSpeed设置为-0.1,则粒子的alpha值将每秒减少0.1。 当粒子从发射器离开时,它还会为粒子创建淡入淡出效果。

最重要的属性是:

  • CGImage :分配一个CGImage用作图像。
  • color :设置要应用于每个粒子的颜色。
  • alphaSpeed :设置在单元的整个生命周期内,粒子淡出或淡入(以秒为单位)的速度。
  • birthRate :设置birthRate要创建多少个粒子。
  • lifetime :设置每个粒子应生存的时间(以秒为单位)。
  • velocity :设置每个粒子的基本移动速度。
  • velocityRange :设置可改变像元速度的量。
  • scale :设置应有多大的粒子(全尺寸为1.0)。
  • scaleRange :设置可改变单元格规模的数量。
  • spin :设置应用于单元的旋转速度。
  • spinRange :设置单元格旋转的数量。

您可能会注意到,每个属性都有对应的SpeedRange速度定义值随时间变化多少。 范围定义初始值有多少变化。

您可以在此处检查CAEmitterCell的许多其他可配置属性。


我们将创建简单的macOS应用程序,以显示CAEmitterLayer的不同用法

示例1:下雪。

那编程代码呢?

简单的代码示例。

另外,您可以看到编程代码。

看下面的代码。

您可以看到三个CAEmitterCell对象。 其中之一, emitterCell ,是trailCellfireworksCell的容器。 CAEmitterCell有一个属性emitterCells 。 这意味着该单元可以具有一个可选的子单元阵列。


总而言之, CAEmitterLayer是一个发射,动画化和渲染粒子系统的层。

CAEmitterLayer定义了粒子系统的位置,形状,大小和渲染模式,但实际上它没有定义任何粒子-由CAEmitterCell处理。 您可以根据需要创建任意数量的发射器单元,然后将它们分配给发射器层。


谢谢阅读! 我希望这些信息对您有用。 如果您觉得本文有用,请不要忘记to。