使用粒子动画,让你的APP下点儿雪

2017-01-14 10:20:55来源:http://www.jianshu.com/p/1cf3c003e14d作者:庸者的救赎人点击



又是一年
废话

最近气温骤降,分分钟感觉要下雪的样子,一想到雪,就想到过年了,一想到过年我就...


然而都过年了,我还没挣到钱...


算了,还是想想雪吧…


如果能使用代码,让自己的App下点儿雪,想想都cool到没朋友了


唉,不废话了,先看看效果



效果
具体实现

代码实现方面其实没有啥技巧,咱们就直接上


要实现粒子动画需要使用一个叫CAEmitterLayer的类,这个东西在QuartzCore框架里面,是一个直接作用与layer层的框架


相关代码:


class SnowView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
let emitter = self.layer as! CAEmitterLayer // 修改view的layer
emitter.emitterPosition = CGPoint(x: bounds.size.width/2, y: 0) // 发射粒子的位置
emitter.emitterSize = bounds.size // 范围
emitter.emitterShape = kCAEmitterLayerRectangle // 粒子形状
let emitterCell = CAEmitterCell() // 创建粒子
emitterCell.contents = UIImage(named: "flake")!.cgImage // 载入粒子图片
emitterCell.birthRate = 200 // 每秒释放多少个粒子
emitterCell.lifetime = 3.5 // 每个粒子的生命周期
emitterCell.color = UIColor.white.cgColor // 粒子的颜色
emitterCell.redRange = 0.0 // RGBA设置
emitterCell.blueRange = 0.1
emitterCell.greenRange = 0.0
emitterCell.alphaRange = 0.5
emitterCell.velocity = 9.8 // 重力加速度也就是物理里面G
emitterCell.velocityRange = 350 // 加速范围
emitterCell.emissionRange = CGFloat(M_PI_2) // 下落是旋转的角度
emitterCell.emissionLongitude = CGFloat(-M_PI) //
emitterCell.yAcceleration = 70 // 发射速度
emitterCell.xAcceleration = 0
emitterCell.scale = 0.33
emitterCell.scaleRange = 1.25
emitterCell.scaleSpeed = -0.25
emitterCell.alphaRange = 0.5
emitterCell.alphaSpeed = -0.15
emitter.emitterCells = [emitterCell] // 载入
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override class var layerClass: AnyClass {
return CAEmitterLayer.self
}
}

上面这段代码,是雪花粒子动画的完整实现,注释写的很清楚,这里需要注意的就是后面这几句


override class var layerClass: AnyClass {
return CAEmitterLayer.self
}

这里一定要重载layer属性,不然开头第一句的强转会崩溃,你懂的


let emitter = self.layer as! CAEmitterLayer

行了,下雪了...


根据需求改变

可如果代码就这么实现,就安心了,太不符合程序员的逼格了


在实际的开发中可能会遇到各种问题:


比如产品经理说:我要做到想在哪里下雪就在那里下雪...


WTF!!!


产品经理就是这么任性


怎么办?


通常的处理方法有以下几种:


子类化
写到分类/扩展里面

如果你能想到子类化,说明你是有面向对象思想的(当然有没有对象就不知道了

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台