KYBarrageKit
这是一个iOS高扩展的弹幕渲染库,适用大多数直播类弹幕场景。
gitHub下载:https://github.com/kingly09/KYBarrageKit
原因公司是做直播电商平台的,商品需要在直播界面有弹幕效果,还有一些特殊的动画效果,根据商品提供的需要,结合网上的一些开源项目,自己造了轮子,写一个直播类弹幕渲染库,开题报告,以来满足我们商品多变的功能需求。
特征支持弹幕的4个方位滚动方向;
自定义弹幕的滚动速度;
弹幕信息为NSMutableAttributedString类型,支持图片和文字弹幕,emoji表情符号等;
当是弹幕为KYBarrageDisplayTypeImage类型是,支持弹幕自定义高度;
弹幕的类型可以扩展自定义(目前支持纯文本和图文);
利用CABasicAnimation实现来弹幕动画效果;
支持批量主动发送弹幕,弹幕的暂停,清除,重启,开始等;
支持弹幕内存预警,清除弹幕缓冲池。
实现一些基础功能,更多的功能后续完善中......
效果如下图所示:
反馈如果需要帮助,可以使用QQ: 362108564联系我 或weibo: 留言.
如果你发现了一个bug,打开一个 issue.
如果您有一个功能请求,请打开一个 issue.
如果您想贡献,请提交一个请求.
如果有任何你觉得不对的地方,或有更好的建议,以上联系都可以联系我。 十分感谢!
安装要求Xcode 7 +
iOS 7.0 +
手动安装先下载项目后,将子文件夹 KYBarrageKit 拖入到项目中, 导入头文件KYBarrageKit.h 开始使用.
CocoaPods安装你可以在 Podfile 中加入下面一行代码来使用 KYBarrageKit
pod 'KYBarrageKit'使用 cocoaPods 管理第三方库, 如果电脑没有安装 cocoapods,请先安装 cocoapods。安装方式可参考:[最新的cocoapods安装] ()
使用在需要使用弹幕渲染功能的地方
#import “KYBarrageKit”创建一个 KYBarrageManager *manager 对象,并将其 view add 到你想要添加弹幕动画的 view 上,如下面所示:
@interface ViewController () @property (strong, nonatomic) KYBarrageManager *manager; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor whiteColor]; _manager = [KYBarrageManager manager]; _manager.bindingView = self.view; _manager.scrollSpeed = 30; _manager.refreshInterval = 1.0; }发送一个弹幕
int a = arc4random() % 100000; NSString *str = [NSString stringWithFormat:@'I'm coming %d ',a]; NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str]; [attr addAttribute:NSForegroundColorAttributeName value:RandomColor() range:NSMakeRange(0, str.length)]; KYBarrageModel *m = [[KYBarrageModel alloc] initWithBarrageContent:attr]; [_manager showBarrageWithDataSource:m]; // Scroll Barrage设置弹幕显示区域,开题报告,支持四个方向,默认为 KYBarrageDisplayLocationTypeDefault 整个显示区域
全局设置
_manager.displayLocation = KYBarrageDisplayLocationTypeTop;或 当个子弹幕设置
KYBarrageModel *m = [[KYBarrageModel alloc] initWithBarrageContent:attr]; m.displayLocation = _manager. KYBarrageDisplayLocationTypeTop;支持显示区域对应NSInteger的枚举:
KYBarrageDisplayLocationTypevaluenoteKYBarrageDisplayLocationTypeDefault 0 整个显示区域
KYBarrageDisplayLocationTypeTop 1 顶部部分
KYBarrageDisplayLocationTypeCenter 2 中间部分
KYBarrageDisplayLocationTypeBottom 3 底部部分
KYBarrageDisplayLocationTypeHidden 4 不显示
设置弹幕显示位置,支持四个方向。
全局设置
_manager.scrollDirection = KYBarrageScrollDirectRightToLeft;或 当个子弹幕设置
KYBarrageModel *m = [[KYBarrageModel alloc] initWithBarrageContent:attr]; m.direction = _manager.scrollDirection;支持四个方向对应NSInteger的枚举:
KYBarrageScrollDirectionvaluenoteKYBarrageScrollDirectRightToLeft 0 <<<<<
KYBarrageScrollDirectLeftToRight 1 >>>>>
KYBarrageScrollDirectBottomToTop 2 ↑↑↑↑↑
KYBarrageScrollDirectTopToBottom 3 ↓↓↓↓↓
主动拉取弹幕数据发弹幕,设置 KYBarrageManagerDelegate 委托,调用-delegate barrageManagerDataSource返回数据
设置代理委托
_manager.delegate = self; [_manager startScroll]; //开启主动获取弹幕#p#分页标题#e#调用方法
- (id)barrageManagerDataSource { int a = arc4random() % 10000; NSString *str = [NSString stringWithFormat:@'%d digg',a]; NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str]; [attr addAttribute:NSForegroundColorAttributeName value:RandomColor() range:NSMakeRange(0, str.length)]; KYBarrageModel *m = [[KYBarrageModel alloc] initWithBarrageContent:attr]; m.displayLocation = _manager.displayLocation; m.direction = _manager.scrollDirection; m.barrageType = KYBarrageDisplayTypeImage; m.object = [UIImage imageNamed:[NSString stringWithFormat:@'digg_%d',arc4random() % 10]]; return m; }设置清除弹幕。
[_manager closeBarrage];设置弹幕的暂停与恢复。
// 1. 在屏幕上的阻塞被暂停,停止获取新的阻塞 // 2. 当前的屏幕上的弹幕重新滚动,并获得一个开始的新弹幕推送 [_manager pauseScroll];设置弹幕的类型目前支持纯文本KYBarrageDisplayTypeDefault 和图文KYBarrageDisplayTypeImage,可以在 KYBarrageScene自定义其他的类型。
m.barrageType = KYBarrageDisplayTypeImage;其他支持弹幕的点击事件
如果弹幕为KYBarrageDisplayTypeImage型的弹幕时,请重写ViewController的 touchesBegan 方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.view]; [[_manager barrageScenes] enumerateObjectsUsingBlock:^(BarrageScene * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj.layer.presentationLayer hitTest:touchPoint]) { /* if barrage's type is ` `KYBarrageDisplayTypeImage` `, add your code here*/ NSLog(@'message = %@',obj.model.message.string); } }]; }如DEMO里面的点击弹幕,弹幕停顿3s后,进行滚动,也可以扩展其他事件,如下图所示:
鼓励它若不慎给您帮助,请不吝啬给它点一个star,是对它的最好支持,非常感谢!