1.用CAEmitterLayer产生粒子效果

2.封装CAEmitterLayer

3.封装下雪、下雨的粒子效果控件

一、用CAEmitterLayer产生粒子效果

- (void)emitterLayer {

// 1.创建出Layer

CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];

//
显示边框

emitterLayer.borderWidth = 1.f;

//
给定尺寸

emitterLayer.frame = CGRectMake(, , , );

//emitterLayer.mask  = YES;不超过范围

//
发射点

emitterLayer.emitterPosition = CGPointMake(,);

//
发射模式

emitterLayer.emitterMode =kCAEmitterLayerSurface;

//
发射形状

emitterLayer.emitterShape =kCAEmitterLayerLine;

//
加入layer

[self.view.layeraddSublayer:emitterLayer];

// 2.创建粒子

CAEmitterCell *cell = [CAEmitterCell emitterCell];

//
粒子产生率

cell.birthRate = 10.f;

//
粒子生命周期

cell.lifetime = 10.f;

//
速度值

cell.velocity = ;

//
速度值的微调值

cell.velocityRange = 3.f;

// y轴加速度

cell.yAcceleration = 2.f;

//
发射角度

cell.emissionRange = 4.f *
M_1_PI;

//
设置粒子颜色

cell.color = [UIColorblackColor].CGColor;

//
设置图片

cell.contents = (__bridgeid)([UIImage imageNamed:@"snow"].CGImage);

//
让CAEmitterCell与CAEmitterLayer产生关联

emitterLayer.emitterCells = @[cell];

}

二、封装CAEmitterLayer

@interface CAEmitterLayerView :
UIView

/**

*  模仿setter.getter方法

*/

- (void)setEmitterLayer:(CAEmitterLayer *)layer;

- (CAEmitterLayer *)emitterLayer;

/**

*  显示出当前view

*/

- (void)show;

/**

*  隐藏当前view

*/

- (void)hide;

@end

二、封装 CAEmitterLayer

1.替换CAEmitterLayer成UIView子类的backedLayer

2.将CAEmitterLayer封装的类作为“抽象”父类

#import "CAEmitterLayerView.h"

@interface CAEmitterLayerView () {

//因为 CAEmitterLayer的參数许多,採用这样的小技巧,设置set,get方法

CAEmitterLayer  *_emitterLayer;

}

@end

@implementation CAEmitterLayerView

+ (Class)layerClass {//必需要写这个,否则新建返回layer,不是 CAEmitterLayer

return [CAEmitterLayerclass];

}

- (instancetype)initWithFrame:(CGRect)frame {

self = [superinitWithFrame:frame];

if (self) {

_emitterLayer = (CAEmitterLayer *)self.layer;

}

return
self;

}

- (void)show {

}

- (void)hide {

}

- (void)setEmitterLayer:(CAEmitterLayer *)layer {

_emitterLayer = layer;

}

- (CAEmitterLayer *)emitterLayer {

return_emitterLayer;

}

@end

- (void)viewDidLoad {

[superviewDidLoad];

CAEmitterLayerView *layerView = [[CAEmitterLayerView alloc]initWithFrame:CGRectMake(,,,)];

NSLog(@"%@", layerView.layer);

}

三、封装下雪、下雨的粒子效果控件

#import "CAEmitterLayerView.h"

@interface RainView :CAEmitterLayerView

@end

#import "RainView.h"

@implementation RainView

- (instancetype)initWithFrame:(CGRect)frame {

self = [superinitWithFrame:frame];

if (self) {

//初始化设置

[selfsetup];

}

return
self;

}

- (void)setup {

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 /2.f, -
);

}

- (void)show {

//
配置

CAEmitterCell *rainflake  = [CAEmitterCell emitterCell];

rainflake.birthRate       =25.f;

rainflake.speed           =10.f;

rainflake.velocity        =10.f;

rainflake.velocityRange   =10.f;

rainflake.yAcceleration   =1000.f;

rainflake.contents        = (__bridgeid)([UIImage imageNamed:@"rain"].CGImage);

rainflake.color           = [UIColorblackColor].CGColor;

rainflake.lifetime        =7.f;

rainflake.scale           =0.2f;

rainflake.scaleRange      =0.f;

//
加入动画

self.emitterLayer.emitterCells =@[rainflake];

}

@end

封装 CAEmitterLayer

@interface SnowView :CAEmitterLayerView

@end

#import "SnowView.h"

@implementation SnowView

- (instancetype)initWithFrame:(CGRect)frame {

self = [superinitWithFrame:frame];

if (self) {

//初始化设置

[selfsetup];

}

return
self;

}

- (void)setup {

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 /2.f, -
);

}

- (void)show {

//
配置

CAEmitterCell *snowflake  = [CAEmitterCell emitterCell];

snowflake.birthRate       =1.f;

snowflake.speed           =10.f;

snowflake.velocity        =2.f;

snowflake.velocityRange   =10.f;

snowflake.yAcceleration   =10.f;

snowflake.emissionRange   =0.5 *M_PI;

snowflake.spinRange       =0.25 *M_PI;

snowflake.contents        = (__bridgeid)([UIImage imageNamed:@"snow"].CGImage);

snowflake.color           = [UIColorredColor].CGColor;

snowflake.lifetime        =60.f;

snowflake.scale           =0.5;

snowflake.scaleRange      =0.3;

//
加入动画

self.emitterLayer.emitterCells =@[snowflake];

}

@end

封装 CAEmitterLayer

#import "CAEmitterLayerView.h"

#import "SnowView.h"

#import "RainView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[superviewDidLoad];

UIImageView *alphaView1 = [[UIImageView alloc]initWithFrame:CGRectMake(,,,)];

alphaView1.image        = [UIImage imageNamed:@"alpha"];

UIImageView *alphaView2 = [[UIImageView alloc]initWithFrame:CGRectMake(,,,)];

alphaView2.image        = [UIImage imageNamed:@"alpha"];

//
加入下雪效果

CAEmitterLayerView *snowView = [[SnowView alloc]initWithFrame:CGRectMake(,,,)];

snowView.maskView            = alphaView1;//加maskView。效果不突兀

[self.viewaddSubview:snowView];

[snowViewshow];

//
加入下雨效果

CAEmitterLayerView *rainView = [[RainView alloc]initWithFrame:CGRectMake(,,,)];

rainView.maskView            = alphaView2;

[self.viewaddSubview:rainView];

[rainViewshow];

}

@end

使用带粒子效果的 CAEmitterLayer的更多相关文章

  1. 能产生粒子效果的CAEmitterLayer

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

  2. CAEmitterLayer实现粒子效果

    在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果. CAEm ...

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

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

  4. 雪花降落CAEmitterLayer粒子效果

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

  5. iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

    一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...

  6. iOS 开发之粒子效果

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

  7. cocos2d粒子效果

    第9章 粒子效果 游戏开发者通常使用粒子系统来制作视觉特效.粒子系统能够发射大量细小的粒子并对他们进行渲染,而且效率要远高于渲染同样数目的精灵.粒子系统可以模拟下雨.火焰.雪.爆炸.蒸气拖尾以及其他多 ...

  8. Cocos2d-x实现粒子效果的三种方式

    在Cocos2d-x中,实现粒子效果可以有三种方法. Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·'"〈&l ...

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

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

随机推荐

  1. hibernate cascade属性

    cascade属性是存在于set标签中,用来做级联删除和保存. 它的值有以下几种: 1)默认值是none,不做级联动作: 2)save-update:级联保存 3)delete:级联删除 4)all: ...

  2. vue相关技术

    vuejs2.0:渐进式JavaScript框架,易用.灵活.高效,似乎任何规模的应用都适用. element:基于vuejs2.0的ui组件库. vue-router:一般单页面应用spa都要用到的 ...

  3. vue 表单操作

    <form class="mian__form" @submit.prevent="submit">     <ul>         ...

  4. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (四) -- Push API 和 Pull API

    RabbitMQ 中针对消息的分发提供了 Push API (订阅模式) 和 Pull API (主动获取) 两种模式. 在 PHP 中, 这两种模式分别通过 AMQPQueue 类中的 consum ...

  5. jquery 应用

    http://www.jq22.com/ gwj6396668@163.com

  6. 阿里云报错Redirecting to /bin/systemctl restart sshd.service

    转:http://blog.csdn.net/caijunfen/article/details/70599138 云服务器 ECS Linux CentOS 7 下重启服务不再通过 service  ...

  7. 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树

    出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...

  8. Git的入门

    Git的基本介绍: Git:是一个版本控制工具. Github:是非常有名的在线版本管理网站(速度比较慢). Oschina:中国版本的github,(旗下的的码云地址:gitee.com,速度快) ...

  9. MySql索引笔记

    MySQL 索引是什么 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和 ...

  10. Python之机器学习-波斯顿房价预测

    目录 波士顿房价预测 导入模块 获取数据 打印数据 特征选择 散点图矩阵 关联矩阵 训练模型 可视化 波士顿房价预测 导入模块 import pandas as pd import numpy as ...