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 чтобы достичь нижней части экрана.

Любая помощь здесь приветствуется.

0 ответов

Другие вопросы по тегам