这是一个 iOS 高效渲染弹幕库,适用于大多数直播弹幕场景。
公司正在做直接业务平台,产品需要与直播效果中的弹幕进行接口对接,有一些特殊的动画效果,根据产品的需求,将一些开源项目与互联网结合,他制作了轮子,编写了一个直播弹幕渲染库,以满足我们产品的功能需求。
NSMutableAttributedString
类型的信息弹幕,图片和文字弹幕,表情符号等;KYBarrageDisplayTypeImage
时,支持自定义弹幕高度;CABasicAnimation
实现弹幕的动画效果;为了实现一些基本功能,后续将继续改进功能......
效果如下所示
如果您认为有什么错误,或者有更好的建议,请通过以上联系方式联系我。非常感谢。
首先 下载项目,将 KYBarrageKit 子文件夹添加到项目中,并导入 KYBarrageKit.h
头文件。
#import “KYBarrageKit”
KYBarrageManager *manager
对象,并在视图中添加你想要添加的弹幕动画视图,如下所示@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
枚举值
KYBarrageDisplayLocationType | 值 | 注意 |
---|---|---|
KYBarrageDisplayLocationTypeDefault | 0 | 整个显示区域 |
KYBarrageDisplayLocationTypeTop | 1 | 顶部区域 |
KYBarrageDisplayLocationTypeCenter | 2 | 中间区域 |
KYBarrageDisplayLocationTypeBottom | 3 | 底部区域 |
KYBarrageDisplayLocationTypeHidden | 4 | 隐藏 |
全局设置
_manager.scrollDirection = KYBarrageScrollDirectRightToLeft;
或当子集弹幕
KYBarrageModel *m = [[KYBarrageModel alloc] initWithBarrageContent:attr];
m.direction = _manager.scrollDirection;
支持四个方向的 NSInteger
枚举值
KYBarrageScrollDirection | 值 | 注意 |
---|---|---|
KYBarrageScrollDirectRightToLeft | 0 | <<<<< |
KYBarrageScrollDirectLeftToRight | 1 | >>>>> |
KYBarrageScrollDirectBottomToTop | 2 | ↑↑↑↑↑ |
KYBarrageScrollDirectTopToBottom | 3 | ↓↓↓↓↓ |
KYBarrageManagerDelegate
,调用 -delegate barrageManagerDataSource
数据设置代理,开启访问激励弹幕
_manager.delegate = self;
[_manager startScroll]; //Open Access Initiative barrage
调用方法
- (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. On the screen the barrage is suspended, and stop acquiring new barrage
// 2. The current barrage on the screen to start rolling, and to obtain a new barrage
[_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 弹幕内部,滚动后暂停 3 秒,也可以扩展到其他事件,如下所示
如果它无意中给你提供了帮助,请不要以此表示支持它,这是最好的支持,非常感谢!
KYBarrageKit 采用 MIT 协议授权。访问 LICENSE 文件获取更多信息。