zoukankan      html  css  js  c++  java
  • CAEmitterCell 和 CAEmitterLayer具体解释



    一、在 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: 是否  档莫 键值


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

  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6755212.html
Copyright © 2011-2022 走看看