iOS-直播中粒子效果
来源:互联网 发布:rpc动态端口 编辑:程序博客网 时间:2024/05/02 01:06
转载注明出处: http://blog.csdn.net/qxuewei/article/details/53942647
粒子效果的应用场景:
主播房间右下角粒子动画
雪花/下雨/烟花等效果
QQ生日快乐一堆表情的跳动
常规实现方法:
// 添加粒子效果 func addParticleEffect() { // 1.创建发射器 let emitter = CAEmitterLayer() // 2.发射器位置 emitter.emitterPosition = CGPoint(x: UIScreen.main.bounds.width * 0.5, y: -20) // 3.开启三维效果 emitter.preservesDepth = true // 4.设置 Cell(对应其中一个粒子) // 4.0.创建粒子 let cell = CAEmitterCell() // 4.1.每秒发射粒子数 cell.birthRate = 20 // 4.2.粒子存活时间 cell.lifetime = 5 cell.lifetimeRange = 2.5 // 4.3.缩放比例 cell.scale = 0.7 cell.scaleRange = 0.3 // 4.4.粒子发射方向 cell.emissionLongitude = CGFloat(M_PI_2) cell.emissionRange = CGFloat(M_PI_4) // 4.5.粒子速度 cell.velocity = 150 cell.velocityRange = 50 // 4.6.旋转速度 cell.spin = CGFloat(M_PI_2) // 4.7.粒子内容 cell.contents = UIImage(named: "good2_30x30")?.cgImage // 5.将粒子添加到发射器中 emitter.emitterCells = [cell] view.layer.addSublayer(emitter) }
可以实现简单粒子效果:
通常在直播等软件中粒子效果不会只有单独一种粒子样式.所以需要定义多种粒子样式实现.利用面向协议的思想封装一个 Particleable 类. 继承此协议的控制器可具备粒子效果的功能.
核心代码:
import Foundationimport UIKitprotocol Particleable { // 此处定义的方法,在继承此协议的类中必须实现否则会报错! - 保留OC特性// func addParticleEffectTest(_ view : UIView)}extension Particleable where Self : UIViewController { func addParticleEffect(_ point : CGPoint = CGPoint(x: UIScreen.main.bounds.width * 0.85, y: UIScreen.main.bounds.height - 20) ) { // 1.创建发射器 let emitter = CAEmitterLayer() // 2.发射器位置 emitter.emitterPosition = point // 3.开启三维效果 emitter.preservesDepth = true var cells = [CAEmitterCell]() for i in 0..<10 { // 4.设置 Cell(对应其中一个粒子) // 4.0.创建粒子 let cell = CAEmitterCell() // 4.1.每秒发射粒子数 cell.birthRate = Float(arc4random_uniform(4)) + 3 // 4.2.粒子存活时间 cell.lifetime = 5 cell.lifetimeRange = 2.5 // 4.3.缩放比例 cell.scale = 0.7 cell.scaleRange = 0.3 // 4.4.粒子发射方向 cell.emissionLongitude = CGFloat(-M_PI_2) cell.emissionRange = CGFloat(M_PI_4 * 0.6) // 4.5.粒子速度 cell.velocity = 100 cell.velocityRange = 50 // 4.6.旋转速度 cell.spin = CGFloat(M_PI_2) // 4.7.粒子内容 cell.contents = UIImage(named: "good\(i)_30x30")?.cgImage cells.append(cell) } // 5.将粒子添加到发射器中 emitter.emitterCells = cells view.layer.addSublayer(emitter) } func removeParticleEffect() { //方式1: 常规遍历// for layer in view.layer.sublayers! {// if layer.isKind(of: CAEmitterLayer.self) {// layer.removeFromSuperlayer()// }// } //方式2: 映射 view.layer.sublayers?.filter({ $0.isKind(of: CAEmitterLayer.self)}).last?.removeFromSuperlayer() }}
实现效果
完整项目链接:
https://github.com/qxuewei/XWCSDNDemos 中 XWParticleDemo-粒子效果
1 0
- iOS-直播中粒子效果
- iOS开发 - 粒子效果
- iOS 粒子效果
- iOS 粒子效果
- iOS 粒子效果 CAEmitterCell CAEmitterLayer
- ios粒子效果CAEmitteCell CAEmitterLayer
- iOS动画之粒子效果
- IOS开发之粒子效果
- iOS CAEmitterLayer 实现粒子效果
- iOS 粒子效果实现CAEmitterLayer
- 十五 iOS 之 粒子效果
- ios开发 粒子效果 参数详解 CAEmitterCell
- IOS 使用 CAEmitterLayer实现粒子效果
- IOS学习之核心动画-粒子效果
- iOS粒子效果模拟器—UIEffectDesigner
- 粒子效果
- 粒子效果
- 粒子效果
- IOS GCD使用求助
- svn使用教程(Mac、Linux)
- select、poll、epoll之间的区别总结[整理]
- windows10 使用sublime text3 编程
- python笔记
- iOS-直播中粒子效果
- Android的so注入( inject)和函数Hook(基于got表) - 支持arm和x86
- MainActivity中为什么不能在自己创建的线程中调用控件的方法?
- java 开源微信电商项目
- 请大神帮我看看这是什么问题
- Android的TitleBar实现透明度渐变效果
- 如何在DrawerLayout下为navigation Header上的控件添加监听事件
- apollo搭建安卓推送
- 大型分布式C++框架《二:大包处理过程》