CAEmitterLayer 粒子發射器類,父類CALayer。CALayer有很多子類。比如CAShapeLayer,CAGradientLayer等等。
CAEmitterLayer管理着CAEmitterCell,類似於tableView與cell的關係
相關API
1.屬性
CAEmitterLayer的屬性
NSArray<CAEmitterCell *>emitterCell 用來裝粒子的數組
float birthRate 粒子產生係數 默認1.0 每秒鐘粒子單元創建粒子數
float lifetime 粒子生命週期係數 存在時間,默認1.0
CGPoint emitterPosition 決定粒子發射形狀的中心點 x,y中心位置默認(0,0)
CGSize emmtterSize 發射源的尺寸大小
CGFloat emitterDepth 景深深度。
上面2個屬性更具emitterShaoe的情況,有些效果可能無效
NSString *emitterSHape 發射源的形狀形狀 枚舉
/
定義發射形狀,字符串類型,決定粒子的出口形態,系統會在emitterSize上進行修飾處理。可選項如下:
kCAEmitterLayerPoint 點的形狀 ,粒子從一個點發出
kCAEmitterLayerLine 線的形狀,粒子從一條線發出
kCAEmitterLayerRectangle 矩形形狀,粒子從一個矩形中發出
kCAEmitterLayerCuboid 立方體形狀,會影響Z平面的效果
kCAEmitterLayerCircle 圓形,粒子會在圓形範圍發射
kCAEmitterLayerSphere 球型
/
NSString emitterMode 粒子發射模式 枚舉
/
定義發射模式(相對於emitterShape,只會展示不同的效果),字符串類型。
kCAEmitterLayerPoints 從發射器兩端點
kCAEmitterLayerOutline 從發射器邊緣發出
kCAEmitterLayerSurface 從發射器表面發出
kCAEmitterLayerVolume 從發射器中發出
/
NSString renderMode 渲染模式
/
定義渲染模式,字符串類型。
kCAEmitterLayerUnordered 粒子是無序出現的
kCAEmitterLayerOldestFirst 聲明久的粒子會被渲染在最上層
kCAEmitterLayerOldestLast 年輕的粒子會被渲染在最上層
kCAEmitterLayerBackToFront 粒子的渲染按照Z軸的前後順序進行
kCAEmitterLayerAdditive 進行粒子混合
/
BOOL preservesDepth 是否開啓三維空間效果, 默認NO
float velocity 增加粒子的速度 默認1
float scale 粒子的縮放大小 默認1
float spin。 粒子的旋轉位置
2.CAEmitterCell的屬性
NSString name 單元名稱, 用戶構造keyPath 默認空
BOOL enabled 控制此單元是否被emmiter渲染
float birthRate 粒子的創建速率 默認0
float lifetime。粒子的生存時間,單位秒 是平均值 默認0,
float lifetmeRange lifetimeRange描述的是粒子的生存時間容差 ,默認值0
粒子在Z軸方向的發射角度(弧度制)和 粒子在xy平面的發射角度(弧度制
CGFloat emissionLatitude/emissionLongitude
CGFloat emissionRange;粒子發射角度的容差(弧度制
粒子發射的速度和速度容差 默認都是0
CGFloat velocity/vilocityRange
CGFloat xAcceleration x方向的加速度矢量 默認0
CGFloat yAcceleration y方向的加速度矢量 默認0
CGFloat zAcceleration z方向的加速度矢量 默認0
CGFloat scale 粒子的縮放因子 係數 默認1
CGFloat scaleRange 縮放因子容差 默認0
CGFloat scaleSpeed 縮放速度
CGFloat spin 粒子選擇速度
CGFloat spinRange 粒子旋轉速度容差
CGColorRef color 粒子顏色默認值時純白,
每個通道的色值容差,默認是(0, 0, 0, 0)
@property float redRange;
@property float greenRange;
@property float blueRange;
@property float alphaRange;
粒子每個顏色值的變化速度默認0,0,0,0 在lifetime的期間
float redSpeed
float greenSpeed
float blueSpeed
float alphaSpeed
id contents 粒子的內容
CGRect contentsRect 內容的範圍 默認值時矩陣
CGFloat contentsScale 內容縮放因子
重點
1.CAEmitterCell決定生命狀態的屬性
lifetime,lifetimeRange:粒子在系統上的生命週期,存活時間,單位秒
birthRate:每秒鐘產生粒子的數量 浮點數 單一粒子的話設置爲0.1f
2.CAEmitterCell決定內容的屬性
contents:爲CGimageRef對象 一張圖片
name:粒子名稱,多個cell可以使用kvc監聽
3.CAEmitterCell決定顏色狀態的屬性
color:粒子顏色屬性,這個顏色屬性的作用是給粒子上色 比如contents自身顏色的RGB值*colord的值 的到粒子最終的值
demo
// 1. 設置CAEmitterLayer
CAEmitterLayer * redpacketLayer = [CAEmitterLayer layer];
[self.view.layer addSublayer:redpacketLayer];
//self.redpacketLayer = redpacketLayer;
redpacketLayer.emitterShape = kCAEmitterLayerLine; // 發射源的形狀 是枚舉類型
redpacketLayer.emitterMode = kCAEmitterLayerSurface; // 發射模式 枚舉類型
redpacketLayer.emitterSize = self.view.frame.size; // 發射源的size 決定了發射源的大小
redpacketLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, -10); // 發射源的位置 控制粒子發射器位置x,y
redpacketLayer.birthRate = 1.f; // 每秒產生的粒子數量的係數 控制粒子發射暫停和開始
// 2. 配置cell
CAEmitterCell * snowCell = [CAEmitterCell emitterCell];
snowCell.contents = (id)[[UIImage imageNamed:@"timg.jpg"] CGImage]; // 粒子的內容 是CGImageRef類型的
snowCell.birthRate = 5.f; // 每秒產生的粒子數量
snowCell.lifetime = 20.f; // 粒子的生命週期
// snowCell.velocity = 0.1f; // 粒子的速度
snowCell.yAcceleration = 100.f; // 粒子再y方向的加速的
snowCell.scale = 0.1; // 粒子的縮放比例 控制粒子大小
redpacketLayer.emitterCells = @[snowCell]; // 粒子添加到CAEmitterLayer上