iOS---使用CAEmitterLayer制作发射粒子的特效
2016-06-18 09:40
369 查看
CAEmitterLayer是QuartzCore提供的粒子引擎, 可用于制作美观的粒子特效.
如下图是一个粒子特效的截图, 实际的动态效果会更好, 因为gif制作比较模糊就没有贴出来.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/f8f9d46bc508cc5fb08194e8a708b2a6)
如果是在UIViewController中, 则直接在layer上添加CAEmitterLayer即可:
添加CAEmitterLayer到view.layer中:
CAEmitterLayer其实是装载CAEmitterCell的容器, 有一个属性emitterCells, 将CAEmitterCell直接添加到该数组中, 即可实现粒子特效了.
关于速度等属性, 可以设置一个均值和一个扰动范围:
Each layer has its own random number generator state. Emitter cell properties that are defined as a mean and a range, such as a cell’s speed, the value of the properties are uniformly distributed in the interval [M - R/2, M + R/2].
DemoCAEmitterLayer
如下图是一个粒子特效的截图, 实际的动态效果会更好, 因为gif制作比较模糊就没有贴出来.
CAEmitterLayer
CAEmitterLayer与CAEAGLLayer类似, 如果放在UIView中则要重写UIView的layerClass方法:@interface ViewCAEmitter : UIView @end @implementation ViewCAEmitter + (Class)layerClass { return [CAEmitterLayer class]; } // xxx @end
如果是在UIViewController中, 则直接在layer上添加CAEmitterLayer即可:
@implementation UIViewController - (void)setupCAEmitterLayer { _caEmitterLayer = [CAEmitterLayer layer]; _caEmitterLayer.frame = self.view.frame; _caEmitterLayer.opaque = YES; [self.view.layer addSublayer:_caEmitterLayer]; } // xxx @end
添加CAEmitterLayer到view.layer中:
CAEmitterLayer *emitter = [CAEmitterLayer layer]; emitter.frame = self.bounds; [self.layer addSublayer:emitter]; // 配置emitter emitter.renderMode = kCAEmitterLayerAdditive; // 粒子如何混合, 这里是直接重叠 emitter.emitterPosition = position; // 发射点的位置
CAEmitterLayer其实是装载CAEmitterCell的容器, 有一个属性emitterCells, 将CAEmitterCell直接添加到该数组中, 即可实现粒子特效了.
CAEmitterCell
CAEmitterCell用来表示一个个的粒子, 它有一系列的参数用于设置效果.// create a particle template CAEmitterCell *cell = [[CAEmitterCell alloc] init]; cell.contents = (__bridge id)[UIImage imageNamed:imageName].CGImage; // 粒子中的图片 cell.yAcceleration = -10.f; // 粒子的初始加速度 cell.xAcceleration = -110.f; cell.birthRate = 2.f; // 每秒生成粒子的个数 cell.lifetime = 6.f; // 粒子存活时间 cell.alphaSpeed = -0.3f; // 粒子消逝的速度 cell.velocity = 30.f; // 粒子运动的速度均值 cell.velocityRange = 30.f; // 粒子运动的速度扰动范围 cell.emissionRange = M_PI * 10.f; // 粒子发射角度, 这里是一个扇形. // add particle template to emitter emitter.emitterCells = @[cell]; // 将粒子组成的数组赋值给CAEmitterLayer的emitterCells属性即可.
关于速度等属性, 可以设置一个均值和一个扰动范围:
Each layer has its own random number generator state. Emitter cell properties that are defined as a mean and a range, such as a cell’s speed, the value of the properties are uniformly distributed in the interval [M - R/2, M + R/2].
Demo
可参考Demo:DemoCAEmitterLayer
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- 基于javascript实现漂亮的页面过渡动画效果附源码下载