能产生粒子效果的CAEmitterLayer

下雪效果:

//
// RootViewController.m
// Cell
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor]; // 创建粒子Layer
CAEmitterLayer *snowEmitter = [CAEmitterLayer layer]; // 粒子发射位置
snowEmitter.emitterPosition = CGPointMake(,); // 发射源的尺寸大小
snowEmitter.emitterSize = self.view.bounds.size; // 发射模式
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 = ; // 粒子y方向的加速度分量
snowflake.yAcceleration = ; // 周围发射角度
snowflake.emissionRange = 0.5 * M_PI; // 子旋转角度范围
snowflake.spinRange = 0.25 * M_PI;
snowflake.contents = (id)[[UIImage imageNamed:@"snow"] CGImage]; // 设置雪花形状的粒子的颜色
snowflake.color = [[UIColor whiteColor] CGColor]; snowflake.scaleRange = 0.6f;
snowflake.scale = 0.7f; snowEmitter.shadowOpacity = 1.0;
snowEmitter.shadowRadius = 0.0;
snowEmitter.shadowOffset = CGSizeMake(0.0, 0.0); // 粒子边缘的颜色
snowEmitter.shadowColor = [[UIColor whiteColor] CGColor]; // 添加粒子
snowEmitter.emitterCells = @[snowflake]; // 将粒子Layer添加进图层中
[self.view.layer addSublayer:snowEmitter];
} @end

烟花效果:

//
// RootViewController.m
// Cell
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor]; // Cells spawn in the bottom, moving up
CAEmitterLayer *fireworksEmitter = [CAEmitterLayer layer];
CGRect viewBounds = self.view.layer.bounds;
fireworksEmitter.emitterPosition = \
CGPointMake(viewBounds.size.width/2.0, viewBounds.size.height); fireworksEmitter.emitterSize = CGSizeMake(viewBounds.size.width/2.0, 0.0);
fireworksEmitter.emitterMode = kCAEmitterLayerOutline;
fireworksEmitter.emitterShape = kCAEmitterLayerLine;
fireworksEmitter.renderMode = kCAEmitterLayerAdditive;
fireworksEmitter.seed = (arc4random()%)+; // Create the rocket
CAEmitterCell* rocket = [CAEmitterCell emitterCell]; rocket.birthRate = 1.0;
rocket.emissionRange = 0.25 * M_PI; // some variation in angle
rocket.velocity = ;
rocket.velocityRange = ;
rocket.yAcceleration = ;
rocket.lifetime = 1.02; // we cannot set the birthrate < 1.0 for the burst rocket.contents = (id) [[UIImage imageNamed:@"DazRing"] CGImage];
rocket.scale = 0.2;
rocket.color = [[UIColor redColor] CGColor];
rocket.greenRange = 1.0; // different colors
rocket.redRange = 1.0;
rocket.blueRange = 1.0;
rocket.spinRange = M_PI; // slow spin // the burst object cannot be seen, but will spawn the sparks
// we change the color here, since the sparks inherit its value
CAEmitterCell* burst = [CAEmitterCell emitterCell]; burst.birthRate = 1.0; // at the end of travel
burst.velocity = ;
burst.scale = 2.5;
burst.redSpeed =-1.5; // shifting
burst.blueSpeed =+1.5; // shifting
burst.greenSpeed =+1.0; // shifting
burst.lifetime = 0.35; // and finally, the sparks
CAEmitterCell* spark = [CAEmitterCell emitterCell]; spark.birthRate = ;
spark.velocity = ;
spark.emissionRange = * M_PI; // 360 deg
spark.yAcceleration = ; // gravity
spark.lifetime = ; spark.contents = (id) [[UIImage imageNamed:@"snow"] CGImage];
spark.scaleSpeed =-0.2;
spark.greenSpeed =-0.1;
spark.redSpeed = 0.4;
spark.blueSpeed =-0.1;
spark.alphaSpeed =-0.25;
spark.spin = * M_PI;
spark.spinRange = * M_PI; // putting it together
fireworksEmitter.emitterCells = [NSArray arrayWithObject:rocket];
rocket.emitterCells = [NSArray arrayWithObject:burst];
burst.emitterCells = [NSArray arrayWithObject:spark];
[self.view.layer addSublayer:fireworksEmitter];
} @end

/* The birth rate of each cell is multiplied by this number to give the
 * actual number of particles created every second. Default value is one.
 * Animatable. */

@property float birthRate;

/* The cell lifetime range is multiplied by this value when particles are
 * created. Defaults to one. Animatable. */

@property float lifetime;

/* The center of the emission shape. Defaults to (0, 0, 0). Animatable. */

@property CGPoint emitterPosition;
@property CGFloat emitterZPosition;

/* The size of the emission shape. Defaults to (0, 0, 0). Animatable.
 * Depending on the `emitterShape' property some of the values may be
 * ignored. */

@property CGSize emitterSize;
@property CGFloat emitterDepth;

/* Multiplies the cell-defined particle velocity. Defaults to one.
 * Animatable. */

@property float velocity;

/* Multiplies the cell-defined particle scale. Defaults to one. Animatable. */

@property float scale;

/* Multiplies the cell-defined particle spin. Defaults to one. Animatable. */

@property float spin;

你需要知道的非常重要的细节:

CAEmitterCell的动画属性挺多的,但有点奇葩的是,必须是通过KVC设置值才行的通,而且,动画结束时的值也必须通过KVC设置才有效......

//
// RootViewController.m
// Cell
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h"
#import "YXGCD.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor]; // 创建粒子Layer
CAEmitterLayer *snowEmitter = [CAEmitterLayer layer]; // 粒子发射位置
snowEmitter.emitterPosition = CGPointMake(,); // 发射源的尺寸大小
snowEmitter.emitterSize = self.view.bounds.size; // 发射模式
snowEmitter.emitterMode = kCAEmitterLayerSurface; // 发射源的形状
snowEmitter.emitterShape = kCAEmitterLayerLine; // 创建雪花类型的粒子
CAEmitterCell *snowflake = [CAEmitterCell emitterCell]; // 粒子参数的速度乘数因子
snowflake.birthRate = 20.0;
snowflake.lifetime = 120.0; // 粒子速度
snowflake.velocity =10.0; // 粒子的速度范围
snowflake.velocityRange = ; // 粒子y方向的加速度分量
snowflake.yAcceleration = ; // 周围发射角度
snowflake.emissionRange = 0.5 * M_PI; // 子旋转角度范围
snowflake.spinRange = 0.25 * M_PI;
snowflake.contents = (id)[[UIImage imageNamed:@"snow"] CGImage]; // 设置雪花形状的粒子的颜色
snowflake.color = [[UIColor whiteColor] CGColor]; snowEmitter.shadowOpacity = 1.0;
snowEmitter.shadowRadius = 0.0;
snowEmitter.shadowOffset = CGSizeMake(0.0, 0.0); // 粒子边缘的颜色
snowEmitter.shadowColor = [[UIColor whiteColor] CGColor]; // 粒子的名字
snowflake.name = @"snow"; // 添加粒子
snowEmitter.emitterCells = @[snowflake]; // 将粒子Layer添加进图层中
[self.view.layer addSublayer:snowEmitter]; // 7秒后执行
[[GCDQueue mainQueue] execute:^{ // 设置基本动画
CABasicAnimation *ani = \
[CABasicAnimation animationWithKeyPath:@"emitterCells.snow.birthRate"];
ani.fromValue = @(20.0);
ani.toValue = @(0.0);
ani.duration = .f; // 设置结束时的值
[snowEmitter setValue:[NSNumber numberWithFloat:]
forKeyPath:@"emitterCells.snow.birthRate"]; // 添加动画
[snowEmitter addAnimation:ani forKey:nil]; } afterDelay:NSEC_PER_SEC * ];
} @end

能产生粒子效果的CAEmitterLayer的更多相关文章

  1. 使用带粒子效果的 CAEmitterLayer

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

  2. CAEmitterLayer实现粒子效果

    在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果. CAEm ...

  3. swift 实现漂亮的粒子效果CAEmitterLayer

    一些粒子效果 我们经常会在一些游戏或者应用中看到一些炫酷的粒子效果,我们在iOS中也能很轻松的搞一些粒子效果 我们本次做得是一个下雪的效果,看下效果图 源码地址: https://github.com ...

  4. 雪花降落CAEmitterLayer粒子效果

    CAEmitterLayer 实现雪花效果   首先需要导入#import <QuartzCore/QuartzCore.h>   /**在iOS 5中,苹果引入了一个新的CALayer子 ...

  5. iOS 开发之粒子效果

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

  6. iOS动画开发之五——炫酷的粒子效果

    在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一现,想用UIKit框架写出一款炫酷的休 ...

  7. 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code

    最近瞎逛的时候发现了一个超炫的粒子进度效果,有多炫呢?请擦亮眼镜!   // _this.ch){ _this.particles.splice(i, 1); } }; this.Particle.p ...

  8. 简直要逆天!超炫的 HTML5 粒子效果进度条

    我喜欢粒子效果作品,特别是那些能够应用于实际的,例如这个由 Jack Rugile 基于 HTML5 Cavnas 编写的进度条效果.看着这么炫的 Loading 效果,即使让我多等一会也无妨:)你呢 ...

  9. CodePen 作品秀:Canvas 粒子效果文本动画

    作品名称——Shape Shifter,基于 Canvas 的粒子图形变换实验.在页面下方的输入框输入文本,上面就会进行变换出对应的粒子效果文本动画. CodePen 作品秀系列向大家展示来自 Cod ...

随机推荐

  1. action中result没有值

    action中result没有值,访问action会输出action中的所有数据,输出类型为.action类型 .

  2. IEnumerable和IEnumerator 详解 (转)

    原文链接:http://blog.csdn.net/byondocean/article/details/6871881 参考链接:http://www.cnblogs.com/hsapphire/a ...

  3. ip routing&no ip routing

    ip routing--------查路由表, 如果ping的目的在RT中没有,不发出任何包(arp也不会发出)   如果RT中存在,则arp  下一跳,相当于no ip routing+配置网关 n ...

  4. 从0开始学Java——JSP&Servlet——HttpServletRequest相关的几个路径信息

    在HttpServletRequest中有几个获取路径的接口:getRequestURI/getContextPath/getServletPath/getPathInfo 这些接口互相之间有什么区别 ...

  5. Linux第六次学习笔记

    存储器层次结构 存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构. CPU寄存器保存着最常用的数据. 主存储器(简称主存)暂时存放存储在容量较大的.慢速磁盘上的数据. 高速缓存存储器作 ...

  6. maven编译设置pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. WIN8 浏览器排版不兼容问题

    经常访问网站失败 访问部分网站只显示白底蓝字没有排版也没有图片 尝试了网上的各种方法,也是用了360和百度安全管家的网页修复 重置了IE设置 都不行!!! 最后有效的方法是 更换DNS 208.67. ...

  8. 细说C#多线程那些事 - 线程同步和多线程优先级

    上个文章分享了一些多线程的一些基础的知识,今天我们继续学习. 一.Task类 上次我们说了线程池,线程池的QueueUserWorkItem()方法发起一次异步的线程执行很简单 但是该方法最大的问题是 ...

  9. Scala学习笔记(八):基本类型和操作

    基本类型: 整数类型=>数类型 字面量:字面量就是直接写在代码里的常量值 字面量是指由字母.数字等构成的字符串或者数值,它只能作为右值出现,所谓右值是指等号右边的值,如:int a=123这里的 ...

  10. 回顾一年的IT学习历程与大学生活

    今天是2015年8月27日,距离成为大三狗还有一个多星期,在这个不算繁忙的暑假的下午来总结一下这一年来,在IT方面的学习. 一.入门(2014.3) 我大一的专业是信息工程,信息工程听上去就是信息(I ...