iOS开源弹幕库BarrageRenderer
这是一个 iOS 上的开源弹幕渲染库.
弹幕实质是多个精灵的时间上的渲染方式. PC/Web上已经有很成熟的解决方案了; Android上比较有名的是BiliBili开源的DanmakuFlameMaster, 但是开源社区尚没有比较好的iOS弹幕渲染器.觉得在二次元文化逐渐渗透的今天,视频弹幕已经是很重要的一种情绪表达方式了.没必要重复造轮子,所以我把自己写的一份弹幕渲染引擎开源了.
先看看特征:
- 提供过场弹幕(4种方向)与悬浮弹幕(2种方向)支持.
- 弹幕字体可定义: 颜色,边框,圆角,背景,字体等皆可定制.
- 自动轨道搜寻算法,新发弹幕会根据相同方向的同种弹幕获取最佳运动轨道.
- 支持延时弹幕,为反复播放弹幕提供可能.
- 独立的动画时间系统, 可以统一调整动画速度.
- 丰富的扩展接口, 实现了父类的接口就可以自定义弹幕动画.
- 因为作者记性比较差,所以在很多紧要处添加了注释,理解代码更容易.
这是一份简单的效果动画:
实现机制简洁:
主要分3个某块:
- BarrageLoader: 负责弹幕的持久化(暂未实现).
- BarrageEngine: 利用CADisplayLink推动弹幕的渲染,支持动画加速功能;通过BarrageDispatcher类实现延时功能.
- BarrageSprite: 弹幕精灵,即一条弹幕的模型表示;集成相应的精灵类并实现特定的方法可以实现自定义弹幕动画.
目前, 渲染器中实现了浮动弹幕与过场弹幕,两种弹幕的核心功能在BarrageWalkTextSprite\BarrageFloatTextSprite类方法
- (CGPoint)originInBounds:(CGRect)rect withSprites:(NSArray *)sprites
中,此方法通过分割view网格来检测冲突,从而尽可能小地降低当前显示弹幕的重叠概率.
而实现文本绘制功能的是BarrageTextSpirt类的draw方法.在弹幕很多的情况下动画可能出现卡顿,优化此绘制方法是提升性能的关键.
有Demo, 就不用太多说明了吧; 有源码, 就不用太多介绍了吧. 好吧, 是我懒 →_→.
其他:
之所以不用很多项目中使用的Danmaku命名,是因为我觉得这个单词长得比较丑 !≥△≤!. 原谅我吧.
弹幕渲染引擎的Github地址: https://github.com/unash/BarrageRenderer
注:工程会不断更新,介绍以Github为准。
弹幕文字的大小如何设置啊
当只有一行弹道且速度相同时, 怎么保证弹幕不会重合呢?
设置固定速度 弹幕会重叠 怎么处理