0

我有一个CAEmitterLayer实例会发出一些CAEmitterCells. 我想知道,是否可以暂停这一层,这样就不会产生新CAEmitterCells的层,而已经产生的层仍然固定在屏幕上的位置?然后,当CAEmitterLayer实例“未暂停”时,CAEmitterCells屏幕上的固定点再次开始移动。

感谢您在这里的任何帮助。

编辑

环境:

emitterLayer.speed = 0.1

whereemitterLayer是 的子类的实例CAEmitterLayer,只是从视图中完全删除该层

环境:

emitterLayer.lifetime = 0.0

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

4

1 回答 1

2

您可以将 to 的lifetime属性设置CAEmitterLayer0,这将导致新发出的单元格甚至不被渲染,但会使已经存在的单元格不受影响。当您想“取消暂停”您的发射器层时,您可以简单地重置lifetime为暂停前的状态。

要同时冻结现有单元格,您可以设置speed0添加一个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()

于 2018-10-03T09:04:22.450 回答