开头

对于弹幕大家来说都不是很陌生,对于弹幕有比较火的的第三方框架www.cocoachina.com/ios/20161014/17751.html大家你可以参照一下。虽然有第三方框架,但是我也要分享我对于弹幕的处理的原理和以及对于弹幕重叠的处理。大家可以参考的我的代码github.com/apple5566/WLBulletViewScreen。

原理

1.初始化好你所分配的弹幕的通道,并对分配好最前排的弹幕,设置对应的动画的效果。完成初始化弹幕的设置。

2.对于非初始化的弹幕(就是不是最前排的弹幕)我才用了递归的方式。

3.为了保证弹幕的之间的间距,我让每个弹幕速度保持一样,只有速度保持一样才能解决重叠的问题。

4.弹幕的原理:当一个弹幕整个完全进入视图时,我们在分配下一个弹幕。由于速度一样,保证弹幕不会重叠。

5.对于不间断的弹幕处理,如果当前弹幕还没加载全部完,我是拼接在后面显示。但是对于弹幕加载完了那一瞬间,我在去加载弹幕了,为了保证弹幕之间的间距我是先把他保存起来,等前面的弹幕整个完全出去了,我在去显示。

6.本弹幕没有采用重用,因为当时我最开始也是采用了重用发现重用了有个很致命的问题,当一个弹幕动画完成的时候,我拿到了重用的弹幕进行分配通道,但是这个一瞬间用于采用了递归会跟我抢通道,这个特别难解决因此留给大家多想想。为了性能的考虑我采用了每次加载一个弹幕,当这个弹幕开始动画的时候我就删除弹幕模型的数组对应的弹幕。

效果视图

1.对于没有间断的弹幕图片

2.间断的效果图

3.具体的其他请参考运行的效果图。

结尾

如果大家如果又发现这个程序还有重叠弹幕请你给我提出来,也请各位大神指教一下代码哪里出错。谢谢大家。