CoreAnimation之CAEmitterLayer(粒子破碎動畫)

在iOS 5中,蘋果引入了一個新的CALayer子類叫做CAEmitterLayer。CAEmitterLayer是一個高性能的粒子引擎,被用來創(chuàng)建實時例子動畫如:煙霧,火,雨等等這些效果。
CAEmitterLayer看上去像是許多CAEmitterCell的容器,這些CAEmitierCell定義了一個例子效果。你將會為不同的例子效果定義一個或多個CAEmitterCell作為模版,同時CAEmitterLayer負責(zé)基于這些模版實例化一個粒子流。一個CAEmitterCell類似于一個CALayer:它有一個contents屬性可以定義為一個CGImage,另外還有一些可設(shè)置屬性控制著表現(xiàn)和行為。我們不會對這些屬性逐一進行詳細的描述,你們可以在CAEmitterCell類的頭文件中找到。

** CAEmitterLayer類提供了一個粒子發(fā)射器系統(tǒng)為核心的動畫。這些粒子是由CAEmitterCell組成的實例,它相當于一個管理者,來管理 CAEmitterCell的發(fā)射的一些細節(jié),比如發(fā)射的位置,發(fā)射形狀等等**

屬性名 作用
emitterPosition 發(fā)射位置
emitterSize 發(fā)射源的大小
emitterMode 發(fā)射模式
emitterShape 發(fā)射源的形狀
renderMode 渲染模式
birthRate 粒子產(chǎn)生系數(shù),默認1.0
emitterCells 裝著CAEmitterCell對象的數(shù)組,被用于把粒子投放到layer上
emitterDepth 決定粒子形狀的深度聯(lián)系
emitterZposition 發(fā)射源的z坐標位置
lifetime 粒子生命周期
scale 粒子的縮放比例
seed 用于初始化隨機數(shù)產(chǎn)生的種子
spin 自旋轉(zhuǎn)速度
velocity 粒子速度

CAEmitterCell屬性

屬性名 作用
alphaRange 一個粒子的顏色alpha能改變的范圍
alphaSpeed 粒子透明度在生命周期內(nèi)的改變速度
birthrate 每秒發(fā)射的粒子數(shù)量
blueRange 一個粒子的顏色blue 能改變的范圍
blueSpeed 粒子blue在生命周期內(nèi)的改變速度
color 粒子的顏色
contents 是個CGImageRef的對象,既粒子要展現(xiàn)的圖片
contentsRect 應(yīng)該畫在contents里的子rectangle
emissionLatitude 發(fā)射的z軸方向的角度
emissionLongitude x-y平面的發(fā)射方向
emissionRange 周圍發(fā)射角度
emitterCells 粒子發(fā)射的粒子的數(shù)組
enabled 粒子是否被渲染
greenrange 一個粒子的顏色green 能改變的范圍
greenSpeed 粒子green在生命周期內(nèi)的改變速度
lifetime 生命周期
lifetimeRange 生命周期范圍 lifetime= lifetime(+/-) lifetimeRange
magnificationFilter 增加自己的大小
minificatonFilter 減小自己的大小
minificationFilterBias 減小大小的因子
name 粒子的名字
redRange 一個粒子的顏色red 能改變的范圍
redSpeed 粒子red在生命周期內(nèi)的改變速度
scale 縮放比例
scaleRange 縮放比例范圍
scaleSpeed 縮放比例速度
spin 子旋轉(zhuǎn)角度
spinrange 子旋轉(zhuǎn)角度范圍
velocity 速度
velocityRange 速度范圍
xAcceleration 粒子x方向的加速度分量
yAcceleration 粒子y方向的加速度分量
zAcceleration 粒子z方向的加速度分量
@interface ViewController () 
@property (nonatomic, weak) IBOutlet UIView *containerView; 
@end 
@implementation ViewController 

- (void)viewDidLoad {
 [super viewDidLoad]; 
//create particle emitter layer 
CAEmitterLayer *emitter = [CAEmitterLayer layer];
 emitter.frame = self.containerView.bounds; [self.containerView.layer addSublayer:emitter]; 
//configure emitter emitter.renderMode = kCAEmitterLayerAdditive; 
emitter.emitterPosition = CGPointMake(emitter.frame.size.width / 2.0, emitter.frame.size.height / 2.0); 
//create a particle template 
CAEmitterCell *cell = [[CAEmitterCell alloc] init]; 
cell.contents = (__bridge id)[UIImage imageNamed:@"Spark.png"].CGImage; cell.birthRate = 150; 
cell.lifetime = 5.0;
 cell.color = [UIColor colorWithRed:1 green:0.5 blue:0.1 alpha:1.0].CGColor; 
cell.alphaSpeed = -0.4; 
cell.velocity = 50;
 cell.velocityRange = 50; 
cell.emissionRange = M_PI * 2.0; //add particle template to emitter emitter.emitterCells = @[cell]; 
} 
@end
點贊的破碎動畫
    self.view.backgroundColor =[UIColor whiteColor];
    
    self.container =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
    self.container.layer.contents = (__bridge id)[UIImage imageNamed:@"點贊2"].CGImage;
    self.container.center = self.view.center;
    [self.view addSubview:self.container];
    CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
    emitterCell.name           = @"emitter";
    emitterCell.alphaRange     = 0.10;
    emitterCell.alphaSpeed     = -1.0;
    emitterCell.lifetime       = 0.6;
    emitterCell.lifetimeRange  = 0.3;
    emitterCell.birthRate      = 0;
    emitterCell.velocity       = 40.00;
    emitterCell.velocityRange  = 10.00;
    emitterCell.scale          = 0.03;
    emitterCell.scaleRange     = 0.02;
    emitterCell.contents       = (id)[UIImage imageNamed:@"Emitter"].CGImage;
    
     self.emitterLayer               = [CAEmitterLayer layer];
     self.emitterLayer.name          = @"emitterLayer";
     self.emitterLayer.emitterShape  = kCAEmitterLayerCircle;
     self.emitterLayer.emitterMode   = kCAEmitterLayerOutline;
     self.emitterLayer.emitterSize   = CGSizeMake(20, 20);
     self.emitterLayer.emitterCells  = @[emitterCell];
     self.emitterLayer.renderMode    = kCAEmitterLayerAdditive;
     self.emitterLayer.masksToBounds = NO;
     self.emitterLayer.position      = CGPointMake(self.container.frame.size.width/2.0,self.container.frame.size.height/2.0);

    [self.container.layer addSublayer:self.emitterLayer];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容