欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

iOS实现“下雨下雪”动画效果和“烟花”动画效果

发布时间:2024/5/21 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 iOS实现“下雨下雪”动画效果和“烟花”动画效果 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

“下雨”的动画效果

一、效果展示

二、实现流程

  • 设置背景
func setupUI() {self.imageView = UIImageView.init()self.imageView?.frame = CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)self.imageView?.image = UIImage.init(named: "rain")self.view.addSubview(self.imageView!)self.view.sendSubviewToBack(self.imageView!)}
  • 设置发射源
self.rainLayer = CAEmitterLayer.init()self.imageView?.layer.addSublayer(self.rainLayer!)// 发射形状:线性self.rainLayer!.emitterShape = CAEmitterLayerEmitterShape.line// 发射模式self.rainLayer!.emitterMode = CAEmitterLayerEmitterMode.surface// 发射源大小self.rainLayer!.emitterSize = self.view.frame.size// 发射源位置 y最好不要设置为0 最好<0self.rainLayer!.emitterPosition = CGPoint.init(x: self.view.bounds.size.width * 0.5, y: -10)
  • 设置发射粒子
let snowCell = CAEmitterCell.init()// 每秒产生的粒子数量的系数snowCell.birthRate = 25.0// 粒子内容snowCell.contents = UIImage.init(named: "rain_white")?.cgImage// 粒子的生命周期snowCell.lifetime = 20.0// speed粒子速度.图层的速率。用于将父时间缩放为本地时间,例如,如果速率是2,则本地时间的进度是父时间的两倍。默认值为1snowCell.speed = 10.0// 粒子速度系数, 默认1.0snowCell.velocity = 10.0// 每个发射物体的初始平均范围,默认等于0snowCell.velocityRange = 10.0// 粒子在y方向的加速的snowCell.yAcceleration = 1000.0// 粒子缩放比例: scalesnowCell.scale = 0.1// 粒子缩放比例范围:scaleRangesnowCell.scaleRange = 0.0self.rainLayer?.emitterCells = [snowCell]
  • 点击事件处理
// MARK: Events Responder@IBAction func responderToRainBig(_ sender: UIButton) {if self.rainLayer!.birthRate < 30 {self.rainLayer?.setValue(self.rainLayer!.birthRate + 1, forKey: "birthRate")self.rainLayer?.setValue(self.rainLayer!.scale + 0.05, forKey: "scale")}}@IBAction func respondertToRainStop(_ sender: UIButton) {sender.isSelected = !sender.isSelectedif sender.isSelected {self.rainLayer?.setValue(0.0, forKey: "birthRate")} else {self.rainLayer?.setValue(1.0, forKey: "birthRate")}}@IBAction func responderToRainSmall(_ sender: UIButton) {if self.rainLayer!.birthRate > 1 {self.rainLayer?.setValue(self.rainLayer!.birthRate - 1, forKey: "birthRate")self.rainLayer?.setValue(self.rainLayer!.scale - 0.05, forKey: "scale")}}

“烟花”的动画效果

一、效果展示

实现
self.view.backgroundColor = UIColor.black// cell产生在底部,向上移动let fireworkdEmitter = CAEmitterLayer.init()fireworkdEmitter.emitterPosition = CGPoint.init(x: self.view.frame.size.width/2, y: self.view.frame.size.height)fireworkdEmitter.emitterMode = CAEmitterLayerEmitterMode.outlinefireworkdEmitter.emitterShape = CAEmitterLayerEmitterShape.linefireworkdEmitter.renderMode = CAEmitterLayerRenderMode.additivefireworkdEmitter.seed = (arc4random()%100)+1// 创建火箭celllet rocket = CAEmitterCell.init()rocket.birthRate = 1rocket.emissionRange = CGFloat(0.25 * Double.pi);rocket.velocity = 300rocket.velocityRange = 75rocket.lifetime = 1.02rocket.contents = UIImage.init(named: "rain_white")?.cgImagerocket.scale = 0.5rocket.scaleRange = 0.5rocket.color = UIColor.red.cgColorrocket.greenRange = 1.0rocket.redRange = 1.0rocket.blueRange = 1.0rocket.spinRange = CGFloat(Double.pi)// 破裂对象不能被看到,但会产生火花// 这里改变颜色,因为火花继承它的值let fireCell = CAEmitterCell.init()fireCell.birthRate = 1fireCell.velocity = 0fireCell.scale = 1fireCell.redSpeed = -1.5fireCell.blueSpeed = +1.5fireCell.greenSpeed = +1.5fireCell.lifetime = 0.34// and finally, the sparkslet spark = CAEmitterCell.init()// 炸开后产生400个小烟花spark.birthRate = 400// 速度spark.velocity = 125// 360度spark.emissionRange = CGFloat(2 * Double.pi)// 重力spark.yAcceleration = 40spark.lifetime = 3spark.contents = UIImage.init(named: "rain_white")?.cgImagespark.scaleSpeed = -0.2spark.greenSpeed = -0.1spark.redSpeed = +0.1spark.blueSpeed = -0.1spark.alphaSpeed = -0.25spark.spin = CGFloat(2 * Double.pi)spark.spinRange = CGFloat(2 * Double.pi)fireworkdEmitter.emitterCells = [rocket]rocket.emitterCells = [fireCell]fireCell.emitterCells = [spark];self.view.layer.addSublayer(fireworkdEmitter)

完整示例

  • iOS实现各种粒子的动画效果

总结

以上是生活随笔为你收集整理的iOS实现“下雨下雪”动画效果和“烟花”动画效果的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。