扩展:https://github.com/lichtschlag/Dazzle

 //创建出Layer
    CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
    
    //显示边框
    emitterLayer.borderWidth = ;
    //给定尺寸
    emitterLayer.frame = CGRectMake(, , , );
//    emitterLayer.masksToBounds = YES;
    //发射点
    emitterLayer.emitterPosition = CGPointMake(, );
    //发射模式
    emitterLayer.emitterMode = kCAEmitterLayerSurface;
    //发射形状
    emitterLayer.emitterShape = kCAEmitterLayerLine;
    //添加Layer
    [self.view.layer addSublayer:emitterLayer];
    
    CAEmitterCell *cell = [CAEmitterCell emitterCell];
    //粒子产生率
    cell.birthRate = .f;
    //粒子生命周期
    cell.lifetime = .f;
    //速度值
    cell.velocity = ;
    //速度值得微调值
    cell.velocityRange = .f;
    //y轴加速度
    cell.yAcceleration = .f;
    //发射角度(角度越大偏移越大)
    cell.emissionRange = .f *M_1_PI;
    //设置粒子颜色
//    cell.color = [UIColor blackColor].CGColor;
    //设置图片
    cell.contents = (__bridge id)([UIImage imageNamed:@"test1"].CGImage);
    emitterLayer.emitterCells = @[cell];

效果图:

例子:下雪下雨的封装

基类:WJCAEmitterLayerView

#import <UIKit/UIKit.h>

@interface WJCAEmitterLayerView : UIView
/**
 *  模仿setter getter方法
 */
- (void)setEmitterLayer:(CAEmitterLayer *)layer;
- (CAEmitterLayer *)emitterLayer; /**
 *  显示当前View
 */
- (void)show;
/**
 *  隐藏当前View
 */
- (void)hide; @end
#import "WJCAEmitterLayerView.h"

@interface WJCAEmitterLayerView () {
    CAEmitterLayer *_emitterLayer;
} @end @implementation WJCAEmitterLayerView + (Class)layerClass {
    return [CAEmitterLayer class];
    
} - (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        _emitterLayer = (CAEmitterLayer *)self.layer;
    }
    return self;
} - (void)setEmitterLayer:(CAEmitterLayer *)layer { } - (CAEmitterLayer *)emitterLayer {
    return _emitterLayer;
} - (void)show { } - (void)hide { } @end

封装下雪下雨view集成基类

下雪:

#import "SnowView.h"

@implementation SnowView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self initEmitterLayerProperties];
    }
    return self;
} - (void)initEmitterLayerProperties {
     //初始化一些参数
//    self.emitterLayer.masksToBounds = YES;
    self.emitterLayer.emitterShape = kCAEmitterLayerLine;
    self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
    self.emitterLayer.emitterSize = self.frame.size;
    self.emitterLayer.emitterPosition = CGPointMake(self.bounds.size.width/.f, );
} - (void)show {
    //添加 CAEmitterCell
    CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
    snowflake.birthRate = .f;
    snowflake.speed = .f;
    snowflake.velocity = .f;
    snowflake.velocityRange = .f;
    snowflake.yAcceleration = .f;
    snowflake.emissionRange = 0.5 *M_PI;
    snowflake.spinRange = 0.25 *M_PI;
    snowflake.contents = (__bridge id)([UIImage imageNamed:@"test1"].CGImage);
    snowflake.color = [UIColor redColor].CGColor;
    snowflake.lifetime = .f;
    snowflake.scale = 0.5;
    snowflake.scaleRange = 0.3;
    //添加动画
    self.emitterLayer.emitterCells = @[snowflake];
} - (void)hide {
    
} @end

下雨:

#import "RainView.h"

@implementation RainView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self initEmitterLayerProperties];
    }
    return self;
} - (void)initEmitterLayerProperties {
    //初始化一些参数
    self.emitterLayer.masksToBounds = YES;
    self.emitterLayer.emitterShape = kCAEmitterLayerLine;
    self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
    self.emitterLayer.emitterSize = self.frame.size;
    self.emitterLayer.emitterPosition = CGPointMake(self.bounds.size.width/.f, );
} - (void)show {
    //添加 CAEmitterCell
    CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
    snowflake.birthRate = .f;
    snowflake.speed = .f;
    snowflake.velocity = .f;
    snowflake.velocityRange = .f;
    snowflake.yAcceleration = .f;
//    snowflake.emissionRange = 0.5 *M_PI;
//    snowflake.spinRange = 0.25 *M_PI;
    snowflake.contents = (__bridge id)([UIImage imageNamed:@"test1"].CGImage);
    snowflake.color = [UIColor greenColor].CGColor;
    snowflake.lifetime = .f;
    snowflake.scale = 0.2;
    snowflake.scaleRange = .f;
    //添加动画
    self.emitterLayer.emitterCells = @[snowflake];
} - (void)hide {
    
} @end

调用:

    WJCAEmitterLayerView *snoView = [[SnowView alloc]initWithFrame:CGRectMake(, ,CGRectGetWidth(self.view.bounds), )];
    [self.view addSubview:snoView];
    [snoView show];

//    snoView.maskView = alpaView;可以让边缘模糊

iOS-CAEmitterLayer(粒子效果)的更多相关文章

  1. 雪花降落CAEmitterLayer粒子效果

    CAEmitterLayer 实现雪花效果   首先需要导入#import <QuartzCore/QuartzCore.h>   /**在iOS 5中,苹果引入了一个新的CALayer子 ...

  2. CAEmitterLayer 粒子效果(发射器)

    //创建Layer CAEmitterLayer *emitterLayer = [CAEmitterLayer layer]; //边框 emitterLayer.borderWidth = 1.0 ...

  3. iOS动画开发之五——炫酷的粒子效果

    在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一现,想用UIKit框架写出一款炫酷的休 ...

  4. iOS CAEmitterLayer 实现粒子发射动画效果

    iOS CAEmitterLayer 实现粒子发射动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnimationDemo 动 ...

  5. iOS 烟花撒花效果,图层渐变,图层倒影特效。CAEmitterLayer粒子发射器

    iOS 烟花撒花效果,图层渐变,图层倒影特效.CAEmitterLayer粒子发射器 上一节我写了一个关于视图图层的相关类,有关CALayer这个类的使用和一些使用方法,详细看这里,就是我们在处理视图 ...

  6. iOS CALayer之CAEmitterLayer粒子发射器的神奇效果

    https://www.jianshu.com/p/c54ffd7412e7 想必以前QQ空间的点赞效果大家都知道吧,点赞之后按钮周围会有一圈爆裂的小圆点:还有微信的红包雨表情动画等,以及烟花,火焰效 ...

  7. iOS 开发之粒子效果

    本文由糖炒小虾.Benna翻译 ,校对:sai.u0u0.iven.子龙山人 iOS 5中的UIKit粒子系统教程 Ray的话:这是第15篇.也是最后一篇<iOS 5 盛宴>中的iOS 5 ...

  8. swift 实现漂亮的粒子效果CAEmitterLayer

    一些粒子效果 我们经常会在一些游戏或者应用中看到一些炫酷的粒子效果,我们在iOS中也能很轻松的搞一些粒子效果 我们本次做得是一个下雪的效果,看下效果图 源码地址: https://github.com ...

  9. 能产生粒子效果的CAEmitterLayer

    能产生粒子效果的CAEmitterLayer 下雪效果: // // RootViewController.m // Cell // // Copyright (c) 2014年 Y.X. All r ...

  10. 使用带粒子效果的 CAEmitterLayer

    1.用CAEmitterLayer产生粒子效果 2.封装CAEmitterLayer 3.封装下雪.下雨的粒子效果控件 一.用CAEmitterLayer产生粒子效果 - (void)emitterL ...

随机推荐

  1. LN : leetcode 292 Nim Game

    lc 292 Nim Game 292 Nim Game You are playing the following Nim Game with your friend: There is a hea ...

  2. Java入门到精通——工具篇之Maven概述

    为接手gxpt准备已经快一个月了从SSH2-->EJB-->环境搭建-->Maven的构建.下面就带领大家初始Maven 一.什么是Maven. Maven是一个垮平台的项目管理工具 ...

  3. kettle日志记录

    环境描述: 现在一个项目有很多个作业,需要知道每次跑批后哪些ktr跑成功,哪些失败了 问题解决: 下面是一个具体的操作流程 首先建立数据库表 CREATE TABLE test_1(id INT,NA ...

  4. C++中int *p[4]和 int (*q)[4]的区别

    这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组.后: 数组指针;可以直 ...

  5. sql server 小记——分区表

    我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...

  6. 关于Filezilla是否支持sftp

    我们知道filezilla是一个开源的ftp的解决方案,它提供了客户端和服务器端,支持的fpt, sftp, ftps,这是你可以从wiki中看到的关于filezilla的介绍,但是这里需要澄清一点就 ...

  7. Go defer延迟执行

    defer用于延迟执行,可以类比于java或c++中的析构函数. 查看一段示例代码: func Contents(filename string) (string, error) { //打开文件 f ...

  8. ExtJS MVC 学习手记3

    在演示应用中,我们已经创建好了viewport,并为之添加了一个菜单树.但也仅仅是这样,点击树或应用的其他地方获得不到任何响应.这个演示应用还是一个死的应用. 接下来,我们让这个应用活起来. 首先,给 ...

  9. Machine Learning 学习笔记 (2) —— 使用牛顿法寻找极值

    本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 用牛顿法解方程 牛顿法是一种 ...

  10. PHP URL 重定向 的三种方法(转载)

    为了方便查询,转载一篇. 1.使用header()函数    PHP的HTTP相关函数种提供了一个 header()函数,首先要清楚,header()函数必须放在php程序的开头部分,而且之前不能有另 ...