iOS 粒子效果实现:CAEmitterLayer + CAEmitterCell

简介: CAEmitterLayer是Core Animation中的特殊图层,继承自CALayer,是一个粒子发射器,用于控制粒子效果

CAEmitterLayer


CAEmitterLayer是Core Animation中的特殊图层,继承自CALayer,是一个粒子发射器,用于控制粒子效果


属性


image.pngimage.png


下面着重介绍下常用的属性


  • emitterShape:决定发射源的形状,并不是粒子的形状
  • emitterMode:发射模式,决定发射区域在发射源的哪一部分
  • emitterSize:发射源的尺寸大小
  • emitterPosition:发射源的重心点位置
  • renderMode:渲染模式
  • emitterCells:粒子样式数组,每一个粒子就是一个CAEmitterCell


其中 emitterShape 、 emitterMode、renderMode都是枚举类型


emitterShape:发射源的形状


发射源的形状有以下几种

image.png


emitterMode:发射模式


发射模式有以下几种

image.png


renderMode:渲染模式


渲染模式有以下几种

image.png

注:每秒粒子产生的个数 = layer.birthRate * cell.birthRate


CAEmitterCell


CAEmitterCell是粒子的样式类,用来创建粒子,类似于UITableView中的cell,同时也可以复用


属性


image.png

image.png


下面着重介绍下常用的属性


  • lifetime:粒子生命周期,即存活时间,单位是秒
  • birthRate:粒子的产生率,即每秒产生多少粒子的个数
  • contents:粒子的内容,通常为CGImageRef的对象,将提供的图片从UIImage转换为CGImageRef类型
  • name:粒子的名字,即粒子的唯一标识,可以KVC通过name拿到粒子的需要修改的属性
  • color:粒子的颜色,会结合contents的颜色来决定粒子的最终颜色,如果想完全通过color来控制cell的颜色,最好设置一张白色的图片
  • redSpeed & greenSpeed & blueSpeed & alphaSpeed:color中RGBA的取值范围,默认还0,范围是[0,1],如果cell的color设置为[[UIColor colorWithRed:0.5 green:0.4 blue:0.5 alpha:1] CGColor];,在设置redSpeed & greenSpeed & blueSpeed & alphaSpeed全部为0.1,对应的RGB取值范围是R(0.1, 0.5)、G(0.1,0.4 )、B(0.1, 0.5)、A(0.1, 1.0)
  • velocity & velocityRange: 粒子的初始速度和范围
  • xAcceleration & yAcceleration & zAcceleration:分别是x、y、z轴上的加速度,当为正数时,向坐标轴的正方向加速,反之,向负方向加速
  • scale & scaleRange:粒子的缩放比例及范围,缩放比例默认是0,范围是[0,1]


以下是实现的几种的粒子效果图示


  • 粽子雨、红包雨等粒子效果


image.png

点赞按钮的粒子效果

image.png

点赞粒子效果


类似烟花的粒子效果


下雨的粒子效果

image.png


以上的几种效果的实现就不一一详细说明了.


粒子效果实现的一般步骤


接下来总结粒子效果实现的步骤:


  • 利用CAEmitterLayer创建粒子图层layer,即发射源,并添加到视图的layer上
  • 设置发射源的属性,例如:emitterShape、emitterMode、emitterSize、emitterPosition等
  • 通过CAEmitterCell创建粒子cell
  • 设置粒子的相关属性,例如contents、birthRate、lifetime、speed等
  • 将粒子cell添加到发射源的emitterCells数组中


部分示例代码如下:

- (void)zongZiRain{
//    1、设置CAEmitterLayer
    CAEmitterLayer *rainLayer = [CAEmitterLayer layer];
//    2、在背景图上添加粒子图层
    [self.view.layer addSublayer:rainLayer];
    self.rainlayer = rainLayer;
//    3、发射形状--线性
    rainLayer.emitterShape = kCAEmitterLayerLine;
    //发射模式
    rainLayer.emitterMode = kCAEmitterLayerSurface;
    //发射形状的大小
    rainLayer.emitterSize = self.view.frame.size;
    //发射的中心点位置
    rainLayer.emitterPosition = CGPointMake(self.view.bounds.size.width*0.5, -10);
//    4、配置cell
    CAEmitterCell *cell = [CAEmitterCell emitterCell];
    //粒子图片
    cell.contents = (id)[[UIImage imageNamed:@"zongzi2.jpg"] CGImage];
    //每秒钟创建的粒子对象,默认是0
    cell.birthRate = 1.0;
    //粒子的生存周期,以s为单位,默认是0
    cell.lifetime = 30;
    //粒子发射的速率,默认是1
    cell.speed = 2;
    //粒子的初始平均速度及范围,默认为0
    cell.velocity = 10.0f;
    cell.velocityRange = 10.0f;
    //y方向的加速度矢量,默认是0
    cell.yAcceleration = 60;
    //粒子的缩放比例及范围,默认是[1,0]
    cell.scale = 0.05;
    cell.scaleRange = 0.0f;
//    5、添加到图层上
    rainLayer.emitterCells = @[cell];
}



相关文章
|
安全 数据安全/隐私保护 iOS开发
iOS小技能:【发红包】使用tweak和lua脚本结合进行实现
我们开发的大部分越狱程序,都是编译成动态链接库(`例如:介绍的越狱程序(Tweak)开发,就是动态链接库。`),然后通过越狱平台的MobileSubstrate(iOS7上叫CydiaSubstrate)来加载进入目标程序(Target),通过对目标程序的挂钩(Hook),来实现相应的功能。
266 0
|
API iOS开发 Perl
iOS UIButton倒计时、指示器、粒子效果
iOS UIButton倒计时、指示器、粒子效果
iOS UIButton倒计时、指示器、粒子效果
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
221 0
|
存储 数据处理 iOS开发
iOS开发-本地推送实现方法和数据处理方案(二)
iOS开发-本地推送实现方法和数据处理方案(二)
171 0
|
存储 数据处理 iOS开发
iOS开发-本地推送实现方法和数据处理方案(一)
iOS开发-本地推送实现方法和数据处理方案(一)
212 0
|
iOS开发
iOS开发 - 不通过import引入类名实现push或present
iOS开发 - 不通过import引入类名实现push或present
77 0
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
358 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
|
存储 安全 iOS开发
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
406 0
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
351 0
iOS开发 - swift通过Alamofire实现https通信
|
开发者 iOS开发
iOS开发 - 用AFNetworking实现https单向验证,双向验证
iOS开发 - 用AFNetworking实现https单向验证,双向验证
348 0
iOS开发 - 用AFNetworking实现https单向验证,双向验证