平滑核心动画雪景效果

最近,我决定制作一个雪景动画以纪念即将到来的假期! 实际的动画比下面的gif平滑得多,但可以给您一个提示🙂

令人惊讶的是,不需要很多代码。

创建动画的步骤

  • 从雪花资产创建CAEmitterCell
  • CAEmitterCell创建一个CAEmitterCell
  • 下雪了!

CAEmitterCell

CAEmitterCell类表示由CAEmitterLayer对象发射的粒子的一种来源。 发射器单元定义了发射粒子的方向和属性。 发射器单元可以具有一个子单元阵列,该单元可以使粒子本身发射粒子。

通过此类,可以非常轻松地配置雪花的外观。 我强烈建议您阅读他们的文档以了解更多信息!

 让flakeEmitterCell = CAEmitterCell() 
flakeEmitterCell.contents = UIImage(named:“ snowFlake”)?. cgImage
flakeEmitterCell.scale = 0.06
flakeEmitterCell.scaleRange = 0.3
flakeEmitterCell.emissionRange = .pi
flakeEmitterCell.lifetime = 20.0
flakeEmitterCell.birthRate = 40
flakeEmitterCell.velocity = -30
flakeEmitterCell.velocityRange = -20
flakeEmitterCell.yAcceleration = 30
flakeEmitterCell.xAcceleration = 5
flakeEmitterCell.spin = -0.5
flakeEmitterCell.spinRange = 1.0

CAEmitterLayer

发射,设置动画和渲染粒子系统的层。

我发现该课程非常强大。 例如,设置timeOffset允许动画以偏移量开始,因此用户将自动看到雪花从一开始就覆盖了整个屏幕。

 让snowEmitterLayer = CAEmitterLayer() 
snowEmitterLayer.emitterPosition = CGPoint(x:view.bounds.width / 2.0,y:-50)
snowEmitterLayer.emitterSize = CGSize(width:view.bounds.width,height:0)
snowEmitterLayer.emitterShape = kCAEmitterLayerLine
snowEmitterLayer.beginTime = CACurrentMediaTime()
snowEmitterLayer.timeOffset = 10
snowEmitterLayer.emitterCells = [flakeEmitterCell]
  view.layer.addSublayer(snowEmitterLayer) 

而已!

这是一个GitHub链接,可用于实际操作。