iOS的粒子系统是通过CAEmitterCell创建,然后通过CAEmitterLayer发射层进行发射。 导入框架#import <QuartzCore>
- 下面介绍CAEmitterCell的基本属性
+ (instancetype)emitterCell;// UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。
@property(nullable) CGColorRef color; //粒子的颜色
@property float alphaRange;// 一个粒子的颜色alpha能改变的范围
@property float alphaSpeed; //粒子透明度在生命周期内的改变速度
@property float redRange;
@property float greenRange;
@property float blueRange; ///一个粒子的颜色blue,green,red能改变的范围
@property float redSpeed;
@property float greenSpeed;
@property float blueSpeed; ///一个粒子blue,green,red在生命周期内改变的速度
@property(nullable, strong) id contents; //粒子要展现的图片,CGImageRef类型,否则不显示
@property CGRect contentsRect; //渲染的范围
@property CGFloat emissionLatitude; //发射Z轴方向的发射角度
@property CGFloat emissionLongitude; //粒子在xy平面的发射角度
@property CGFloat emissionRange; //粒子发射角度的容差
@property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; //粒子发射的粒子
@property(getter=isEnabled) BOOL enabled; //粒子是否允许发射器渲染
@property float lifetime;// 粒子生存时间
@property float lifetimeRange; //粒子生存时间范围,设置之后 lifetime +/-= lifetimeRange
@property(copy) NSString *minificationFilter;
@property(copy) NSString *magnificationFilter;// 减小,增加自己的大小
@property float minificationFilterBias;// 减少大小的因子
@property(nullable, copy) NSString *name; //粒子的名字
@property CGFloat scale; //粒子缩放大小
@property CGFloat scaleRange; //粒子缩放范围
@property CGFloat scaleSpeed; //粒子缩放速度
@property CGFloat spin; //旋转角度
@property CGFloat spinRange; //旋转角度范围
@property CGFloat velocity; //粒子的速度
@property CGFloat velocityRange;// 粒子速度范围
@property CGFloat xAcceleration;
@property CGFloat yAcceleration;
@property CGFloat zAcceleration; //粒子在x,y,x方向的加速度
发射层CAEmitterLayer属性
+ (instancetype)layer;
// 由很多emitterCell组成的发射层,控制粒子的形状,发射位置,提供了一个粒子发射器系统为核心的动画
@property(nullable, copy) NSArray<CAEmitterCell> *emitterCells;
//装着 CAEmitterCell对象的粒子单元数组,被用于把粒子投放到layer上
@property CGPoint emitterPosition; //发射器在xy平面的中心位置
@property CGFloat emitterZPosition;// 发射器的Z平面位置
@property CGSize emitterSize; //发射器的尺寸大小
@property CGFloat emitterDepth; //发射器的深度,在某些模式下会产生立体效果
@property(copy) NSString *emitterMode; //发射模式
kCAEmitterLayerPoints //从发射器中发出
kCAEmitterLayerOutline //从发射器边缘发出
kCAEmitterLayerSurface //从发射器表面发出
kCAEmitterLayerVolume //从发射器中点发出
@property(copy) NSString *emitterShape; //发射器的形状
kCAEmitterLayerPoint //点的形状,粒子从一个点出发
kCAEmitterLayerLine //线的形状,粒子从一条线出发
kCAEmitterLayerRectangle //矩形形状,粒子从一个矩形出发
kCAEmitterLayerCuboid //立方体形状,会影响Z平面的效果
kCAEmitterLayerCircle //圆形,粒子会在圆形范围发射 kCAEmitterLayerSphere 球形
@property(copy) NSString *renderMode;// 渲染模式
kCAEmitterLayerUnordered //这种模式下,粒子是无序出现的,多个发射源将混合
kCAEmitterLayerOldestFirst //这种模式下,生命久的粒子会被渲染在最上层
kCAEmitterLayerOldestLast// 这种模式下,年轻的粒子会被渲染在最上层
kCAEmitterLayerBackToFront //这种模式下,粒子的渲染按照Z轴的前后顺序进行
kCAEmitterLayerAdditive //这种模式会进行粒子混合
@property BOOL preservesDepth; //是否开启三维空间效果
@property float birthRate; //粒子产生速度 默认为1.0
@property float lifetime; //粒子存活时间,默认为1s
@property float scale; //粒子的缩放大小
@property unsigned int seed; //用于初始化随机数产生的粒子
@property float spin; //粒子的旋转位置
@property float velocity;// 粒子的运动速度
写几行代码用起来
CAEmitterLayer *fireEmitter = [CAEmitterLayer layer];
fireEmitter.emitterPosition = CGPointMake(self.view.frame.size.width/2.0,
self.view.frame.size.height - 60);
fireEmitter.emitterSize = CGSizeMake( 50, 0);
fireEmitter.emitterShape = kCAEmitterLayerLine;
fireEmitter.renderMode = kCAEmitterLayerAdditive;
//火焰
CAEmitterCell* fire = [CAEmitterCell emitterCell];
[fire setName:@"fire"];
fire.birthRate = 500;
fire.emissionLongitude = M_PI;
fire.velocity = -80;
fire.velocityRange = 30;
fire.emissionRange = 1.1;
fire.yAcceleration = -200;
fire.scaleSpeed = 0.3;
fire.lifetime = 1;
fire.lifetimeRange = 0.35;
fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] CGColor];
fire.contents = (id) [[UIImage imageNamed:@"DazFire"] CGImage];
//烟雾
CAEmitterCell* smoke = [CAEmitterCell emitterCell];
[smoke setName:@"smoke"];
smoke.birthRate = 11;
smoke.lifetime = 4;
smoke.velocity = -40;
smoke.velocityRange = 20;
smoke.emissionRange = M_PI / 4;
smoke.spinRange = 6;
smoke.yAcceleration = -160;
smoke.scale = 0.1;
smoke.alphaSpeed = -0.12;
smoke.scaleSpeed = 0.7;
smoke.contents = (id) [[UIImage imageNamed:@"DazSmoke"] CGImage];
smoke.color = [[UIColor colorWithWhite:0.5 alpha:0.3]CGColor];
fireEmitter.emitterCells = @[smoke,fire];
[self.view.layer addSublayer:fireEmitter];
产生火焰效果,抄录一下,哪天要用的时候就不用到处找了,谢谢大神的分享!
网友评论