我有一个sCAEmitterLayer
数组CAEmitterCell
。我希望每个单元格的输出都混合在一起。现在,数组中的第一个单元格总是在其他单元格上方绘制。
我已经调整了renderMode
图层和zAcceleration
每个单元格的 ,但都没有解决这个问题。
一些示例代码:
func layoutSubviews() {
// ...
emitterLayer.frame = self.bounds
emitterLayer.seed = UInt32(Date().timeIntervalSinceNow)
emitterLayer.renderMode = kCAEmitterLayerOldestFirst
emitterLayer.emitterPosition = CGPoint(x: bounds.midX, y: bounds.midY)
emitterLayer.emitterSize = CGSize.init(width: bounds.width, height: 0)
emitterLayer.emitterShape = kCAEmitterLayerLine
self.layer.addSublayer(emitterLayer)
}
private func animate() {
// ...
if emitterLayer.emitterCells == nil || emitterLayer.emitterCells?.count == 0 {
let cells = (1...8).map { i -> CAEmitterCell in
if let img = UIImage.init(named: "Slice-\(i)") {
return createEmitterCell(image: img, index: i)
} else {
fatalError()
}
}
emitterLayer.emitterCells = cells
}
}
private func createEmitterCell(image: UIImage, index: Int) -> CAEmitterCell {
let cell = CAEmitterCell.init()
cell.isEnabled = true
cell.contents = image.cgImage
cell.contentsRect = CGRect(origin: CGPoint.zero, size: CGSize(width: 1, height: 1))
cell.birthRate = Float(index)
cell.lifetime = 3
cell.velocity = 7
cell.velocityRange = 3
cell.scale = 0.5
cell.emissionRange = (95 * CGFloat.pi / 180.0)
cell.emissionLatitude = (27 * CGFloat.pi / 180.0)
cell.emissionLongitude = (139 * CGFloat.pi / 180.0)
cell.xAcceleration = 10.0
cell.yAcceleration = 100.0
cell.zAcceleration = 10 * CGFloat(index)
return cell
}