我有一个CAEmitterLayer
实例,它发出一些CAEmitterCells
。我想知道,是否可以暂停这一层,以便不产生新的CAEmitterCells
并将已产生的内容固定在屏幕上的位置?然后,当CAEmitterLayer
实例为“未暂停”时,屏幕上固定的CAEmitterCells
开始重新移动。
感谢您的帮助。
编辑
设置:
emitterLayer.speed = 0.1
其中emitterLayer
是CAEmitterLayer
子类的实例,只需将图层从视图中完全删除。
设置:
emitterLayer.lifetime = 0.0
只需停止生产任何新的emitterCells
,但不会在当前位置“冻结”现有的emitterCells
。
答案 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
}
}