CAEmitterLayer实现粒子效果
在iOS 5中,苹果引入了一个新的CALayer
子类叫做CAEmitterLayer
。CAEmitterLayer
是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。
CAEmitterLayer
看上去像是许多CAEmitterCell
的容器,这些CAEmitierCell
定义了一个例子效果。你将会为不同的例子效果定义一个或多个CAEmitterCell
作为模版,同时CAEmitterLayer
负责基于这些模版实例化一个粒子流。一个CAEmitterCell
类似于一个CALayer
:它有一个contents
属性可以定义为一个CGImage
,另外还有一些可设置属性控制着表现和行为。我们不会对这些属性逐一进行详细的描述,你们可以在CAEmitterCell
类的头文件中找到。
我们来举个例子。我们将利用在一圆中发射不同速度和透明度的粒子创建一个火爆炸的效果。清单6.13包含了生成爆炸的代码。图6.13是运行结果
清单6.13 用CAEmitterLayer
创建爆炸效果
#import "ViewController.h" #import <QuartzCore/QuartzCore.h>@interface ViewController ()@property (nonatomic, weak) IBOutlet UIView *containerView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//create particle emitter layerCAEmitterLayer *emitter = [CAEmitterLayer layer];emitter.frame = self.containerView.bounds;[self.containerView.layer addSublayer:emitter];//configure emitteremitter.renderMode = kCAEmitterLayerAdditive;emitter.emitterPosition = CGPointMake(emitter.frame.size.width / 2.0, emitter.frame.size.height / 2.0);//create a particle templateCAEmitterCell *cell = [[CAEmitterCell alloc] init];cell.contents = (__bridge id)[UIImage imageNamed:@"Spark.png"].CGImage;cell.birthRate = 150;cell.lifetime = 5.0;cell.color = [UIColor colorWithRed:1 green:0.5 blue:0.1 alpha:1.0].CGColor;cell.alphaSpeed = -0.4;cell.velocity = 50;cell.velocityRange = 50;cell.emissionRange = M_PI * 2.0;//add particle template to emitteremitter.emitterCells = @[cell]; } @end
CAEMitterCell
的属性基本上可以分为三种:
- 这种粒子的某一属性的初始值。比如,
color
属性指定了一个可以混合图片内容颜色的混合色。在示例中,我们将它设置为桔色。 - 例子某一属性的变化范围。比如
emissionRange
属性的值是2π,这意味着例子可以从360度任意位置反射出来。如果指定一个小一些的值,就可以创造出一个圆锥形 - 指定值在时间线上的变化。比如,在示例中,我们将
alphaSpeed
设置为-0.4,就是说例子的透明度每过一秒就是减少0.4,这样就有发射出去之后逐渐小时的效果。
CAEmitterLayer
的属性它自己控制着整个例子系统的位置和形状。一些属性比如birthRate
,lifetime
和celocity
,这些属性在CAEmitterCell
中也有。这些属性会以相乘的方式作用在一起,这样你就可以用一个值来加速或者扩大整个例子系统。其他值得提到的属性有以下这些:
preservesDepth
,是否将3D例子系统平面化到一个图层(默认值)或者可以在3D空间中混合其他的图层renderMode
,控制着在视觉上粒子图片是如何混合的。你可能已经注意到了示例中我们把它设置为kCAEmitterLayerAdditive
,它实现了这样一个效果:合并例子重叠部分的亮度使得看上去更亮。如果我们把它设置为默认的kCAEmitterLayerUnordered
,效果就没那么好看了.
图6.13 火焰爆炸效果
转载于:https://www.cnblogs.com/Free-Thinker/p/5362225.html
CAEmitterLayer实现粒子效果相关推荐
- android 矢量粒子动画,iOS CAEmitterLayer实现粒子发射动画效果
iOS实现粒子发射动画效果图 动画效果用 CAEmitterLayer 实现.CAEmitterLayer 显示粒子发射动画,具体的粒子由 CAEmitterCell 封装.代码示例是展示 CAEmi ...
- iOS动画开发之五——炫酷的粒子效果
iOS动画开发之五--炫酷的粒子效果 在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一 ...
- iOS之仿QQ点赞按钮粒子效果的实现
效果展示 具体流程 一.封装YDWLikeButton 新建一个YDWLikeButton继承于UIButton,然后声明一个属性: @property (nonatomic, strong) CAE ...
- UIKit Particle Systems in iOS 5 Tutorial ( 附雨的粒子效果 )
原文地址:http://www.raywenderlich.com/6063/uikit-particle-systems-in-ios-5-tutorial?utm_source=feedburne ...
- 粒子效果动画使用总结
我们常见的一些像下雪.下雨.火苗这类的动画,都是可以使用粒子效果来实现.主要使用了类CAEmitterLayer和CAEmitterCell来实现.下面我们将通过实现一个下雪的效果来说明该类的使用方法 ...
- iOS-直播中粒子效果
转载注明出处: http://blog.csdn.net/qxuewei/article/details/53942647 粒子效果的应用场景: 主播房间右下角粒子动画 雪花/下雨/烟花等效果 QQ生 ...
- skyline粒子效果xml获取
skyline的粒子效果是有一堆复杂的xml配置而成,代码创建的时候需要根据xml来生成对象,鉴于xml格式官方并没详细提供,可以先用terraexplorer手动创建一个粒子效果对象,再用代码去找到 ...
- Unity3D中暂停时的动画及粒子效果实现
暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...
- 【Cocosd2d实例教程七】Cocos2d实现超炫的粒子效果!!
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.介绍 你想拥有炫酷的效果么,你想让你的应用亮瞎别人的狗眼么!!不要急,这里告诉大家怎么实现绚丽的粒 ...
最新文章
- exchange 2010 集线器(hub)外发邮件的配置
- 大神讲解Java for循环的几种用法
- 修改页面后获得flag_互动征集丨是时候为2021立flag了
- html嵌入excel_第5天 | 16天搞定前端,html布局,表格和大块头
- Selenium-IDE脚本录制,selenium-side-runner自动化测试教程
- ALTERA 命名规则
- 图:最新微软框架的现场计分双屏管理系统终于收工,大家请欣赏界面。
- DeepStream:下一代智慧城市的视频分析
- 2021年1月PMP考试改版
- win10忘记密码——无需启动盘修改密码
- 谷歌浏览器利用开发者工具截取长图
- 据说中国电信将ADSL的80端口给封了
- python绘制中国_Python-Geopandas 教你绘制中国地图
- ASCII Grid
- Android Zygote进程启动过程
- MySQL中ignore,replace的使用
- After Effects Guru: Advanced Photoshop Integration After Effects 大师教程之与Photoshop集成高级技巧 Lynda课程中文字幕
- 给视频加字幕HTML代码,给Html5视频播放器添加字幕
- Android学习之视频音乐列表ListView
- 亲历H5移动端游戏微信支付接入及那些坑(一)——支付方式与坑
热门文章
- Ubuntu server下“初始化月份字符串出错”的解决
- linux tune2fs命令详解
- VC跨进程数据(结构体)传递-WM_COPYDATA
- [Linux] VIM 代码折叠
- 监听vuex的某条数据
- [react-router] react的路由和普通路由有什么区别?
- [react] react与angular、vue有什么区别?
- [react] create-react-app有什么好处?
- [react] 说说你对Relay的理解
- 前端学习(3133):react-hello-react之高阶函数