使用带粒子效果的 CAEmitterLayer
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的更多相关文章
- 能产生粒子效果的CAEmitterLayer
能产生粒子效果的CAEmitterLayer 下雪效果: // // RootViewController.m // Cell // // Copyright (c) 2014年 Y.X. All r ...
- CAEmitterLayer实现粒子效果
在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果. CAEm ...
- swift 实现漂亮的粒子效果CAEmitterLayer
一些粒子效果 我们经常会在一些游戏或者应用中看到一些炫酷的粒子效果,我们在iOS中也能很轻松的搞一些粒子效果 我们本次做得是一个下雪的效果,看下效果图 源码地址: https://github.com ...
- 雪花降落CAEmitterLayer粒子效果
CAEmitterLayer 实现雪花效果 首先需要导入#import <QuartzCore/QuartzCore.h> /**在iOS 5中,苹果引入了一个新的CALayer子 ...
- iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果
一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...
- iOS 开发之粒子效果
本文由糖炒小虾.Benna翻译 ,校对:sai.u0u0.iven.子龙山人 iOS 5中的UIKit粒子系统教程 Ray的话:这是第15篇.也是最后一篇<iOS 5 盛宴>中的iOS 5 ...
- cocos2d粒子效果
第9章 粒子效果 游戏开发者通常使用粒子系统来制作视觉特效.粒子系统能够发射大量细小的粒子并对他们进行渲染,而且效率要远高于渲染同样数目的精灵.粒子系统可以模拟下雨.火焰.雪.爆炸.蒸气拖尾以及其他多 ...
- Cocos2d-x实现粒子效果的三种方式
在Cocos2d-x中,实现粒子效果可以有三种方法. Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·'"〈&l ...
- iOS动画开发之五——炫酷的粒子效果
在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一现,想用UIKit框架写出一款炫酷的休 ...
随机推荐
- 6-Java-C(打印大X)
题目描述: 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用空格分开 ...
- 使用 reduce 实现数组 map 方法
//使用 reduce 实现数组 map 方法 const selfMap2 = function (fn, context){ let arr = Array.prototype.slice.cal ...
- 第2节 hive基本操作:9、hive当中创建外部表的语法及外部表的操作&分区表的语法和操作
外部表: 外部表说明: 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 管理表和外部 ...
- 数据库中的Schema是什么?
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式.模式中包含了schema对象 ...
- group by两个条件
学生表: 成绩表: 问题:统计各系各门课程的平均成绩 答案: select sdept,cno,AVG(grade)avg_grade from S join SC on S.sno = SC.sno ...
- Centos6.5下 执行“ll”提示“-bash: ll: command not found”
ll 是 ls -l的别名,之所所以 ll出现错误是因为没有定义别名. 如果要实现ll 命令,可以做如下操作: 编辑 ~./bashrc 添加 ls -l 的别名为 ll即可 [root@Centos ...
- 编译Nginx, 并使用自签证书实现https访问
1. 编译安装nginx1.8.1 [root@centos7 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx.1.8.1 --with-htt ...
- PHP:分页类(比较庞大不建议在项目中用)
文章来源:http://www.cnblogs.com/hello-tl/p/7685178.html <?php //地址 //page::$url=''; //每页的条数 默认10 //pa ...
- 关于Python构建微服务的思考(一)
一:什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成. 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的. 每个微服务仅关注于完成一件任务并很好地完成该任务. ...
- pip 打包项目配置库
打包项目中配置库(filename为文件名,可修改) pip freeze > filename.txt 安装配置文件中所有的库包 pip install -r filename.txt 如提示 ...