如何让 CAEmitterLayer 一次只生成一个单元 swift 4
How can you make a CAEmitterLayer only spawn one cell at a time swift 4
我正在努力使我的 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
}
它只是细胞大小、速度、出生率和寿命的组合。这是完全独立的单元格的无聊流:
let cell = CAEmitterCell()
cell.birthRate = 5
cell.lifetime = 1
cell.velocity = 100
你呢,出生率很高,寿命很长:
cell.birthRate = 0.2
cell.lifetime = 100
这可以通过适当设置 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
}
结果
我正在努力使我的 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
}
它只是细胞大小、速度、出生率和寿命的组合。这是完全独立的单元格的无聊流:
let cell = CAEmitterCell()
cell.birthRate = 5
cell.lifetime = 1
cell.velocity = 100
你呢,出生率很高,寿命很长:
cell.birthRate = 0.2
cell.lifetime = 100
这可以通过适当设置 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
}
结果