CAEmitterLayer 粒子效果

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上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章