CAEmitterLayer(粒子效果)

CAEmitterLayer(粒子效果)

1.使用系统自带的类可以实现烟花等很绚丽的效果(下面是一个点击屏幕释放烟花,直接上代码,里面会有注释)

2.在这里,我将CAEmitterLayer看作是一个发射图层,emitterPosition属性设置它的粒子发射点,CAEmitterCell设置它将要发射的粒子的颜色,发射半径,发射方式等。

3.在这个类的使用中,如果需要加入点击屏幕的事件,那么多数需要用到接受粒子的坐标,然后将它存放到数组的函数,在这介绍一下,将CGPoint 结构体在数组中的存取的方式

存:[myArray addObject: NSStringFromCGPoint(myPoint)];

取:CGPointFromString((NSString*)[xxx objectAtIndex:0]) 

注:工程中必须导入<QuartzCore/QuartzCore.h>框架

#import "TouchStar.h"

#import <QuartzCore/QuartzCore.h>

@implementation TouchStar

{

    CAEmitterLayer *starEmitter;

}

- (instancetype)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    

    if (self) {

        

        starEmitter = [CAEmitterLayer layer];//创建一个显示粒子的图层

        starEmitter.frame = self.layer.bounds;//设置他的大小

        [self.layer addSublayer:starEmitter];

        

        starEmitter.renderMode = kCAEmitterLayerAdditive;//粒子显示时的模式,这种是最亮的

        

        //create particle emitter layer

        CAEmitterCell *cell1 = [[CAEmitterCell alloc]init];

        cell1.contents = (__bridge id)[UIImage imageNamed:@"9.png"].CGImage;//contents 这个和CALayer一样,只是用来设置图片

        

        cell1.birthRate =100; //每秒某个点产生的effectCell数量

        

        cell1.lifetime = 5.0; //粒子的生命周期,既在屏幕上的显示时间要多长。

        cell1.color = [UIColor blueColor].CGColor;

        cell1.alphaSpeed = -0.5;//就是说粒子的透明度每过一秒就是减少0.5,

        cell1.velocity = 50;  //velocity 表示cell向屏幕右边飞行的速度

        cell1.velocityRange = 100; //velocityRange 在右边什么范围内飞行

        cell1.emissionRange = M_PI;//emissionRange表 +- 角度扩散

        

                  //设置两种不同颜色的粒子,你也可以设置其他的颜色,形成绚丽的烟花效果

        CAEmitterCell *cell = [[CAEmitterCell alloc]init];

        cell.contents = (__bridge id)[UIImage imageNamed:@"9.png"].CGImage;

        cell.birthRate = 100;

        cell.lifetime = 5.0;

        cell.color = [UIColor redColor].CGColor;

        cell.alphaSpeed = -0.4;

        cell.velocity = 50;

        cell.velocityRange = 100;

        cell.emissionRange = M_PI;

        

                  //将设置好的粒子加到发射器中

        starEmitter.emitterCells = @[cell,cell1];

    }

    return self;

}

#pragma mark

#pragma mark - 接收屏幕触摸点

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

     starEmitter.birthRate =100;

    //[touches anyObject]获取屏幕触摸点中的任意一点

    // locationInView 返回CGPoint类型,

    starEmitter.emitterPosition =[[touches anyObject] locationInView:self];

 }

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

       //1.当触摸结束之后,将粒子的发射量设置为0,

       //2.然后当再次接受到屏幕点击的时候,(touchesBegan:)在将发射图层的发射点的位置设置为你接收到的位置

      //3.然后在将发射量打开即可

    starEmitter.birthRate = 0;

}

@end

爱code的妖妖
原文地址:https://www.cnblogs.com/yaoyao0110/p/4765650.html