iOS 粒子效果實現CAEmitterLayer

iOS 粒子效果實現CAEmitterLayer

CAEmitterLayer是ios5中蘋果引入了一個新的CALayer子類。CAEmitterLayer是一個高性能的粒子引擎,可以用來做一些絢麗的粒子系統,比如爆炸,雪花火焰等等。

來來直接上代碼 簡單的 主要效果是在self.view.layer上加了粒子效果,並且讓這個粒子效果可以跟着按鈕的拖動一起移動

//
//  ViewController.m
//  Emitter粒子效果
//
//  Created by 梅 on 2017/4/13.
//  Copyright © 2017年 梅. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong)UIButton *button;

@end

@implementation ViewController{
    CAEmitterLayer *_emitterLayer;//粒子發射器
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.button = [UIButton buttonWithType:UIButtonTypeCustom];

    [self.button setFrame:CGRectMake(100, 100, 80, 80)];
    self.button.layer.masksToBounds = YES;
    self.button.layer.cornerRadius = self.button.frame.size.width/2;
    self.button.backgroundColor = [UIColor cyanColor];
    [self.button addTarget:self action:@selector(changeValue:) forControlEvents:UIControlEventTouchUpInside];
    [self.button addTarget:self action:@selector(startChangeOpinsion:withEvent:) forControlEvents:UIControlEventTouchDragInside];
    [self.button addTarget:self action:@selector(endChangeOpinsion:withEvent:) forControlEvents:UIControlEventTouchUpOutside];

    [self.view addSubview:self.button];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor blackColor];

    // 創建粒子Layer
    _emitterLayer = [CAEmitterLayer layer];

    // 粒子發射位置
    _emitterLayer.emitterPosition = CGPointMake(self.button.frame.origin.x+self.button.frame.size.width/2, self.button.frame.origin.y+self.button.frame.size.height/2);

    // 發射源的尺寸大小
    _emitterLayer.emitterSize     = self.button.frame.size
    ;

    // 發射模式
    _emitterLayer.emitterMode     = kCAEmitterLayerSurface;

    // 發射源的形狀
    _emitterLayer.emitterShape    = kCAEmitterLayerCircle;

    // 創建雪花類型的粒子
    CAEmitterCell *snowflake    = [CAEmitterCell emitterCell];

    // 粒子的名字
    snowflake.name = @"snow";

    // 粒子參數的速度乘數因子
    snowflake.birthRate = 20.0;
    snowflake.lifetime  = 120.0;

    // 粒子速度
    snowflake.velocity  = 100.0;

    // 粒子的速度範圍
    snowflake.velocityRange = 10;

    // 粒子y方向的加速度分量
    snowflake.yAcceleration = 200;

    // 周圍發射角度
    snowflake.emissionRange = 0.5 * M_PI;

    // 子旋轉角度範圍
    snowflake.spinRange = 0.25 * M_PI;
    snowflake.contents  = (id)[[UIImage imageNamed:@"littleOrangeIcon"] CGImage];

    // 設置雪花形狀的粒子的顏色
    snowflake.color      = [[UIColor whiteColor] CGColor];
    snowflake.redRange   = 2.f;
    snowflake.greenRange = 2.f;
    snowflake.blueRange  = 2.f;

    snowflake.scaleRange = 0.6f;
    snowflake.scale      = 0.7f;

    _emitterLayer.shadowOpacity = 1.0;
    _emitterLayer.shadowRadius  = 0.0;
    _emitterLayer.shadowOffset  = CGSizeMake(0.0, 0.0);

    // 粒子邊緣的顏色
    _emitterLayer.shadowColor  = [[UIColor whiteColor] CGColor];

    // 添加粒子
    _emitterLayer.emitterCells = @[snowflake];

    // 將粒子Layer添加進圖層中
    [self.view.layer addSublayer:_emitterLayer];
}

- (void)changeValue:(UIButton *)bu{

    NSLog(@"KISS ME");
}

- (void)startChangeOpinsion:(UIControl *)c withEvent:ev{
    c.center = [[[ev allTouches] anyObject] locationInView:self.view];
    _emitterLayer.emitterPosition = CGPointMake(self.button.frame.origin.x+self.button.frame.size.width/2, self.button.frame.origin.y+self.button.frame.size.height/2);
}
- (void)endChangeOpinsion:(UIControl *)c withEvent:ev{
    c.center = [[[ev allTouches] anyObject] locationInView:self.view];
    _emitterLayer.emitterPosition = CGPointMake(self.button.frame.origin.x+self.button.frame.size.width/2, self.button.frame.origin.y+self.button.frame.size.height/2);
}
發佈了70 篇原創文章 · 獲贊 24 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章