Как сделать так, чтобы CAEmitterLayer порождал только одну ячейку за один раз? 4 - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь сделать так, чтобы мой объект CAEmitterLayer порождал только одну ячейку за раз. Когда срок жизни ячейки истечет, я хочу создать следующую и так далее. Причина этого в том, что они продолжают перекрывать друг друга, заставляя его выглядеть ужасно.

Я попробовал документацию на яблоки и не смог найти ничего полезного. https://developer.apple.com/documentation/quartzcore/caemitterlayer

func setUpEmitter(){
    let emitter = CAEmitterLayer()
    emitter.emitterPosition = CGPoint(x: view.frame.width / 2, y: 0)
    emitter.emitterSize = CGSize(width: view.frame.width, height: 2)
    emitter.emitterShape = CAEmitterLayerEmitterShape.line
    emitter.emitterCells = generateEmitterCells()
    view.layer.insertSublayer(emitter, at: 0)
    // TutorialView.layer.addSublayer(emitter)

}

func generateEmitterCells() -> [CAEmitterCell]{
    var cells = [CAEmitterCell]()

    let cell = CAEmitterCell()
    cell.contents = UIImage(named: "startVCversion3")!.cgImage
    cell.birthRate = 0.2
    cell.lifetime = 100
    cell.velocity = CGFloat(55)
    cell.emissionLongitude = (180 * (.pi/180))
    cell.emissionRange = (45 * (.pi/180))
    cell.scale = 1
    cell.scaleRange = 1

    cells.append(cell)
    return cells
}

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Это может быть достигнуто путем правильной настройки bithRate и lifetime.Birthrate определяется как количество объектов, создаваемых в секунду, а lifetime - это количество секунд, в течение которых живет объект.

Комбинация, подобная этой, прекрасно работает:

func generateEmitterCells() -> [CAEmitterCell]{
        var cells = [CAEmitterCell]()
        let cell = CAEmitterCell()
        cell.contents = UIImage(named: "Circle@3x")!.cgImage
        cell.birthRate = 0.5
        cell.lifetime = 2
        cell.velocity = CGFloat(55)
        cell.emissionLongitude = (180 * (.pi/180))
        cell.emissionRange = (45 * (.pi/180))
        cell.scale = 1
        cell.scaleRange = 1

        cells.append(cell)
        return cells
    }

Результат

enter image description here

0 голосов
/ 03 января 2019

Это просто сочетание размера, скорости, рождаемости и времени жизни клеток.Это скучный поток совершенно отдельных клеток:

    let cell = CAEmitterCell()
    cell.birthRate = 5
    cell.lifetime = 1
    cell.velocity = 100

У вас, с другой стороны, очень быстрая рождаемость и очень долгая жизнь:

    cell.birthRate = 0.2
    cell.lifetime = 100
...