在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer。CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。
CAEmitterLayer看上去像是许多CAEmitterCell的容器,这些CAEmitierCell定义了一个例子效果。你将会为不同的例子效果定义一个或多个CAEmitterCell作为模版,同时CAEmitterLayer负责基于这些模版实例化一个粒子流。一个CAEmitterCell类似于一个CALayer:它有一个contents属性可以定义为一个CGImage,另外还有一些可设置属性控制着表现和行为。我们不会对这些属性逐一进行详细的描述,你们可以在CAEmitterCell类的头文件中找到。
** CAEmitterLayer类提供了一个粒子发射器系统为核心的动画。这些粒子是由CAEmitterCell组成的实例,它相当于一个管理者,来管理 CAEmitterCell的发射的一些细节,比如发射的位置,发射形状等等**
属性名 | 作用 |
---|---|
emitterPosition | 发射位置 |
emitterSize | 发射源的大小 |
emitterMode | 发射模式 |
emitterShape | 发射源的形状 |
renderMode | 渲染模式 |
birthRate | 粒子产生系数,默认1.0 |
emitterCells | 装着CAEmitterCell对象的数组,被用于把粒子投放到layer上 |
emitterDepth | 决定粒子形状的深度联系 |
emitterZposition | 发射源的z坐标位置 |
lifetime | 粒子生命周期 |
scale | 粒子的缩放比例 |
seed | 用于初始化随机数产生的种子 |
spin | 自旋转速度 |
velocity | 粒子速度 |
CAEmitterCell属性
属性名 | 作用 |
---|---|
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 | 生命周期范围 lifetime= lifetime(+/-) lifetimeRange |
magnificationFilter | 增加自己的大小 |
minificatonFilter | 减小自己的大小 |
minificationFilterBias | 减小大小的因子 |
name | 粒子的名字 |
redRange | 一个粒子的颜色red 能改变的范围 |
redSpeed | 粒子red在生命周期内的改变速度 |
scale | 缩放比例 |
scaleRange | 缩放比例范围 |
scaleSpeed | 缩放比例速度 |
spin | 子旋转角度 |
spinrange | 子旋转角度范围 |
velocity | 速度 |
velocityRange | 速度范围 |
xAcceleration | 粒子x方向的加速度分量 |
yAcceleration | 粒子y方向的加速度分量 |
zAcceleration | 粒子z方向的加速度分量 |
@interface ViewController ()
@property (nonatomic, weak) IBOutlet UIView *containerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//create particle emitter layer
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.frame = self.containerView.bounds; [self.containerView.layer addSublayer:emitter];
//configure emitter emitter.renderMode = kCAEmitterLayerAdditive;
emitter.emitterPosition = CGPointMake(emitter.frame.size.width / 2.0, emitter.frame.size.height / 2.0);
//create a particle template
CAEmitterCell *cell = [[CAEmitterCell alloc] init];
cell.contents = (__bridge id)[UIImage imageNamed:@"Spark.png"].CGImage; cell.birthRate = 150;
cell.lifetime = 5.0;
cell.color = [UIColor colorWithRed:1 green:0.5 blue:0.1 alpha:1.0].CGColor;
cell.alphaSpeed = -0.4;
cell.velocity = 50;
cell.velocityRange = 50;
cell.emissionRange = M_PI * 2.0; //add particle template to emitter emitter.emitterCells = @[cell];
}
@end
点赞的破碎动画
self.view.backgroundColor =[UIColor whiteColor];
self.container =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
self.container.layer.contents = (__bridge id)[UIImage imageNamed:@"点赞2"].CGImage;
self.container.center = self.view.center;
[self.view addSubview:self.container];
CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
emitterCell.name = @"emitter";
emitterCell.alphaRange = 0.10;
emitterCell.alphaSpeed = -1.0;
emitterCell.lifetime = 0.6;
emitterCell.lifetimeRange = 0.3;
emitterCell.birthRate = 0;
emitterCell.velocity = 40.00;
emitterCell.velocityRange = 10.00;
emitterCell.scale = 0.03;
emitterCell.scaleRange = 0.02;
emitterCell.contents = (id)[UIImage imageNamed:@"Emitter"].CGImage;
self.emitterLayer = [CAEmitterLayer layer];
self.emitterLayer.name = @"emitterLayer";
self.emitterLayer.emitterShape = kCAEmitterLayerCircle;
self.emitterLayer.emitterMode = kCAEmitterLayerOutline;
self.emitterLayer.emitterSize = CGSizeMake(20, 20);
self.emitterLayer.emitterCells = @[emitterCell];
self.emitterLayer.renderMode = kCAEmitterLayerAdditive;
self.emitterLayer.masksToBounds = NO;
self.emitterLayer.position = CGPointMake(self.container.frame.size.width/2.0,self.container.frame.size.height/2.0);
[self.container.layer addSublayer:self.emitterLayer];