学习神奇的粒子发射器,雪花纷纷落下的动画效果,就是通过CAEmitterLayer来实现的,这个layer还能创建火焰,河流,蒸汽的动画效果,常用于游戏开发。

原文来自code4app http://www.code4app.com/blog-...

Creating your emitter layer

let rect = CGRect(x: 0.0, y: -70.0, width: view.bounds.width, height: 50.0)
let emitter = CAEmitterLayer()
emitter.backgroundColor = UIColor.blueColor().CGColor
emitter.frame = rect
emitter.emitterShape = kCAEmitterLayerRectangle
view.layer.addSublayer(emitter)

代码创建了CAEmitterLayer,并设置了发射源形状emitterShape。

有几个常用的emitterShape:

  • kCAEmitterLayerPoint:使所有粒子在同一点创建发射器的位置。这是一个很好的选择用于火花或烟花,比如,你可以创建一个火花效应,通过创建所有的粒子在同一点上,使它们在不同的方向飞,然后消失。
  • kCAEmitterLayerLine:所有粒子沿发射架顶部的顶部。这是一个用于瀑布效应的发射极的形状;水粒子出现在瀑布的顶部边缘。
  • kCAEmitterLayerRectangle:创建粒子随机通过一个给定的矩形区域。

Adding an emitter frame

前面是设置了layer Frame,下面设置layer里面的Emitter的frame

emitter.emitterPosition = CGPoint(x: rect.width * 0.5, y: rect.height * 0.5)
emitter.emitterSize = rect.size

代码设置了Emitter中心点是layer的中心点,size和layer一样。

[]Creating an emitter cell

现在,您已经配置了发射器的位置和大小,可以继续添加Cell。 Cell是表示一个粒子源的数据模型。是CAEmitterLayer一个单独的类,因为一个发射器可以包含一个或多个粒子。 例如,在一个爆米花动画,你可以有三种不同的细胞代表一个爆米花的不同状态:完全炸开,一半炸开和没有炸开:

let emitterCell = CAEmitterCell()
emitterCell.contents = UIImage(named: "flake.png")!.CGImageemitterCell.birthRate = 20
emitterCell.lifetime = 3.5
emitter.emitterCells = [emitterCell]

代码每一秒创建20个cell,每个cell有3.5s的生命周期,之后一些cell就会消失

[]Controlling your particles

上面设置的cell不会动,需要给它个加速度

emitterCell.xAcceleration = 10.0
emitterCell.yAcceleration = 70.0

设置Cell在X轴,Y轴的加速度。

emitterCell.velocity = 20.0
// x-y平面的发射方向
// -M_PI_2 垂直向上
emitterCell.emissionLongitude = CGFloat(-M_PI_2)

设置起始速度,发射的方向是通过emissionLongitude属性定义的。

[]Adding randomness to your particles

emitterCell.velocityRange = 200.0

设置其实速度的随机范围,每个粒子的速度将是一个随机值之间(20-200)= 180 ~(20 + 200)= 220。负初始速度的粒子不会向上飞,一旦出现在屏幕上,他们就会开始浮动。带正速度的粒子先飞起来,然后再浮。

emitterCell.emissionRange = CGFloat(M_PI_2)

原来,你配置的所有粒子射直线上升(π/ 2角)作为他们的出现。上面这行代码表示为每个粒子随机选一个发射角度在(-π/2 + π/2)= 180度(-π/ 2 +π/2)= 0度之间。

[]Changing particle color

设置你的粒子颜色

emitterCell.color = UIColor(red: 0.9, green: 1.0, blue: 1.0, alpha: 1.0).CGColor

还可以设置粒子的颜色RGB范围:

emitterCell.redRange = 0.1
emitterCell.greenRange = 0.1
emitterCell.blueRange = 0.1

由于RGB最大为1.0,所以red是取值0.81.0,green:0.91.0,blue:0.9~1.0

[]Randomizing particle appearance

之前的粒子都是一样大的,这里给粒子分配一个随机大小。

emitterCell.scale = 0.8
emitterCell.scaleRange = 0.8

设置粒子是原来的80%大小,随机范围是从0.0到1.6。

emitterCell.scaleSpeed = -0.15

粒子每秒钟按15%的体积缩小。

还可以设置透明度

emitterCell.alphaRange = 0.75
emitterCell.alphaSpeed = -0.15

透明度 0.25~1.0,每秒透明度减少15%。

IOS 粒子发射器,雪花落下、创建火焰、河流、蒸汽的动画效果源代码相关推荐

  1. iOS粒子特效、仿微信朋友圈、转场动画、抢红包动画等源码

    iOS精选源码 viewController 之间的转场动画 swift版 视频添加水印及粒子特效 小红点(消息推送提醒)完整解决方案 仿微信朋友圈–CircleOfFriendsDisplay 图片 ...

  2. 原生js实现随机雪花落下特效

    原生js随机生成不同数量.速度不同的雪花从屏幕上方落下,可修改各种配置生成自己的雪花特效. var snowStatus = false; var snow1 = './images/snow1.pn ...

  3. VB.NET弹幕--- 利用API函数AnimateWindow创建Popup提示窗口,窗体的动画效果---章鱼哥

    当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现.看吧,正写着呢弹出了一个. A,参数设置 hWnd:指定产 ...

  4. ios 扇形 按钮_iOS 饼状图(扇形图)动画效果的实现

    先上效果图: 23.gif Demo在此,休得撒野!!!! 1.怎么用 /** * Pie * * @param frame frame * @param dataItems 数据源,此Demo是红. ...

  5. 后台CS代码中创建四种常用的SL动画效果

    http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html后台CS代码中创建四种常用的动画效果[附带源码实例] 转载于: ...

  6. css3 背景大小background-size属性实现鼠标移入文字下划线动画效果

    最近看到一个页面有一个很有趣的动画,就是鼠标移入后,在对应的文字下方会出现下划线的动画效果,当鼠标移除后,下划线动画会消失,于是想了下该如何去实现这个动画效果. 第一个想法是想通过with来做,但是这 ...

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

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

  8. iOS动画:粒子发射器(20)

    我们来实现这种下雪的粒子效果 要创建粒子发射器的动画,需要用到一个新的layer:CAEmitterLayer 在viewDidLoad中创建emitter对象 let rect = CGRect(x ...

  9. ios实现qq空间飘落的花瓣(swift—粒子发射器)

    ios实现qq空间飘落的花瓣(swift-粒子发射器) 有时候打开好友的qq空间会看到很多漂亮的装饰,最常见的就是在页面飘落装饰物(蒲公英.花瓣等等).作为一个ios程序猿(现在做h5)就会在想这个东 ...

最新文章

  1. 一图读懂HDFS--大数据平台技术栈06
  2. Windows Live Writer 测试日志
  3. Java parallel control
  4. 《现代操作系统》读书笔记之——进程调度(二)
  5. 互斥量和信号量的区别
  6. HBuilder的快捷操作
  7. 一张图看懂AR至GL数据流
  8. java管理员登录_idea实现管理员登录javaweb
  9. 配置鸿蒙Windows烧录环境 用Hiburn烧录第一个程序
  10. 游戏主播这个行为终于有人治了!腾讯下“禁令”
  11. python中main函数在运行中不是必须要写的_Python必备知识之“if __name__ == '__main__':”...
  12. BeginPaint和GetDC有什么区别?【转】
  13. oracle dba 两日速成课程.pdf,oracle_dba_两日速成课程.pdf
  14. 【具体数学 读书笔记】1.2 Lines in the Plane
  15. 3D Photography using Context-aware Layered Depth Inpainting
  16. html怎么显示五线谱,CSS3 响应式乐谱 音乐符号 五线谱
  17. scala面向对象基础---类继承和特质
  18. van-icon自定义图标的引入
  19. 有一千万资产能被称为富二代吗?
  20. GAN(生成对抗网络)和IQA(图像质量评价能擦出什么样的火花呢?)简单聊一些近来published的论文

热门文章

  1. igmpproxy_Linux IGMP PROXY 学习笔记 之二 igmp proxy的处理流程分析
  2. 华为ap配置_第18期——AP安装常见问题和注意事项
  3. Java基础:JDK、JRE、JVM的区别与联系
  4. LinkedHashMap源码剖析
  5. 小程序 data-***自定义
  6. 高考后家有学计算机,2021高考热门专业将有大改动,计算机专业永远的神,榜首才是真黑马...
  7. php查询每个小时的数据,php – MySQL显示表中每小时的条目数
  8. 计算机硬件市场调查清单,微型计算机组装与维护实用教程王际川第8章节组装计算机.ppt...
  9. linux 连接文件,Linux 链接文件
  10. c莫比乌斯函数_代佳璇缘起一条莫比乌斯环,我爱上了难缠的数学!