• 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的妖妖
  • 相关阅读:
    http从发出请求到接收响应的旅行
    git(二)github的使用入门及搜索技巧
    git(一) 基础
    获取基于Internet Explorer_Server的聊天窗口内容
    主机字节与网络字节的转换
    SQL Server存储过程中防止线程重入处理方式
    利用NVelocity 模版生成文本文件
    C# async await 学习笔记2
    C# async await 学习笔记1
    imx6 工具链下载地址
  • 原文地址:https://www.cnblogs.com/yaoyao0110/p/4765650.html
Copyright © 2020-2023  润新知