是否可以暂停 CAEmitterLayer?

Is it possible to pause a CAEmitterLayer?

我有一个 CAEmitterLayer 实例发出一些 CAEmitterCells。我想知道,是否可以暂停这一层,这样就不会产生新的 CAEmitterCells 并且已经产生的那些在屏幕上的位置保持固定?然后,当CAEmitterLayer实例为"un-paused"时,屏幕上固定的CAEmitterCells又开始移动了。

在此感谢您的帮助。

编辑

设置:

emitterLayer.speed = 0.1

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

设置:

emitterLayer.lifetime = 0.0

只是停止生成任何新的emitterCells但不会"freeze"当前位置的现有emitterCells[=21] =]

可以将CAEmitterLayerlifetime 属性设置为0,这会导致新发射的单元格甚至不被渲染,而是保留已经存在的单元格细胞不受影响。当你想要 "un-pause" 发射器层时,你可以简单地将 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
    }
}

然后你可以简单地称它为emitterLayer.pause()