CAEmitterLayer: только выпустить четыре CAEmitterCells - PullRequest
0 голосов
/ 26 сентября 2018

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

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

...