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;可以让边缘模糊

 

posted @ 2015-07-21 12:19  幻想无极  阅读(683)  评论(0编辑  收藏  举报