CAEmitterLayer实现雪花效果
CAEmitterLayer 简介
在iOS5.0中,Apple引入了CAEmitterLayer层,CAEmitterLayer是一个高性能的粒子效果引擎,被用来创建实时粒子动画,如:烟雾,火,雨等效果。CAEmitterLayer其实是一个粒子容器,负责按照开发者的设定,成产出一个或者多个粒子样式,然后将其模板化并大量生产。
实例:雪花效果
如果大家突然需要一个雪花效果,我相信大部分人的第一反应是使用定时器创建大量的ImageView对象,然后给每个ImageView对象添加动画。这种做法一方面操作复杂,一方面性能方面堪忧.既然现在大家都了解了CAEmitterLayer引擎,因此下面使用CAEmitterLayer引擎实现这个效果,看下其的便捷性和性能方面的优势。
1.创建一个CAEmitterLayer对象
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.frame = self.view.bounds;
[self.containerView.layer addSublayer:emitter];
emitter.renderMode = kCAEmitterLayerAdditive;
emitter.emitterPosition = CGPointMake(emitter.frame.size.width / 3.0, -75);
该layer的创建方式与基本CALayer层没什么区别,区别在于属性,下面将会简要介绍:
- rederMode:控制着在视觉上粒子图片是如何混合的。我们在实例中设置为了KCAEmitterLayerAdditive,它表示这:合并粒子重叠部分的亮度使其更加明亮,其他效果可以尝试下。
- emitterPosition:表示粒子发射器的中心位置
注意:CAEmitterLayer的属性控制着整个粒子系统的位置和形状,一些属性比如birthRate在粒子模板中也有。这些属性会以相乘的方式作用在一起。
2.创建一个粒子模板
CAEmitterCell *cell = [[CAEmitterCell alloc] init];
cell.contents = (__bridge id)[UIImage imageNamed:@"面板_雪花"].CGImage;
cell.birthRate = 5;
cell.lifetime =7.0 ;
cell.alphaSpeed = 0;
cell.velocity = 150;
cell.velocityRange = 100;
cell.emissionLongitude = M_PI / 2;
cell.emissionRange = M_PI /2 ;
emitter.emitterCells = @[cell];
值得一提的属性如下介绍:
- birthRate:表示粒子的生产速度,值越大,生产的速度越大
- lifetime:表示粒子的生命周期,在该范围内,粒子不会消失(当然,透明度可能也会让粒子显示出消失的效果)
- alphaSpeed:粒子透明度的变化速度,为负值时说明透明度慢慢变低
- velocity:表示粒子的位移加速度
- velocityRange:表示粒子的位移加速范围 与上一个参数配合使用
- emissionLongitude:粒子发射中心方向
- emissionRange:粒子发射范围
其他配置
我们按照上面的方法创建两个发射源,放在视图的顶部,设置雪花飘落的范围与方向,然后给视图配置一个美感的背景图,就可以实现一个雪花效果了。而且,我们做的工作其实很少,性能也有大大的提高。不多说,看效果

CAEmitterLayer实现雪花效果的更多相关文章
- ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo(转)
转载自:http://blog.csdn.net/mad2man/article/details/16898369 分类: cocoa SDK2013-11-23 11:52 388人阅读 评论(0) ...
- ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo
demo功能:基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果. demo说明:基于Core Animation的粒子发射系统,粒子用CAEmitterCell来初始化. 粒子画在背景层 ...
- CAEmitterLayer实现粒子效果
在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果. CAEm ...
- Html页面雪花效果的实现
简单介绍 昨天修改了一下博客所用的模板,冬天来了,给自己的博客加点雪花,感觉更有意境. 百度找到了非常多的结果,最终还是选用了cfs.snow.js,很赞压缩之后只有1kb左右,而且不会影响页面使用, ...
- 6 cocos2dx粒子效果,类图关系,系统原生粒子和自己定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果
1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad ...
- 使用CAEmitterLayer实现下雪效果
效果图: 代码部分: #import "ViewController.h" @interface ViewController () @end @implementation Vi ...
- 使用CAEmitterLayer产生粒子效果
ViewController.m #import "ViewController.h" @implementation ViewController - (void)viewDid ...
- 天气渐热,来片雪花降降温——Android自定义SurfaceView实现雪花效果
实现雪花的效果其实也可以通过自定义View的方式来实现的(SurfaceView也是继承自View的),而且操作上也相对简单一些,当然也有一些不足啦... 相对于View,SurfaceView有如下 ...
- JS实现雪花效果
演示效果 http://www.9696e.com/demo/snow/ 春节之前新一博客也会一直挂着的. 加载链接 <script src="http://www.9696e.com ...
随机推荐
- 关于 MonoDevelop on Linux 单步调试问题的解决
在 MonoDevelop 中默认是关闭对外部程序集(.dll)的调试,可通过如下步骤来解决这个问题. 通过菜单[Edit]-[Preferences]-[Debugger]进入到调试器的设置页,把“ ...
- spring mvc 项目聚合
创建一个maven 项目当父项目 创建时选择默认就可以 创建完成后 修改 pom.xml文件 把 packaging 的war改为pom <modelVersion>4.0.0</ ...
- PHP处理0e开头md5哈希字符串缺陷/bug
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他 ...
- a版本冲刺第六天
队名:Aruba 队员: 黄辉昌 李陈辉 林炳锋 鄢继仁 张秀锋 章 鼎 学号 昨天完成的任务 今天做的任务 明天要做的任务 困难点 体会 408 学习<第一行代码> 学习活动的消息 ...
- 使用css打造形形色色的形状!
使用css打造形形色色的形状! css是非常强大的工具,如果我们掌握的好,那么许多复杂的形状不需要使用图片而直接使用css完成即可,这不仅有利于减少http请求以增强性能还便于日后的管理和维护,一举两 ...
- IP地址,子网掩码、默认网关,DNS服务器是什么意思?
(一) 问题解析001. 问: IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,有什么区别呢?还有真 ...
- [Nhibernate]一级缓存
目录 写在前面 文档与系列文章 一级缓存 一个例子 一级缓存管理 总结 写在前面 上篇文章介绍了nhibernate中对象的三种状态,通过对象的三种状态,很容易想到缓存. 什麽是缓存? 有时候,某些数 ...
- Android网络操作的几种方法
安卓开发软件:AndroidStudio 服务器软件:Myeclipse+Tomcat 首先无论是哪种方式,安卓手机软件要想联网,必须要申请联网权限(android.permission.INTERN ...
- 【荐】PHP采集工具curl快速入门教程
为什么要用CURL? CURL(Client URL Library Functions)是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTT ...
- PHP简单 对象(object) 与 数组(array) 的转换
数组是PHP的灵魂,非常强大,但有时候面向对象编程也是挺方便的,数组 与 对象 之间切换也是常有的事: /** * 数组 转 对象 * * @param array $arr 数组 * @return ...