ios的粒子效果主要有兩部分組成
- 發(fā)射器:發(fā)射器主要設(shè)置粒子發(fā)射的宏觀屬性
- 粒子單元:設(shè)置相應(yīng)的粒子屬性
發(fā)射器是基于layer層的,常用屬性有:
一嘉汰、發(fā)射器
- emitterCells 粒子單元數(shù)組斟冕,例如你在繪制火焰的效果時螃宙,你可以創(chuàng)建兩個單元惶傻,一個單元負(fù)責(zé)煙霧嚼摩,一個單元負(fù)責(zé)火苗灶体。
- birthRate 粒子的創(chuàng)建速率阅签,默認(rèn)為1/s。
- lifetime 粒子的存活時間蝎抽。默認(rèn)為1S政钟。
- emitterPosition 發(fā)射器在xy平面的中心位置
- emitterZPosition 發(fā)射器在Z平面的位置
- emitterSize 發(fā)射器的尺寸大小
- emitterDepth 發(fā)射器的深度,在某些模式下會產(chǎn)生立體效果
- emitterShape 發(fā)射器的形狀织中,這個參數(shù)的幾個系統(tǒng)字符串如下:
CA_EXTERN NSString * const kCAEmitterLayerPoint
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0); //點的形狀锥涕,粒子從一個點發(fā)出
CA_EXTERN NSString * const kCAEmitterLayerLine
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//線的形狀,粒子從一條線發(fā)出
CA_EXTERN NSString * const kCAEmitterLayerRectangle
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//矩形形狀狭吼,粒子從一個矩形中發(fā)出
CA_EXTERN NSString * const kCAEmitterLayerCuboid
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//立方體形狀层坠,會影響Z平面的效果
CA_EXTERN NSString * const kCAEmitterLayerCircle
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//圓形,粒子會在圓形范圍發(fā)射
CA_EXTERN NSString * const kCAEmitterLayerSphere
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//球型
- emitterMode 發(fā)射器的發(fā)射模式刁笙,參數(shù)如下:
CA_EXTERN NSString * const kCAEmitterLayerPoints
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器中發(fā)出
CA_EXTERN NSString * const kCAEmitterLayerOutline
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器邊緣發(fā)出
CA_EXTERN NSString * const kCAEmitterLayerSurface
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器表面發(fā)出
CA_EXTERN NSString * const kCAEmitterLayerVolume
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器中點發(fā)出
- renderMode 發(fā)射器渲染模式破花,參數(shù)如下:
CA_EXTERN NSString * const kCAEmitterLayerUnordered
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下,粒子是無序出現(xiàn)的疲吸,多個發(fā)射源將混合
CA_EXTERN NSString * const kCAEmitterLayerOldestFirst
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下座每,聲明久的粒子會被渲染在最上層
CA_EXTERN NSString * const kCAEmitterLayerOldestLast
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下,年輕的粒子會被渲染在最上層
CA_EXTERN NSString * const kCAEmitterLayerBackToFront
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下摘悴,粒子的渲染按照Z軸的前后順序進(jìn)行
CA_EXTERN NSString * const kCAEmitterLayerAdditive
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式會進(jìn)行粒子混合
- preservesDepth 是否開啟三維空間效果
- velocity 粒子的運動速度
- scale 粒子的縮放大小
- spin 粒子的旋轉(zhuǎn)位置
- seed 初始化隨機(jī)的粒子種子
二峭梳、粒子單元
設(shè)置好了粒子發(fā)射器,我們還需要初始化一些粒子單元,設(shè)置具體粒子的屬性葱椭,我們使用到的類是CAEmitterCell這個類捂寿。
- name 設(shè)置發(fā)射單元的名稱
- enabled 是否允許發(fā)射器渲染
- birthRate 粒子的創(chuàng)建速率
- lifetime 粒子的生存時間
- lifetimeRange 粒子的生存時間容差
- emissionLatitude 粒子在Z軸方向的發(fā)射角度
- emissionLongitude 粒子在xy平面的發(fā)射角度
- emissionRange 粒子發(fā)射角度的容差
- velocity 粒子的速度
- velocityRange 粒子速度的容差
- xAcceleration
- yAcceleration x,y孵运,z三個方向的加速度
- zAcceleration
- scale
- scaleRange 縮放大小秦陋,縮放容差和縮放速度
- scaleSpeed
- spin
- spinRange 旋轉(zhuǎn)度與旋轉(zhuǎn)容差
- color粒子的顏色
- redRange
- greenRange
- blueRange
- alphaRange 粒子在rgb三個色相上的容差和透明度的容差
- redSpeed
- greenSpeed
- blueSpeed
- alphaSpeed 粒子在RGB三個色相上的變化速度和透明度的變化速度
- contents 渲染粒子,可以設(shè)置為一個CGImage的對象
- contentsRect 渲染的范圍
demo 效果
let fireEmitterLayer = CAEmitterLayer()//創(chuàng)建粒子發(fā)射器
fireEmitterLayer.emitterPosition = CGPoint(x: ZLScreenWidth * 0.5, y: ZLScreenHeight - 20 - 64)
fireEmitterLayer.emitterSize = CGSize(width: ZLScreenWidth - 100, height: 20)
fireEmitterLayer.renderMode = kCAEmitterLayerAdditive
//創(chuàng)建發(fā)射單元
let fire = CAEmitterCell()
fire.contents = UIImage(named:"111")?.cgImage//圖片像素一定要特別小不然沒有效果且特變卡
fire.birthRate = 100
fire.lifetime = 2.0
fire.lifetimeRange = 1.5
fire.color = UIColor(colorLiteralRed: 0.8, green: 0.4, blue: 0.2, alpha: 1).cgColor
fire.name = "fire"
fire.velocity = 160
fire.velocityRange = 80
fire.emissionLongitude = CGFloat(M_PI + M_PI_2)
fire.emissionRange = CGFloat(M_PI_2)
fire.scaleSpeed = 0.3
fire.spin = 0.2
let smoke = CAEmitterCell()
smoke.birthRate = 400
smoke.lifetime = 3.0
smoke.lifetimeRange = 1.5
smoke.color = UIColor(colorLiteralRed: 1, green: 1, blue: 1, alpha: 0.05).cgColor
smoke.contents = UIImage(named: "111")?.cgImage
smoke.name = "smoke"
smoke.velocity = 250
smoke.velocityRange = 100
smoke.emissionLongitude = CGFloat(M_PI + M_PI_2)
smoke.emissionRange = CGFloat(M_PI_2)
fireEmitterLayer.emitterCells = [fire,smoke]
self.view.layer.addSublayer(fireEmitterLayer)