iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画

CAEmitterLayer,是CALayer子类,自iOS 5.0以后推出,是一个高性能的粒子引擎,被用来创建实时粒子动画;
CAEmitterCell,类似于一个CALayer,自带一个contents属性,用于设定CGImage图像;
CAEmitterLayer可以理解为是CAEmitterCell的容器,可以包含多种CAEmitterCell的cells;

结果如下图:
粒子图片素材
这里写图片描述
运行结果
这里写图片描述

这里写图片描述

发送形状的样式:emitterShape

 发送形状的样式:emitterShape
     CA_EXTERN NSString * const kCAEmitterLayerPoint  点
     CA_EXTERN NSString * const kCAEmitterLayerLine   线
     CA_EXTERN NSString * const kCAEmitterLayerRectangle  举行
     CA_EXTERN NSString * const kCAEmitterLayerCuboid 立方体
     CA_EXTERN NSString * const kCAEmitterLayerCircle 曲线
     CA_EXTERN NSString * const kCAEmitterLayerSphere 圆形

发送的样式:emitterMode

 发送的样式:emitterMode
     CA_EXTERN NSString * const kCAEmitterLayerPoints   以点的方式  默认样式
     CA_EXTERN NSString * const kCAEmitterLayerOutline  线的样式
     CA_EXTERN NSString * const kCAEmitterLayerSurface  以面的形式
     CA_EXTERN NSString * const kCAEmitterLayerVolume   以团的样式

粒子出现的样式:renderMode

 粒子出现的样式:renderMode
     CA_EXTERN NSString * const kCAEmitterLayerOldestFirst最后一个出生的粒子在第一个
     CA_EXTERN NSString * const kCAEmitterLayerOldestLast最后出生的就在最后一个
     CA_EXTERN NSString * const kCAEmitterLayerBackToFront把后面的放到上面
     CA_EXTERN NSString * const kCAEmitterLayerAdditive叠加效果

粒子的属性

 粒子的属性
     contents:粒子的内容
     lifetime:存活时间
     birthRate:每秒发送粒子数量
     lifetimeRange:存活时间的范围
     birthRate:每秒的粒子生成的数量
     emissionLatitude:散发的维度  他表示的是一个弧度   上下
     emissionLongitude:散发的经度  ->弧度   ->左右
     velocity:发送的速度   速度越快发送的越远->动力
     velocityRange:发送速度的范围
     xAcceleration;  x,y,z轴的加速度  惯性  动力
     yAcceleration;
     zAcceleration;
     emissionRange:散发的范围  ->弧度  ->范围
     name:粒子的名字  可以通过名字  找到粒子

具体代码实现步骤:
1、定义一个CAEmitterLayer属性

@interface ViewController ()
@property (nonatomic ,strong)CAEmitterLayer *emitterLayer;
@end

2、懒加载CAEmitterLayer

//懒加载离子发射器
- (CAEmitterLayer *)emitterLayer{
    if (_emitterLayer) {
        return _emitterLayer;
    }
    _emitterLayer = [[CAEmitterLayer alloc]init];
    [self.view.layer addSublayer:_emitterLayer];
    _emitterLayer.backgroundColor = [UIColor blackColor].CGColor;
    return _emitterLayer;
}

3、定位离子发射器发射点的位置

    //定位离子发射器发射点的位置
    self.emitterLayer.emitterPosition = self.view.center;
    self.view.backgroundColor = [UIColor blackColor];

4、设置粒子发送器每秒钟发送粒子数量

    //设置粒子发送器每秒钟发送粒子数量
    self.emitterLayer.birthRate = 3;

5、初始化粒子颗粒,并添加图片

//初始化粒子颗粒1,并添加图片
    CAEmitterCell *cell = [CAEmitterCell emitterCell];
    cell.contents = (id)[UIImage imageNamed:@"红花"].CGImage;
    //初始化粒子颗粒2,并添加图片
    CAEmitterCell *cell1 = [CAEmitterCell emitterCell];
    cell1.contents = (id)[UIImage imageNamed:@"花叶"].CGImage;
    //初始化粒子颗粒3,并添加图片
    CAEmitterCell *cell2 = [CAEmitterCell emitterCell];
    cell2.contents = (id)[UIImage imageNamed:@"树叶"].CGImage;

6、设置粒子散发参数

/**
     *  设置红花散发参数
     */
    //  粒子的出生量
    cell.birthRate = 2;
    //  存活时间
    cell.lifetime = 5;
    cell.lifetimeRange = 1;
    //  设置粒子发送速度
    cell.velocity = 50;
    cell.velocityRange = 30;
    //  粒子发送的方向
    cell.emissionLatitude = M_PI;
    //  发送粒子的加速度
    cell.zAcceleration = -100;
    //  散发粒子的范围  ->  弧度
    cell.emissionRange = 2*M_PI;

    /**
     *  设置花叶散发参数
     */
    //  粒子的出生量
    cell1.birthRate = 3;
    //  存活时间
    cell1.lifetime = 3;
    cell1.lifetimeRange = 2;
    //  设置粒子发送速度
    cell1.velocity = 50;
    cell1.velocityRange = 120;
    //  粒子发送的方向
    cell1.emissionLongitude = 2*M_PI;
    //  发送粒子的加速度
    cell1.xAcceleration = 100;
    //  散发粒子的范围  ->  弧度
    cell1.emissionRange = 2*M_PI; 


    /**
     *  设置树叶散发参数
     */
    //   粒子的出生量
    cell2.birthRate = 3;
    //   存活时间
    cell2.lifetime = 3;
    cell2.lifetimeRange = 1;
    //   设置粒子发送速度
    cell2.velocity = 80;
    cell2.velocityRange = 150;
    //   粒子发送的方向
    cell2.emissionLatitude = M_PI;
    //   发送粒子的加速度
    cell2.zAcceleration = -100;
    //   散发粒子的范围  ->  弧度
    cell2.emissionRange = 2*M_PI;

7、把粒子的cell添加到粒子发送器emitterLayer中

    //把粒子的cell添加到粒子发送器
    self.emitterLayer.emitterCells = @[cell,cell1,cell2];
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值