您的位置:首页 > 其它

Cocoa层粒子发射器动画添加多个cell的一种重构

2016-06-08 14:11 330 查看
在iOS动画之旅第19章中最后的挑战中需要我们在雪花例子发生器中添加多个雪花贴图,也就是多个cell,因为我们不可能将每个cell的参数都重新写一遍,所以有必要写一个helper方法来做这件事:

func getCellByImgName(name:String)->CAEmitterCell{

}


将原来viewDidLoad方法中与cell相关的代码拷贝进来,但除了几处小的修改:

let emitterCell = CAEmitterCell()
emitterCell.contents = UIImage(named: name)!.CGImage
emitterCell.birthRate = 50
emitterCell.lifetime = 3.5
emitterCell.lifetimeRange = 1.0

emitterCell.yAcceleration = 70.0
emitterCell.xAcceleration = 10.0
emitterCell.velocity = 20.0
emitterCell.emissionLongitude = CGFloat(-M_PI)

emitterCell.velocityRange = 200.0
emitterCell.emissionRange = CGFloat(M_PI_2)

emitterCell.color = UIColor(red: 0.9, green: 1.0, blue: 1.0, alpha: 1.0).CGColor
emitterCell.redRange = 0.1
emitterCell.greenRange = 0.1
emitterCell.blueRange = 0.1

emitterCell.scale = 0.8
emitterCell.scaleRange = 0.8
emitterCell.scaleSpeed = -0.15

//emitterCell.birthRate = 150

emitterCell.alphaRange = 0.75
emitterCell.alphaSpeed = -0.15
return emitterCell


如上,将UIImage构造器中的字面值换为参数值,并且将以下一句删掉:

emitter.emitterCells = [emitterCell]


回到viewDidLoad中,连续添加3个新方法的调用:

emitter.emitterCells?.append(getCellByImgName("flake.png"))
emitter.emitterCells?.append(getCellByImgName("flake3.png"))
emitter.emitterCells?.append(getCellByImgName("flake4.png"))


运行App,咦!?怎么神马也不显示?

在第一个getCellByImgName调用的地方下断点,发现根本没有调用该方法.原来是没有给发射器的emitterCells赋初始化值,因为该值是可选调用,如果是nil自然忽略喽!

在第一个getCellByImgName调用前面添加一行:

emitter.emitterCells = []


运行App,一切都安静了,安静的好冷啊…

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: