iOS-CAEmitterLayer(粒子效果)

扩展:https://github.com/lichtschlag/Dazzle

  // 创建出Layer
    CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
    
     // 显示边框
    emitterLayer.borderWidth =  1;
     // 给定尺寸
    emitterLayer.frame = CGRectMake( 100100100100);
//     emitterLayer.masksToBounds = YES;
    
// 发射点
    emitterLayer.emitterPosition = CGPointMake( 00);
     // 发射模式
    emitterLayer.emitterMode = kCAEmitterLayerSurface;
     // 发射形状
    emitterLayer.emitterShape = kCAEmitterLayerLine;
     // 添加Layer
    [self.view.layer addSublayer:emitterLayer];
    
    CAEmitterCell *cell = [CAEmitterCell emitterCell];
     // 粒子产生率
    cell.birthRate =  1.f;
     // 粒子生命周期
    cell.lifetime =  120.f;
     // 速度值
    cell.velocity =  10;
     // 速度值得微调值
    cell.velocityRange =  3.f;
     // y轴加速度
    cell.yAcceleration =  2.f;
     // 发射角度(角度越大偏移越大)
    cell.emissionRange =  4.f *M_1_PI;
     // 设置粒子颜色
//     cell.color = [UIColor blackColor].CGColor;
    
// 设置图片
    cell.contents = (__bridge  id)([UIImage imageNamed: @" test1 "].CGImage);
    emitterLayer.emitterCells = @[cell];

 效果图:

 

例子:下雪下雨的封装

基类:WJCAEmitterLayerView

 

#import <UIKit/UIKit.h>

@interface WJCAEmitterLayerView : UIView
/* *
 *  模仿setter getter方法
 
*/
- ( void)setEmitterLayer:(CAEmitterLayer *)layer;
- (CAEmitterLayer *)emitterLayer;

/* *
 *  显示当前View
 
*/
- ( void)show;
/* *
 *  隐藏当前View
 
*/
- ( void)hide;

@end
#import  " WJCAEmitterLayerView.h "

@interface WJCAEmitterLayerView () {
    CAEmitterLayer *_emitterLayer;
}

@end

@implementation WJCAEmitterLayerView

+ (Class)layerClass {
     return [CAEmitterLayer  class];
    
}

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
     if (self) {
        _emitterLayer = (CAEmitterLayer *)self.layer;
    }
     return self;
}

- ( void)setEmitterLayer:(CAEmitterLayer *)layer {

}


- (CAEmitterLayer *)emitterLayer {
     return _emitterLayer;
}

- ( void)show {

}

- ( void)hide {

}

@end

 封装下雪下雨view集成基类

 下雪:

#import  " SnowView.h "

@implementation SnowView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
     if (self) {
        [self initEmitterLayerProperties];
    }
     return self;
}

- ( void)initEmitterLayerProperties {
      // 初始化一些参数
//     self.emitterLayer.masksToBounds = YES;
    self.emitterLayer.emitterShape = kCAEmitterLayerLine;
    self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
    self.emitterLayer.emitterSize = self.frame.size;
    self.emitterLayer.emitterPosition = CGPointMake(self.bounds.size.width/ 2.f,  20);
}

- ( void)show {
     // 添加 CAEmitterCell
    CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
    snowflake.birthRate =  1.f;
    snowflake.speed =  10.f;
    snowflake.velocity =  2.f;
    snowflake.velocityRange =  10.f;
    snowflake.yAcceleration =  10.f;
    snowflake.emissionRange =  0.5 *M_PI;
    snowflake.spinRange =  0.25 *M_PI;
    snowflake.contents = (__bridge  id)([UIImage imageNamed: @" test1 "].CGImage);
    snowflake.color = [UIColor redColor].CGColor;
    snowflake.lifetime =  60.f;
    snowflake.scale =  0.5;
    snowflake.scaleRange =  0.3;
     // 添加动画
    self.emitterLayer.emitterCells = @[snowflake];
}

- ( void)hide {
    
}

@end

 下雨:

#import  " RainView.h "

@implementation RainView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
     if (self) {
        [self initEmitterLayerProperties];
    }
     return self;
}

- ( void)initEmitterLayerProperties {
     // 初始化一些参数
    self.emitterLayer.masksToBounds = YES;
    self.emitterLayer.emitterShape = kCAEmitterLayerLine;
    self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
    self.emitterLayer.emitterSize = self.frame.size;
    self.emitterLayer.emitterPosition = CGPointMake(self.bounds.size.width/ 2.f,  20);
}

- ( void)show {
     // 添加 CAEmitterCell
    CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
    snowflake.birthRate =  25.f;
    snowflake.speed =  10.f;
    snowflake.velocity =  10.f;
    snowflake.velocityRange =  10.f;
    snowflake.yAcceleration =  1000.f;
//     snowflake.emissionRange = 0.5 *M_PI;
//     snowflake.spinRange = 0.25 *M_PI;
    snowflake.contents = (__bridge  id)([UIImage imageNamed: @" test1 "].CGImage);
    snowflake.color = [UIColor greenColor].CGColor;
    snowflake.lifetime =  7.f;
    snowflake.scale =  0.2;
    snowflake.scaleRange =  0.f;
     // 添加动画
    self.emitterLayer.emitterCells = @[snowflake];
}

- ( void)hide {
    
}

@end

 调用:

    WJCAEmitterLayerView *snoView = [[SnowView alloc]initWithFrame:CGRectMake( 0100,CGRectGetWidth(self.view.bounds),  300)];
    [self.view addSubview:snoView];
    [snoView show];

 //    snoView.maskView = alpaView;可以让边缘模糊

 

你可能感兴趣的:(ios)