是否可以暂停 CAEmitterLayer?
Is it possible to pause a CAEmitterLayer?
我有一个 CAEmitterLayer
实例发出一些 CAEmitterCells
。我想知道,是否可以暂停这一层,这样就不会产生新的 CAEmitterCells
并且已经产生的那些在屏幕上的位置保持固定?然后,当CAEmitterLayer
实例为"un-paused"时,屏幕上固定的CAEmitterCells
又开始移动了。
在此感谢您的帮助。
编辑
设置:
emitterLayer.speed = 0.1
其中 emitterLayer
是 CAEmitterLayer
的子类的实例,只是 完全从视图中删除图层 。
设置:
emitterLayer.lifetime = 0.0
只是停止生成任何新的emitterCells
但不会"freeze"当前位置的现有emitterCells
[=21] =]
可以将CAEmitterLayer
的lifetime
属性设置为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()
我有一个 CAEmitterLayer
实例发出一些 CAEmitterCells
。我想知道,是否可以暂停这一层,这样就不会产生新的 CAEmitterCells
并且已经产生的那些在屏幕上的位置保持固定?然后,当CAEmitterLayer
实例为"un-paused"时,屏幕上固定的CAEmitterCells
又开始移动了。
在此感谢您的帮助。
编辑
设置:
emitterLayer.speed = 0.1
其中 emitterLayer
是 CAEmitterLayer
的子类的实例,只是 完全从视图中删除图层 。
设置:
emitterLayer.lifetime = 0.0
只是停止生成任何新的emitterCells
但不会"freeze"当前位置的现有emitterCells
[=21] =]
可以将CAEmitterLayer
的lifetime
属性设置为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()