使用CAEmitterLayer做出雪花煙火效果

需要注意的是角度的計算與發射的方向

做了冰花在畫面搖擺還有煙火從101往右上發射

//""冰花"" 產生CAEmitterLayer()跟CAEmitterCell()的元件let snowflakeEmitterLayer = CAEmitterLayer()let snowflakeEmitterCell = CAEmitterCell()snowflakeEmitterLayer.emitterSize = CGSize(width: view.bounds.width, height: view.bounds.height)//發射起點snowflakeEmitterLayer.emitterPosition = CGPoint(x: view.bounds.width / 2, y: view.bounds.height / 2)//粒子從具有相對角的矩形發射snowflakeEmitterLayer.emitterShape = .rectanglesnowflakeEmitterCell.contents = UIImage(named: "snowflake")?.cgImagesnowflakeEmitterCell.lifetime = 5.5snowflakeEmitterCell.birthRate = 50snowflakeEmitterCell.velocity = 10snowflakeEmitterCell.velocityRange = 300snowflakeEmitterCell.scale = 0.5snowflakeEmitterCell.scaleRange = 1.3snowflakeEmitterCell.emissionRange = CGFloat.pi / 2snowflakeEmitterCell.emissionLongitude = CGFloat.pisnowflakeEmitterCell.yAcceleration = -70snowflakeEmitterCell.scaleSpeed = -0.1//由上而下的加速度snowflakeEmitterCell.yAcceleration = 30snowflakeEmitterLayer.emitterCells = [snowflakeEmitterCell]view.layer.addSublayer(snowflakeEmitterLayer)//""煙火"" 產生CAEmitterLayer()跟CAEmitterCell()的元件let fireEmitterLayer = CAEmitterLayer()let firstEmitterCell = CAEmitterCell()let trailCell = CAEmitterCell()let fireworkCell = CAEmitterCell()fireEmitterLayer.emitterSize = CGSize(width: view.bounds.width, height: view.bounds.height)//發射起點fireEmitterLayer.emitterPosition = CGPoint(x: view.bounds.width / 2, y: view.bounds.height / 1.5)//加渲染效果fireEmitterLayer.renderMode = .additivefirstEmitterCell.color = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5).cgColorfirstEmitterCell.redRange = 0.9firstEmitterCell.greenRange = 0.9firstEmitterCell.blueRange = 0.9firstEmitterCell.lifetime = 2.5firstEmitterCell.birthRate = 5firstEmitterCell.velocity = 300firstEmitterCell.velocityRange = 100firstEmitterCell.emissionRange = CGFloat.pi / 4firstEmitterCell.emissionLongitude = CGFloat.pi + 90firstEmitterCell.yAcceleration = 100trailCell.contents = UIImage(named: "particle")?.cgImagetrailCell.lifetime = 0.5trailCell.birthRate = 300trailCell.velocity = 80trailCell.scale = 0.4trailCell.alphaSpeed = -0.7trailCell.scaleSpeed = -0.1trailCell.scaleRange = 0.1trailCell.beginTime = 0.01trailCell.duration = 1.7trailCell.emissionRange = CGFloat.pi / 8trailCell.emissionLongitude = CGFloat.pi * 2trailCell.yAcceleration = -350fireworkCell.contents = UIImage(named: "particle")?.cgImagefireworkCell.lifetime = 100fireworkCell.birthRate = 20000fireworkCell.velocity = 130fireworkCell.scale = 0.6fireworkCell.spin = 2fireworkCell.alphaSpeed = -0.2fireworkCell.scaleSpeed = -0.1fireworkCell.beginTime = 1.5fireworkCell.duration = 0.1fireworkCell.emissionRange = CGFloat.pi * 2fireworkCell.yAcceleration = -80//firstEmitterCell是trailCell和fireworksCell的容器firstEmitterCell.emitterCells = [trailCell, fireworkCell]fireEmitterLayer.emitterCells = [firstEmitterCell]view.layer.addSublayer(fireEmitterLayer)

--

--