一、在 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. SQL SERVER: 合并相关操作(Union,Except,Intersect)

    SQL SERVER: 合并相关操作(Union,Except,Intersect) use tempdb create table tempTable1 (id int primary key id ...

  2. Android SDK 更新和下载慢怎么办?

    博客搬家:因为各种原因,我如今的博客将首发于blog.mojijs.com, 能够百度搜索 "姜哥的墨迹技术博客" , 或者 点击这里 本文地址 http://blog.mojij ...

  3. JDBC 滚动和分页

    public class ScrollTest {     /**      * @param args      * @throws SQLException      */     public ...

  4. 【LeetCode】97. Interleaving String

    Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Fo ...

  5. 微信公众平台自定义菜单及高级接口PHP SDK(转)

    本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw ...

  6. dll中使用exe中的变量

    注意:输出目录为:Result共享目录 1.exe项目: // EXE.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" extern" ...

  7. 用Visual studio2012在Windows8上开发内核驱动监视线程创建

    在Windows NT中,80386保护模式的“保护”比Windows 95中更坚固,这个“镀金的笼子”更加结实,更加难以打破.在Windows 95中,至少应用程序I/O操作是不受限制的,而在Win ...

  8. 如何用C#做一个悬浮窗口程序

    用C#做一个像FlashGet的悬浮窗口,其实很简单,不像以前需要调用很多系统API.大致的步骤如下. 首先是主窗体部分,即要判断窗体的状态来决定是否显示悬浮窗口. 局部成员声明: private F ...

  9. 解决 scrapy 爬虫出现Forbidden by robots.txt

    我们在爬取网站的时候,scrapy  默认的是遵循  robots.txt 协议,怎么破解这个文件 操作很简单,找到setting 文件 直接改成

  10. Nginx设置expires设定页面缓存时间 不缓存或一直使用缓存

    配置expires expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求 要配置expires,可以在http段中或者server段中或者location段中加入 l ...