CAEmitterLayer: только выпуск четырех CAEmitterCells
У меня есть UIButton
что вызывает создание CAEmitterLayer
используя 4 UIImage
с для 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 из этих ячеек-излучателей были сгенерированы, а затем выпали вниз до нижней части экрана. После чего слой эмиттера должен быть удален.
Я пытался установить emitter.repeatCount=0
но это не работает.
Я также пытался использовать:
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
emitter.lifetime = 0.0
}
который останавливает emitter
от производства большего количества, но в произвольное время, которое может не соответствовать 4 испускаемым ячейкам. Кроме того, я не могу позвонить emitter.removeFromSuperlayer()
как я хочу emitterCells
чтобы достичь нижней части экрана.
Любая помощь здесь приветствуется.