У меня есть UIButton
, который запускает создание CAEmitterLayer
, используя 4 UIImage
s для свойства emitterCells
следующим образом:
func createEmitter(withImages images: [UIImage]) {
let emitter = CAEmitterLayer()
emitter.beginTime = CACurrentMediaTime()
emitter.emitterShape = kCAEmitterLayerLine
var emitterCells = [CAEmitterCell]()
for image in images {
let cell = CAEmitterCell()
cell.contents = image.cgImage
cell.birthRate = 0.25
cell.lifetime = 60.0
cell.velocity = -25.0
cell.velocityRange = 10.0
cell.emissionRange = 0.785
cell.spin = 0.0
cell.spinRange = 0.5
cell.scale = 0.5
cell.scaleRange = 0.5
emitterCells.append(cell)
}
emitter.emitterCells = emitterCells
emitter.emitterPosition = CGPoint(x: view.frame.width * 0.5, y: -size.width)
emitter.emitterSize = CGSize(width: view.frame.width, height: 1)
view.layer.addSublayer(emitter)
}
Это дает снежный эффект длякаждое из 4 изображений, что я и хочу. Тем не менее, я хочу, чтобы только 4 из этих ячеек-излучателей были сгенерированы, а затем опустились до нижнего края экрана. После чего слой излучателя должен быть удален.
I 'мы пытались установить emitter.repeatCount=0
, но это не работает.
Я также пытался использовать:
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
emitter.lifetime = 0.0
}
, который останавливает emitter
, чтобы производить больше, но в произвольное время,что может не соответствовать 4 излучаемым ячейкам.Кроме того, я не могу позвонить emitter.removeFromSuperlayer()
, поскольку хочу, чтобы emitterCells
достиг нижней части экрана.
Любая помощь здесь приветствуется.