我有一个CAEmitterLayer实例,它发出一些CAEmitterCells。我想知道,是否有可能暂停这一层,这样就不会产生新的CAEmitterCells,并且已经产生的那些仍然固定在屏幕上的位置上?然后,当CAEmitterLayer实例“未暂停”时,屏幕上的固定CAEmitterCells再次开始移动。
谢谢你的帮忙。
编辑
设置:
emitterLayer.speed = 0.1如果emitterLayer是CAEmitterLayer子类的一个实例,那么只需就可以从视图中完全删除该层。
设置:
emitterLayer.lifetime = 0.0just 将停止生产任何新的,但不会将现有的“冻结”在当前的位置。
发布于 2018-10-03 09:04:22
您可以将CAEmitterLayer的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
}
}然后您就可以像emitterLayer.pause()一样简单地调用它
https://stackoverflow.com/questions/52623296
复制相似问题