CoreAnimation —— CAEmitterLayer(粒子效果)
2016-11-29 00:00
344 查看
CAEmitterLayer
CoreAnimation框架中的CAEmitterLayer是一个粒子发射器系统,负责粒子的创建和发射源属性。通过它,我们可以轻松创建出炫酷的粒子效果。粒子效果有两部分组成,一部分为发射器,设置例子发射的宏观属性,另一部分是粒子单元,用于设置相应的粒子属性。
一、粒子发射器是基于Layer层(CAEmitterLayer),其常用属性如下:
// 粒子单元数组(用来存放粒子单元) @property(copy) NSArray *emitterCells; // 粒子的创建速率,默认为1/s。 @property float birthRate; // 粒子的存活时间。默认为1S。 @property float lifetime; // 发射器在xy平面的位置 @property CGPoint emitterPosition; // 发射器在Z平面的位置 @property CGFloat emitterZPosition; // 发射器的尺寸大小 @property CGSize emitterSize; // 发射器的深度,在某些模式下会产生立体效果 @property CGFloat emitterDepth; // 是否开启三维空间效果 @property BOOL preservesDepth; // 粒子的运动速度 @property float velocity; // 粒子的缩放大小 @property float scale; // 粒子的旋转位置 @property float spin; // 初始化随机的粒子种子 @property unsigned int seed; // 发射器的形状 @property(copy) NSString *emitterShape; // 发射器的形状 kCAEmitterLayerPoint //点的形状,粒子从一个点发出 kCAEmitterLayerLine //线的形状,粒子从一条线发出 kCAEmitterLayerRectangle //矩形形状,粒子从一个矩形中发出 kCAEmitterLayerCuboid //立方体形状,会影响Z平面的效果 kCAEmitterLayerCircle //圆形,粒子会在圆形范围发射 kCAEmitterLayerSphere //球型 // 发射器的发射模式 @property(copy) NSString *emitterMode; // 发射器的发射模式 kCAEmitterLayerPoints //从发射器中发出 kCAEmitterLayerOutline //从发射器边缘发出 kCAEmitterLayerSurface //从发射器表面发出 kCAEmitterLayerVolume //从发射器中点发出 // 发射器渲染模式 @property(copy) NSString *renderMode; // 发射器渲染模式 kCAEmitterLayerUnordered //这种模式下,粒子是无序出现的,多个发射源将混合 kCAEmitterLayerOldestFirst //这种模式下,声明久的粒子会被渲染在最上层 kCAEmitterLayerOldestLast //这种模式下,年轻的粒子会被渲染在最上层 kCAEmitterLayerBackToFront //这种模式下,粒子的渲染按照Z轴的前后顺序进行 kCAEmitterLayerAdditive //这种模式会进行粒子混合
二、粒子单元
设置好了粒子发射器,我们还需要初始化一些粒子单元,设置具体粒子的属性,我们使用到的类是CAEmitterCell这个类。其相关属性如下:
// 设置发射单元的名称 @property(copy) NSString *name; // 是否允许发射器渲染 @property(getter=isEnabled) BOOL enabled; // 粒子的创建速率 @property float birthRate; // 粒子的生存时间 @property float lifetime; // 粒子的生存时间容差 @property float lifetimeRange; // 粒子在Z轴方向的发射角度 @property CGFloat emissionLatitude; // 粒子在xy平面的发射角度(以x轴正方向为0,顺时针指定角度) @property CGFloat emissionLongitude; // 粒子发射角度的容差(如果容差为0,粒子就按照上面指定的角度发射) @property CGFloat emissionRange; // 粒子的速度 @property CGFloat velocity; // 粒子速度的容差 @property CGFloat velocityRange; // x,y,z三个方向的加速度 @property CGFloat xAcceleration; @property CGFloat yAcceleration; @property CGFloat zAcceleration; // 缩放大小 @property CGFloat scale; // 缩放容差 @property CGFloat scaleRange; // 缩放速度 @property CGFloat scaleSpeed; // 旋转度 @property CGFloat spin; // 旋转容差 @property CGFloat spinRange; // 粒子的颜色 @property CGColorRef color; // 粒子在rgb三个色相上的容差和透明度的容差 @property float redRange; @property float greenRange; @property float blueRange; @property float alphaRange; // 粒子在RGB三个色相上的变化速度和透明度的变化速度 @property float redSpeed; @property float greenSpeed; @property float blueSpeed; @property float alphaSpeed; // 渲染粒子,可以设置为一个CGImage的对象 @property(strong) id contents; // 渲染的范围 @property CGRect contentsRect;
三、实例:
CAEmitterLayer *emitter = [CAEmitterLayer layer]; emitter.frame = self.view.bounds; [self.view.layer addSublayer:emitter]; // 发射器渲染模式 emitter.renderMode = kCAEmitterLayerAdditive; // 发射器在xy平面的位置 emitter.emitterPosition = CGPointMake(self.view.frame.size.width * 0.5, 0); CAEmitterCell *cell = [[CAEmitterCell alloc] init]; cell.contents = (id)[UIImage imageNamed:@"icon_34"].CGImage; // 粒子的创建速度 cell.birthRate = 5; // 粒子的存活时间 cell.lifetime =7.0 ; // 粒子透明度的变化速度 cell.alphaSpeed = 0; // 粒子速度 cell.velocity = 150; // 粒子速度的容差 cell.velocityRange = 100; // 粒子在xy平面的发射角度(以x轴正方向为0,顺时针指定角度) cell.emissionLongitude = M_PI_2; // 粒子发射角度的容差(如果容差为0,粒子就按照上面指定的角度发射) cell.emissionRange = M_PI_2; emitter.emitterCells = @[cell];
效果图:
相关文章推荐
- 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code
- ParticleEffect——canvas粒子效果组件
- 学习ExplosionField之粒子破碎效果
- Android 粒子效果
- libgdx 2D 粒子效果
- 粒子效果
- Cocos2d-x教程(6)-粒子效果
- View粒子爆炸效果
- cocos2d 粒子效果以及Particle Designer粒子工具的学习
- 动态模拟粒子溃堤效果
- cocos2d学习笔记第四章 粒子效果及座标系
- canvas实现粒子涂鸦效果
- cocos2d 粒子效果2
- 能产生粒子效果的CAEmitterLayer
- skyline粒子效果xml获取
- FCPX插件 PROPIXIE专业粒子颗粒效果+ProPixie高清素材包 Mac 激活版
- [Perk]如何实现粒子效果
- 粒子波浪和颤动效果!
- OGEngine_粒子效果
- 新的使用基于GPU粒子的火焰和爆炸效果