一、现状

如今直播类、视频播放器等基本都有弹幕模式。

为了保持性能和内存可控,基本是在初始化的时候生成一个Pool(Pool的容量是设定好的), 也就是利用重用机制(可以想象一下UITableView的重用机制,但是这个Pool和tableview机制略有不同)。每生成一个弹幕就丢到Pool里,当达到Pool最大容量时,就得等待,等待Pool里的某个弹幕A飞出屏幕外完成这一任务,然后再取 队列里的 弹幕任务, 赋于该 弹幕A新生。当弹幕量特别大的时候, 服务器 或是 客户端就不得 不对 队列的弹幕任务进行取舍,因为你没有办法处理那么多的弹幕。延迟太久,体验会太差。

二、实际需求问题

这时候你们的产品肯定不干了,为什么不能多显示点弹幕?不管你重叠还是什么,你得把弹幕尽最大可能展示出来,这样才能显示出这个房间 或是 视频的 人气么,要的就是弹幕炸屏效果!(程序员只能说臣妾做不到啊!弹幕多,会卡爆了!)

为了保持帧率,弹幕的最大量肯定是有上限的,那怎么突破上限而不影响性能呢?

楼主突发奇想,为啥子 粒子效果那么 炫,粒子那么多可以妥妥的展示而不影响性能呢?

我们是否可以把弹幕当成粒子呢?

三、解决方案设计

我们需要了解两个类,一个是 CAEmitterLayer ,一个是 CAEmitterCell 。

我们需要做的:

1.把弹幕背景 和 文字 转换成 CGImageRef 赋值给 CAEmitterCell ->contents

2.定时器,定时更换 CAEmitterLayer -> emitterCells 粒子源(弹幕)

3.协调好生命周期 ,CAEmitterCell->birthRate , CAEmitterCell->lifetime , CAEmitterCell->lifetimeRange , 以及你的定时器刷新周期。

4.CAEmitterCell一些生成位置什么的自己看了。

小结:楼主测试了下每秒1000个弹幕(纯随机数字弹幕,设备iphone 6 16G),妥妥的60fps 不掉帧,不过切换界面会有一点点卡顿,可以接受(可以在离开界面前关闭弹幕或是其它优化一下)。

有需求的朋友可以尝试尝试,反正我是用不到。(不过粒子弹幕缺点是,弹出去的弹幕如泼出去的水,是不可控的,没法监测碰撞 点击等事件)







iOS 大批量弹幕小论(粒子弹幕)的更多相关文章

  1. 移动端页面弹幕小Demo实例说明

    代码地址如下:http://www.demodashi.com/demo/11595.html 弹幕小Demo实例地址,点击看效果 写在前面:尝试做了一下弹幕的实例,欢迎提出并指正问题 问题说明: D ...

  2. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

  3. 2、微信小程序之弹幕的实现(无后台)

    对弹幕功能主要利用环信来实现的,读者也许对环信这个东西很陌生,请先自行了解这环信再来看这文章. 环信开发文档:http://docs.easemob.com/im/400webimintegratio ...

  4. 微信小程序-视频弹幕的项目

    1.视频播放器 2.选择弹幕颜色 3.弹幕来了... 一般微信小程序需要配置.wxml.wxss.js.json文件,所有接下来也是要配置这几个文件,请看下图: 第一:  index.wxml < ...

  5. iOS 开发中类似上下滚动弹幕实现原理

    #mark ---滚动弹幕 列表中留有7条记录  大于7条时删除并指引表视图向上滑动 - (void)addRowActionWithContent:(NSString *)str { if (sel ...

  6. 工作中遇到的小问题: 做弹幕从数据库取出东西均匀插入marquee中,

    function getFloatContent() { var method = 'GETFLOATCONTENT'; $.ajax({ url: 'api/zhenqiapi.php', data ...

  7. iOS 模仿一个小项目,总结一下里边的模块

      ManoBoo:  参考链接:http://www.jianshu.com/p/fd4c46c31508  这个小的项目是参考ManoBoo的简书的,链接在上方,自己在仿做的过程中,也离不开Man ...

  8. IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

    前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现 ...

  9. ios 常用的小框架

    在ios开发中,一些请求 kvc 下拉列表  图片请求等等自己手写代码的话非常麻烦,还容易出现一系列的问题,现在整理了一些常用的一些小框架. 其中MJExtension 和 MJRefresh 这两个 ...

随机推荐

  1. 剑指 offer set 14 打印 1 到 N 中 1 的个数

    总结 1. 假设 n == 2212, 算法分为两个步骤. 第一步, 将这个 2212 个数分为 1~ 212, 213 ~ 2212 2. 第一部分实际上是将 n 的规模缩小到 212. 假如知道如 ...

  2. 你所不知道的CSS

    1.用FONT-SIZE:0来清除间距 inline-block的元素之间会受空白区域的影响,也就是元素之间差不多会有一个字符的间隙.如果在同一行内有4个25%相同宽度的元素,会导致最后一个元素掉下来 ...

  3. jquery 判断ul下是否存在li

    $("ul").has("li").length > 0;$("ul > li").length > 0;$(" ...

  4. android EditText自动弹出和自动关闭软键盘

    程序进入某个activity直接弹出软键盘,不能直接在OnCreate中设置,必须等View绘制事件完毕才可以弹出,需要用到Timer辅助实现,如果要实现输入的功能,必须让EditText获得焦点. ...

  5. mysql用sql创建表完整实例

    create table user_login_latest( id int(11) unsigned NOT NULL AUTO_INCREMENT, user_id int(11) not nul ...

  6. 常用MySQL函数

    MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: 系统信息函数: 加密函数: 格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ...

  7. json、jsonp的定义和区别

    一.区别 简单来说,json是一种数据交换格式,jsonp是一种非官方跨域数据交互协议.json描述的是信息的格式,而jsonp是信息传递双方约定的方法.json返回的是一串数据,而 jsonp返回的 ...

  8. Python: 使用pip升级所有包

    pip 当前内建命令并不支持升级所有已安装的Python模块. 列出当前安装的包:  pip list 列出可升级的包:  pip list --outdate 升级一个包:  pip install ...

  9. CH5401 没有上司的舞会【树形DP】

    5401 没有上司的舞会 0x50「动态规划」例题 描述 Ural大学有N名职员,编号为1~N.他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司.每个职员有一个快乐指数,用整数 H_i 给 ...

  10. C# 构建动态Lambda表达式

    做CURD开发的过程中,通常都会需要GetList,然而查询条件是一个可能变化的需求,如何从容对应需求变化呢? 首先,我们来设计一个套路,尝试以最小的工作量完成一次查询条件的需求变更 1.UI收集查询 ...