Skip to content

Instantly share code, notes, and snippets.

@trilliwon
Created August 2, 2020 12:46
Show Gist options
  • Save trilliwon/29806d6509e8656b01f5a80687aa39b5 to your computer and use it in GitHub Desktop.
Save trilliwon/29806d6509e8656b01f5a80687aa39b5 to your computer and use it in GitHub Desktop.
import UIKit
class FireworkView: UIView {
private let emitterLayer = CAEmitterLayer()
private let emitterCell = CAEmitterCell()
private let trailCell = CAEmitterCell()
private let fireworkCell = CAEmitterCell()
// MARK: - Initializers
override init(frame frameRect: CGRect) {
super.init(frame: frameRect)
commonInit()
}
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
commonInit()
}
private func commonInit() {
setupEmitterLayer()
setupEmitterCell()
setupTrailCell()
setupFireworkCell()
emitterCell.emitterCells = [trailCell, fireworkCell]
emitterLayer.emitterCells = [emitterCell]
layer.addSublayer(emitterLayer)
}
private func setupEmitterLayer() {
emitterLayer.emitterSize = bounds.size
emitterLayer.emitterPosition = CGPoint(x: bounds.width / 2, y: bounds.height)
emitterLayer.renderMode = CAEmitterLayerRenderMode.additive
}
private func setupEmitterCell() {
emitterCell.color = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5).cgColor
emitterCell.redRange = 0.9
emitterCell.greenRange = 0.9
emitterCell.blueRange = 0.9
emitterCell.lifetime = 2.5
emitterCell.birthRate = 5
emitterCell.velocity = 300
emitterCell.velocityRange = 100
emitterCell.emissionRange = CGFloat.pi / 8
emitterCell.emissionLongitude = CGFloat.pi + CGFloat.pi / 2
emitterCell.yAcceleration = -100
}
private func setupTrailCell() {
trailCell.contents = UIImage(named: "particle")?.cgImage
trailCell.lifetime = 0.5
trailCell.birthRate = 30
trailCell.velocity = 80
trailCell.scale = 0.4
trailCell.alphaSpeed = -0.7
trailCell.scaleSpeed = -0.1
trailCell.scaleRange = 0.1
trailCell.beginTime = 0.01
trailCell.duration = 1.7
trailCell.emissionRange = CGFloat.pi / 8
trailCell.emissionLongitude = CGFloat.pi * 2
trailCell.yAcceleration = 350
}
private func setupFireworkCell() {
fireworkCell.contents = UIImage(named: "particle")?.cgImage
fireworkCell.lifetime = 100
fireworkCell.birthRate = 10000
fireworkCell.velocity = 130
fireworkCell.scale = 0.6
fireworkCell.spin = 2
fireworkCell.alphaSpeed = -0.2
fireworkCell.scaleSpeed = -0.1
fireworkCell.beginTime = 1.2
fireworkCell.duration = 0.1
fireworkCell.emissionRange = CGFloat.pi * 2
fireworkCell.yAcceleration = 80
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment