扩展:https://github.com/lichtschlag/Dazzle
//
创建出Layer
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
// 显示边框
emitterLayer.borderWidth = 1;
// 给定尺寸
emitterLayer.frame = CGRectMake( 100, 100, 100, 100);
// emitterLayer.masksToBounds = YES;
// 发射点
emitterLayer.emitterPosition = CGPointMake( 0, 0);
// 发射模式
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];
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
// 显示边框
emitterLayer.borderWidth = 1;
// 给定尺寸
emitterLayer.frame = CGRectMake( 100, 100, 100, 100);
// emitterLayer.masksToBounds = YES;
// 发射点
emitterLayer.emitterPosition = CGPointMake( 0, 0);
// 发射模式
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
@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
@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
@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
@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(
0,
100,CGRectGetWidth(self.view.bounds),
300)];
[self.view addSubview:snoView];
[snoView show];
[self.view addSubview:snoView];
[snoView show];
// snoView.maskView = alpaView;可以让边缘模糊