原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow
前言:最近App用到了弹幕这块,到Github上找了找,没找到合适的,就自己开发了个。
Github地址
https://github.com/LeoMobileDeveloper/LeoDanmakuKit
支持
- 支持Storyboard
- 支持自动缓冲区溢出的时候自动清理
- 用GCD写的后台线程来处理数据,所以不会卡顿住线程
- 支持暂停,继续,停止,播放
- 支持随机颜色,和随机通道
安装
建议用CocoaPod安装
pod "LeoDanmakuKit"
手动安装
下载Github文件,拷贝Pod/Class文件夹中的文件到想要的工程中
如何使用
在需要使用的文件中
#import LeoDanmaku.h
在storyboad上拖拽一个UIView,设置Class为LeoDanmakuView,然后拖拽Outlet(或者手动alloc init)
@property (weak, nonatomic) IBOutlet LeoDanmakuView *danmakuView;
需要发送增加一条弹幕的时候,创建一个LeoDanmkuModel
对象,然后添加到View,
if (self.textfiled.text != nil) {
NSArray * colors = @[[UIColor redColor],[UIColor blueColor],[UIColor greenColor],[UIColor whiteColor]];
LeoDanmkuModel * danmaku = [LeoDanmkuModel randomDanmkuWithColors:colors MaxFontSize:18 MinFontSize:15];
danmaku.text = self.textfiled.text;
[self.danmakuView addDanmaku:danmaku];
[self.textfiled endEditing:true];
}
暂停
[self.danmakuView pause];
恢复
[self.danmakuView resume];
注意
在想要弹幕view被移除的时候,要调用
[self.danmakuView stop];
原理
基于CoreAnimation写的动画
默认的DanmakuView讲视图区域分为8个channel
- 每次随即寻找空闲的Channel,如果找到则将弹幕TextLayer添加到Channel中
- 如果当前Channel不是空闲的,则随机一直向上或者向下寻找下一个Channel,如果没有空闲的,本次什么都不做
近期计划
- 支持AttributeText
- 为扩展增加接口
- 增加代理来传递事件