IOS粒子系统
【IOS粒子系统】CAEmitterLayer提供了一个基于Core Animation的粒子发射系统,粒子用CAEmitterCell来初始化。粒子画在背景层盒边界上
1、CAEmitterLayer:
emitterPosition//决定了粒子发射形状的中心点,
?
emitterSize//则决定了粒子发射形状的大小,
?
emitterShape//是粒子从什么形状发射出来,它并不是表示粒子自己的形状,
?
emitterMode//决定了粒子的发射模式。
?
注:emitterPosition是所选emitterShape的中心点,例如对于矩形是对角线交点,对于圆形是圆心,对于直线是中点。而emitterSize则决定了矩形的大小,圆形的大小,直线的长度。
?
birthRate://粒子 产 生系数,默 认 1.0 ;
?
emitterCells://装着 CAEmitterCell 对 象的数 组 ,被用于把粒子投放到 layer 上;
?
emitterDepth://决定粒子形状的深度 联 系
?
emitterShape://发射源的形状:
?
NSString *const kCAEmitterLayerPoint;
// 点
?
NSString *const kCAEmitterLayerLine;
// 直线
?
NSString *const kCAEmitterLayerRectangle;
// 矩形
?
NSString *const kCAEmitterLayerCircle;
// 圆形
?
NSString *const kCAEmitterLayerCuboid;
// 3D rectangle
?
NSString *const kCAEmitterLayerSphere;
// 3D circle
?
emitterMode: 发射模式 //进一步决定发射的区域是在发射形状的哪一部份
?
NSString *const kCAEmitterLayerPoints;
//顶点
?
NSString *const kCAEmitterLayerOutline;
//轮廓 ,即边上
?
NSString *const kCAEmitterLayerSurface;
// 表面,即图形的面积内
?
NSString *const kCAEmitterLayerVolume;
// 容积,即3D图形的体积内
?
emitterSize://发射源的尺寸大小
?
emitterZposition: //发射源的 z 坐 标 位置;
?
lifetime://粒子生命周期
?
preservesDepth:
?
renderMode://渲染模式:
?
NSString *const kCAEmitterLayerUnordered;
?
NSString *const kCAEmitterLayerOldestFirst;
?
NSString *const kCAEmitterLayerOldestLast;
?
NSString *const kCAEmitterLayerBackToFront;
?
NSString *const kCAEmitterLayerAdditive;
?
scale:// 粒子的缩放比例:
?
seed://用于初始化随机数产生的种子
?
spin://自旋转速度
?
velocity://粒子速度
2、CAEmitterCell常用属性:
CAEmitterCell类代从CAEmitterLayer射出的粒子;
emittercell:定义了粒子发射的方向。
name:粒子的名字
birthrate:粒子参数的速度乘数因子;
contents:是个 CGImageRef的对象, 既粒子要展现的图片;
contentsRect:应该画在 contents里的子 rectangle;
?
color:粒子的颜色
redRange:一个粒子的颜色red能改变的范围;
redSpeed:粒子 red在生命周期内的改变速度;
greenrange:一个粒子的颜色green能改变的范围;
greenSpeed:粒子 green在生命周期内的改变速度;
blueRange:一个粒子的颜色blue能改变的范围;
blueSpeed:粒子 blue在生命周期内的改变速度;
alphaRange:一个粒子的颜色alpha能改变的范围;
alphaSpeed:粒子透明度在生命周期内的改变速度;
?emissionLatitude:发射的 z轴方向的角度
emissionLongitude:x-y平面的发射方向
emissionRange:周围发射角度
emitterCells:粒子发射的粒子
enabled:粒子是否被渲染lifetime:生命周期
lifetimeRange:生命周期范围
magnificationFilter:不是很清楚好像增加自己的大小
minificatonFilter:减小自己的大小
minificationFilterBias:减小大小的因子
?
scale:缩放比例:
scaleRange:缩放比例范围;
scaleSpeed:缩放比例速度:
spin:子旋转角度
spinrange:子旋转角度范围
style:不是很清楚:
velocity:速度
velocityRange:速度范围
xAcceleration:粒子 x方向的加速度分量
yAcceleration:粒子 y方向的加速度分量
zAcceleration:粒子 z方向的加速度分量
ClassMethods
defauleValueForKey: 更具健获得值;
emitterCell:初始化方法
shouldArchiveValueForKey: 是否归档莫键值
?
3、雪花(撒花)粒子系统
- (void)addFragmentAnimation {
_emitter = [CAEmitterLayer layer];
_emitter.emitterPosition = CGPointMake(self.bounds.size.width / 2.0, -30);
_emitter.emitterSize= CGSizeMake(self.bounds.size.width, 0.0);
;
_emitter.emitterMode= kCAEmitterLayerPoints;
_emitter.emitterShape= kCAEmitterLayerLine;
CGFloat scaleRatio = [self cardScaleRatio];
CAEmitterCell *(^generateEmitterCell)(NSString *) = ^(NSString *iconName) {
CAEmitterCell *flowerFlake = [CAEmitterCell emitterCell];
CGFloat random = (arc4random()%100) / 100.f;
flowerFlake.birthRate = 3 * random;
flowerFlake.lifetime = 120.0;
flowerFlake.velocity = 100;
flowerFlake.yAcceleration= 75;
flowerFlake.emissionRange= -M_PI;
flowerFlake.spinRange = 2 * M_PI;
flowerFlake.scale= 0.4 * scaleRatio;
flowerFlake.contents = (id)[[UIImage imageForKey:iconName] CGImage];
return flowerFlake;
};
NSMutableArray *emitterCells = [NSMutableArray array];
for (int iconIndex = 1;
iconIndex < 25;
++iconIndex) {
NSString *iconName = [@"Fragment_" stringByAppendingString:[@(iconIndex) stringValue]];
[emitterCells addObject:generateEmitterCell(iconName)];
}
_emitter.emitterCells = emitterCells;
[self.layer addSublayer:_emitter];
}
推荐阅读
- 一粒饥饿不堪的米
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 了解自然大气粒子对气候的影响
- Cesium|Cesium 粒子系统学习
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 接口|axios接口报错-参数类型错误解决