2
对于iOS的动画,大多数人都能掌握UIViewAnimation和CoreAnimation的知识,用来实现基本的动画都够用了,但有些常见的动画还是难以用这些知识去实现,例如 火焰、烟雾、下雨、下雪等。
于是了解到 iOS 系统的CoreGraphic框架可以简单的实现粒子系统的效果, 实现粒子系统主要用到两个类CAEmitterLayer和CAEmitterCell 。

一、 以下对着两个类做个简单的介绍:

1、CAEmitterLayer。 这个主要是定义粒子原型发射层的形状和发射位置,发射源的尺寸以及发射的模式等。

2、CAEmitterCell 单个粒子的原型,通常有多个,根据cell的属性和CAEmitterCell的配置,由uikit随机生成,粒子原型的属性包括粒子的图片,颜色,方向,运动,缩放比例和生命周期等。

这两个类的参数看起来似乎很简单,但这些参数的不同组合配合上相对应图片,则可以实现许多意想不到的动画效果。

二、下面我们通过一个简单的demo来初步认识一下这两个类的基础用法

#import "ViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setEmitter];
}

- (void)setEmitter{
    //添加背景图
    UIImage *bgImage = [UIImage imageNamed:@"bg.jpeg"];
    self.view.backgroundColor = [UIColor     colorWithPatternImage:bgImage];

    //粒子图层
    CAEmitterLayer *snowLayer = [CAEmitterLayer layer];
    snowLayer.backgroundColor = [UIColor redColor].CGColor;
    //发射位置
    snowLayer.emitterPosition = CGPointMake(0, 0);
    //发射源的尺寸
    snowLayer.emitterSize = CGSizeMake(640, 1);
    //发射源的形状
    snowLayer.emitterMode = kCAEmitterLayerSurface;
    //发射模式
    snowLayer.emitterShape = kCAEmitterLayerLine;
    
    //存放粒子种类的数组
    NSMutableArray *snow_array = @[].mutableCopy;
    
    for (NSInteger i=1; i<5; i++) {
        //snow
        CAEmitterCell *snowCell = [CAEmitterCell emitterCell];
        snowCell.name = @"snow";
        //产生频率
        snowCell.birthRate = 15.0f;
        //生命周期
        snowCell.lifetime = 30.0f;
        //运动速度
        snowCell.velocity = 1.0f;
        //运动速度的浮动值
        snowCell.velocityRange = 10;
        //y方向的加速度
        snowCell.yAcceleration = 2;
        //抛洒角度的浮动值
        snowCell.emissionRange = 0.5*M_PI;
        //自旋转角度范围
        snowCell.spinRange = 0.25*M_PI;
        //粒子透明度在生命周期内的改变速度
        snowCell.alphaSpeed = 2.0f;
        //cell的内容,一般是图片
        NSString *snow_str = [NSString stringWithFormat:@"snow%ld",i];
        snowCell.contents = (id)[UIImage imageNamed:snow_str].CGImage;
        
        [snow_array addObject:snowCell];
    }

    //添加到当前的layer上
    snowLayer.shadowColor = [[UIColor redColor]CGColor];
    snowLayer.cornerRadius = 1.0f;
    snowLayer.shadowOffset = CGSizeMake(1, 1);
    snowLayer.emitterCells = [NSArray arrayWithArray:snow_array];
    [self.view.layer insertSublayer:snowLayer atIndex:0];
}

@end

效果如下图所示:

clipboard.png

这是一个最简单的粒子效果的实现了,对于想实现其他的效果,只需对参数进行设置不同参数间的搭配能够实现我们大部分粒子系统的效果。为此必须详细掌握每个参数的用处,这里便不多赘述。


灵机文化
71 声望8 粉丝