一、在 UIKit 中,粒子系统由两部分组成:

1·      一个或多个  CAEmitterCells :发射器电池能够看作是单个粒子的原型(比如,一个单一的粉扑在一团烟雾)。当散发出一个粒子,UIKit依据这个发射粒子和定义的基础上创建一个随机粒子。此原型包含一些属性来控制粒子的图片。颜色。方向。运动,缩放比例和生命周期。

2·      一个或多个  CAEmitterLayers。 但通常仅仅有一个:这个发射的层主要控制粒子的形状(比如。一个点。矩形或圆形)和发射的位置(比如,在矩形内。或边缘)。

这个层具有全局的乘法器。能够施加到系统内的CAEmitterCells。

这些给你一个简单的方法覆盖的全部粒子的变化。比方一个人为的样例将改变x雨来模拟风的速度。

基础是简单的,但这些參数却是相当微妙的。

CAEmitterLayer有超过30种不同的參数进行自己定义粒子的行为。以下,我就拼出来的一些特殊问题.

有两个类在你创建粒子系统时将会须要使用。它们在QuartzCore框架中。名叫CAEmitterLayer和CAEmitterCell。

通常的想法是创建一个CAEmitterLayer,并将一个或多个CAEmitterCell加入到里面。接着每一个单元(cell)会按它配置的样式产生粒子。

并且CAEmitterLayer继承自CALayer。你能轻易地在UIKit分层的不论什么地方增加它。

我想这个新的UIKit粒子系统最酷的是一个单独的CAEmitterLayer能够支持多个CAEmitterCell。这支持你完毕一些相当复杂并且非常酷的效果。比如当你创建泉水时,你能拥有一个cell发射水滴。还有一个cell在泉水上发射水蒸汽  。

二、代码实现:

创建单试图project,在viewContrloller.h文件里加入  #import <CoreGraphics/CoreGraphics.h>语句,

在  viewContrloller.m文件中代码例如以下:

- (void)viewDidLoad
{
[super viewDidLoad]; CAEmitterLayer *snowEmitter = [CAEmitterLayer layer];
//样例发射位置
snowEmitter.emitterPosition = CGPointMake(120,20);
//发射源的尺寸大小
snowEmitter.emitterSize = CGSizeMake(self.view.bounds.size.width * 20, 20);
//发射模式
snowEmitter.emitterMode = kCAEmitterLayerSurface;
//发射源的形状
snowEmitter.emitterShape = kCAEmitterLayerLine; //创建雪花类型的粒子
CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
//粒子的名字
snowflake.name = @"snow";
//粒子參数的速度乘数因子
snowflake.birthRate = 1.0;
snowflake.lifetime = 120.0;
//粒子速度
snowflake.velocity =10.0;
//粒子的速度范围
snowflake.velocityRange = 10;
//粒子y方向的加速度分量
snowflake.yAcceleration = 2;
//周围发射角度
snowflake.emissionRange = 0.5 * M_PI;
//子旋转角度范围
snowflake.spinRange = 0.25 * M_PI;
snowflake.contents = (id)[[UIImage imageNamed:@"DazFlake"] CGImage];
//设置雪花形状的粒子的颜色
snowflake.color = [[UIColor colorWithRed:0.200 green:0.258 blue:0.543 alpha:1.000] CGColor]; //创建星星形状的粒子
CAEmitterCell *snowflake1 = [CAEmitterCell emitterCell];
//粒子的名字
snowflake1.name = @"snow";
//粒子參数的速度乘数因子
snowflake1.birthRate = 1.0;
snowflake1.lifetime = 120.0;
//粒子速度
snowflake1.velocity =10.0;
//粒子的速度范围
snowflake1.velocityRange = 10;
//粒子y方向的加速度分量
snowflake1.yAcceleration = 2;
//周围发射角度
snowflake1.emissionRange = 0.5 * M_PI;
//子旋转角度范围
snowflake1.spinRange = 0.25 * M_PI;
//粒子的内容和内容的颜色
snowflake1.contents = (id)[[UIImage imageNamed:@"DazStarOutline"] CGImage];
snowflake1.color = [[UIColor colorWithRed:0.600 green:0.658 blue:0.743 alpha:1.000] CGColor]; snowEmitter.shadowOpacity = 1.0;
snowEmitter.shadowRadius = 0.0;
snowEmitter.shadowOffset = CGSizeMake(0.0, 1.0);
//粒子边缘的颜色
snowEmitter.shadowColor = [[UIColor redColor] CGColor]; snowEmitter.emitterCells = [NSArray arrayWithObjects:snowflake,snowflake1,nil];
[self.view.layer insertSublayer:snowEmitter atIndex:0];
// Do any additional setup after loading the view.
}

执行结果:雪花型和星星型的粒子在屏幕上随机出现,并缓缓下落




三、以下是 CAEmitterLayer和CAEmitterCell 的一些属性:

CAEmitterLayer 提供了一个基于 Core
Animation 的粒子 发 射系统 ,粒子用 CAEmitterCell 来初始化。 粒子画在背景 层 盒 边 界上

Properties:

birthRate: 粒子 产 生系数,默 认 1.0 。

emitterCells:    装着 CAEmitterCell 对 象的数 组 ,被用于把粒子投放到 layer 上;

emitterDepth: 决定粒子形状的深度 联 系: emitter
shape

emitterMode: 发 射模式

NSString * const kCAEmitterLayerPoints;

NSString * const kCAEmitterLayerOutline;

NSString * const kCAEmitterLayerSurface;

NSString * const kCAEmitterLayerVolume;

emitterPosition: 发 射位置

emitterShape: 发 射源的形状:

NSString * const kCAEmitterLayerPoint;

NSString * const kCAEmitterLayerLine;

NSString * const kCAEmitterLayerRectangle;

NSString * const kCAEmitterLayerCuboid;

NSString * const kCAEmitterLayerCircle;

NSString * const kCAEmitterLayerSphere;

emitterSize: 发 射源的尺寸大;

emitterZposition: 发 射源的 z 坐 标 位置;

lifetime: 粒子生命周期

preservesDepth: 不是多非常清楚(粒子是平展在 层 上)

renderMode: 渲染模式:

NSString * const kCAEmitterLayerUnordered;

NSString * const kCAEmitterLayerOldestFirst;

NSString * const kCAEmitterLayerOldestLast;

NSString * const kCAEmitterLayerBackToFront;

NSString * const kCAEmitterLayerAdditive;

scale: 粒子的缩放比例:

seed :用于初始化随机数产生的种子

spin: 自旋转速度

velocity :粒子速度

CAEmitterCell

CAEmitterCell 类 代从从 CAEmitterLayer 射出的粒子; emitter
cell定 义 了粒子 发 射的方向。

alphaRange:     一个粒子的 颜 色 alpha 能改 变 的范 围 。

alphaSpeed: 粒子透明度在生命周期内的改变速度;

birthrate :粒子參数的速度乘数因子;

blueRange :一个粒子的 颜 色 blue    能改 变 的范 围 ;

blueSpeed:    粒子  blue 在生命周期内的改变速度。

color: 粒子的颜色

contents :是个  CGImageRef 的对象  , 既粒子要展现的图片;

contentsRect :应该画在  contents 里的子  rectangle :

emissionLatitude :发射的  z 轴方向的角度

emissionLongitude:x-y 平面的 发 射方向

emissionRange ;周 围发射角度

emitterCells :粒子发射的粒子

enabled :粒子是否被渲染

greenrange:    一个粒子的 颜 色 green    能改 变 的范 围 ;

greenSpeed:    粒子  green 在生命周期内的改变速度;

lifetime :生命周期

lifetimeRange :生命周期范围

magnificationFilter :不是非常清楚好像添加自己的大小

minificatonFilter :减小自己的大小

minificationFilterBias :减小大小的因子

name :粒子的名字

redRange : 一个粒子的 颜 色 red    能改 变 的范 围 ;

redSpeed;    粒子  red 在生命周期内的改变速度。

scale :缩放比例:

scaleRange :缩放比例范围;

scaleSpeed :缩放比例速度:

spin :子旋转角度

spinrange :子旋转角度范围

style :不是非常清楚:

velocity :速度

velocityRange :速度范围

xAcceleration: 粒子  x 方向的加速度分量

yAcceleration: 粒子  y 方向的加速度分量

zAcceleration: 粒子  z 方向的加速度分量

Class Methods

defauleValueForKey:    更具健 获 得 值 。

emitterCell :初始化方法

shouldArchiveValueForKey: 是否 归 档莫 键值

要学习的东西还有非常多,慢慢的熟悉。

CAEmitterCell 和 CAEmitterLayer具体解释的更多相关文章

  1. 使用带粒子效果的 CAEmitterLayer

    1.用CAEmitterLayer产生粒子效果 2.封装CAEmitterLayer 3.封装下雪.下雨的粒子效果控件 一.用CAEmitterLayer产生粒子效果 - (void)emitterL ...

  2. iOS 开发之粒子效果

    本文由糖炒小虾.Benna翻译 ,校对:sai.u0u0.iven.子龙山人 iOS 5中的UIKit粒子系统教程 Ray的话:这是第15篇.也是最后一篇<iOS 5 盛宴>中的iOS 5 ...

  3. CAEmitterLayer实现雪花效果

    CAEmitterLayer 简介 在iOS5.0中,Apple引入了CAEmitterLayer层,CAEmitterLayer是一个高性能的粒子效果引擎,被用来创建实时粒子动画,如:烟雾,火,雨等 ...

  4. 关于粒子发射(CAEmitterLayer)

    技术是条长而远的路,只有不断学习丰富自己的技能才能让自己行走在路上! CAEmitterCell CAEmitterCell: CAEmitterCell是粒子发射系统里的粒子,用CAEmitterC ...

  5. CAEmitterLayer 粒子发射Layer的相关属性

    emitterCells:CAEmitterCell对象的数组,被用于把粒子投放到layer上 birthRate:可以通俗的理解为发射源的个数,默认1.0.当前每秒产生的真实粒子数为=CAEmitt ...

  6. iOS - CAEmitterLayer流星

    效果图: 流星: #pragma mark - loading animation - (void)showLoadingAnimation { CGRect mainBounds = [[UIScr ...

  7. iOS - CAEmitterLayer 学习笔记一

    其他参考博客: http://my.oschina.net/u/2340880/blog/485095 http://www.cnblogs.com/YouXianMing/p/3785876.htm ...

  8. 能产生粒子效果的CAEmitterLayer

    能产生粒子效果的CAEmitterLayer 下雪效果: // // RootViewController.m // Cell // // Copyright (c) 2014年 Y.X. All r ...

  9. ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo(转)

    转载自:http://blog.csdn.net/mad2man/article/details/16898369 分类: cocoa SDK2013-11-23 11:52 388人阅读 评论(0) ...

随机推荐

  1. UIScrollView 循环滚动,代码超简单

    如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...

  2. win10 家庭中文版打开本地组策略编辑器

      win10 家庭中文版打开本地组策略编辑器 CreateTime--2018年5月14日09:01:25 Author:Marydon 1.问题描述 2.问题解析 win10家庭版没有访问本地组策 ...

  3. springmvc处理流程

    SpringMVC核心处理流程: 1.DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射器 2.HandlerMapping处理器映射器,根据请求 ...

  4. JDBC 关于大文本数据

    大文本数据Clob,在不同的数据库中类型名不一致,有的是text格式,有的是clob,还有其他一些格式   package test; import java.io.BufferedReader; i ...

  5. php.ini中的pcre

    当页面代码没有任何问题,也没有报错.但是页面的循环很多,请求导致开销很大的时候,有可能要改php.ini中的pcre部分. [Pcre]pcre.recursion_limit=-1pcre.back ...

  6. [Asp.net]缓存之页面缓存,控件缓存,缓存依赖

    写在前面 上篇文章介绍了缓存的基本概念及用途,另外也举了一个简单的例子,数据缓存(将一些耗费时间的数据加入到一个对象缓存集合中,以键值的方式存储.可以通过使用Cache.Insert()方法来设置缓存 ...

  7. Java数据结构和算法(二):数组

    上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...

  8. How To run OAI eNB (No S1) with USRP X310(1)

    How To run OAI eNB (No S1) with USRP X310 1.Things need to be done 1.1 Install Ubuntu 14.04 1.1.1 In ...

  9. 从零开始学习OpenCL开发(一)架构

    1 异构计算.GPGPU与OpenCL OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片 异构计算(heterogeneous)的标准,它是跨平台的.旨在充分利用GPU ...

  10. 孙源即将分享 DynamicCocoa 实现细节

    孙源即将分享 DynamicCocoa 实现细节   我的公众号之前发的一文中提到滴滴做了一个很牛逼的动态化方案 DynamicCocoa.该方案设计得非常精巧,解决了两种不同的语言在代码上如何等价生 ...