是否可以暂停CAEmitterLayer?

时间:2018-10-03 08:57:47

标签: ios swift core-animation pause caemitterlayer

我有一个CAEmitterLayer实例,它发出一些CAEmitterCells。我想知道,是否可以暂停这一层,以便不产生新的CAEmitterCells并将已产生的内容固定在屏幕上的位置?然后,当CAEmitterLayer实例为“未暂停”时,屏幕上固定的CAEmitterCells开始重新移动。

感谢您的帮助。

编辑

设置:

emitterLayer.speed = 0.1

其中emitterLayerCAEmitterLayer子类的实例,只需将图层从视图中完全删除

设置:

emitterLayer.lifetime = 0.0

只需停止生产任何新的emitterCells,但不会在当前位置“冻结”现有的emitterCells

1 个答案:

答案 0 :(得分:1)

您可以将lifetime的{​​{1}}属性设置为CAEmitterLayer,这将导致甚至不渲染新发出的单元格,但不影响已经存在的单元格。当您要“取消暂停”发射器层时,只需将0重置为暂停前的状态即可。

要冻结现有单元格,可以将lifetime设置为speed,还可以添加0

timeOffset

然后您可以像extension CAEmitterLayer { func pause() { // Freeze existing cells self.speed = 0 self.timeOffset = convertTime(CACurrentMediaTime(), from: self) // Stop creating new cells self.lifetime = 0 } }

那样简单地称呼它