如何使CAEmitterLayer一次仅快速生成一个单元格4

时间:2019-01-03 17:41:28

标签: ios swift caemitterlayer

我试图做到这一点,所以我的CAEmitterLayer对象一次只能生成一个单元格。细胞寿命到期后,我想产生下一个,依此类推。这样做的原因是因为它们不断重叠,使它看起来很糟糕。

我尝试了apples文档,但找不到任何有用的东西。 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 :(得分:1)

这只是细胞的大小,速度,出生率和寿命的组合。这是无聊的完全独立的单元格流:

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

另一方面,您的出生速度非常快,寿命也很长:

    cell.birthRate = 0.2
    cell.lifetime = 100

答案 1 :(得分:1)

这可以通过正确设置<select class="form-control" data-bind="options: baseViewModel.filtersViewModel, optionsCaption: 'Choose...', optionsText: function(self) { return self.Name }, value: baseViewModel.baseFilter(), optionsValue: 'Value', event: { change: function() { console.log('test'); applyFilter(baseViewModel.baseFilter()); return true; } }"> <option value="">Choose...</option> <option value="{'sort':[]}">water group</option> </select> bithRate来实现。 lifetime定义为每秒创建的对象数,Birthrate是对象存活的秒数。

这样的组合效果很好:

lifetime

结果

enter image description here