Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Jonhory/LiveSendGift
直播发送弹幕效果
https://github.com/Jonhory/LiveSendGift
Last synced: 3 months ago
JSON representation
直播发送弹幕效果
- Host: GitHub
- URL: https://github.com/Jonhory/LiveSendGift
- Owner: Jonhory
- License: mit
- Created: 2016-11-12T01:47:24.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-11-25T03:29:35.000Z (almost 2 years ago)
- Last Synced: 2024-04-13T10:34:29.690Z (7 months ago)
- Language: Objective-C
- Size: 2.85 MB
- Stars: 357
- Watchers: 7
- Forks: 73
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-iOS - LiveSendGift - 直播发送弹幕效果 (UI Effects)
README
![](http://ww1.sinaimg.cn/large/c6a1cfeagy1ffbh46t93nj20ky0dsq3x.jpg)
## 感谢
* 得益于某位不愿留名的同学的帮助,队列模式已经较好的实现了。
* 感谢[gxtai](https://github.com/gxtai)发现并解决[内存释放](https://github.com/Jonhory/LiveSendGift/issues/20)问题## 重要信息
* 2017年09月25日18:42:00 修复了在iOS11下必现`EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)`的崩溃BUG。
* 已知bug提示:在替换模式`LiveGiftAddModeReplace`下使用`animatedWithGiftModel`方法将导致UI效果不理想的bug。建议是`animatedWithGiftModel`方法使用于`LiveGiftAddModeAdd`模式。
* 2017年12月25日11:39:39 修复在iOS11下可能出现的`.cxx destruct`崩溃问题。
* 2021年3月23日确认了`for`循环添加礼物时会出现后续[礼物`toNumber`变大](https://github.com/Jonhory/LiveSendGift/issues/19)的问题。已提交修复代码,待开发者确认是否完全修复。
* 2021年7月12日确认并解决了[内存释放](https://github.com/Jonhory/LiveSendGift/issues/20)问题。
* 2022年11月25日确认并修复了[`addLiveGiftShowModel:showNumber:`显示异常](https://github.com/Jonhory/LiveSendGift/issues/21)问题。
### 请使用2021/03/25之前的代码的开发者注意以下代码需调整
```
if ([oldKey isEqualToString:key]) {
oldNumber = oldModel.toNumber;
showModel.toNumber += oldNumber;
[self.waitQueueArr removeObject:oldModel];
break;
}
```修改为:
```
if ([oldKey isEqualToString:key] && oldModel.animatedTimer == nil) {
oldNumber = oldModel.toNumber;
showModel.toNumber += oldNumber;
[self.waitQueueArr removeObject:oldModel];
break;
}
```## 导航
* [目标](#目标)
* [版本更新说明](#版本更新说明)
* [最新版本](#最新版本)
* [快速使用](#快速使用)
* [自定义配置](#自定义配置)* 弹幕过几秒自动消失
* 实现A用户弹幕出现时,B用户发送礼物,B用户弹幕在A用户弹幕下方,A/B用户弹幕存在时,A/B用户连续发送礼物,弹幕显示的礼物数量增加,谁的礼物数量较大,谁的弹幕在上方。
* A/B用户弹幕存在时,C用户发送礼物,A/B用户中较早出现的弹幕被替换成C用户的弹幕数据,并且C用户的弹幕处于下方#### V1.0
* 大致实现了不同用户增加弹幕的效果#### V1.1
* 实现了用户连续发送数字增加效果
* 实现了新增弹幕从空位出现的效果#### V1.2
* 实现了第二个用户之后送礼物替换较早的弹幕效果(完善)#### V1.3
* 实现了上面的视图移除后,正在连击的下面的视图移动到上面的效果#### V1.4
* 实现了目标效果😊😊😊#### V1.5
* 实现了自定义最大礼物数量的需求#### V1.6
* 新增了自下而上的展现效果#### V1.7
* 解决了一个视图显示BUG,现在几乎不会出现该BUG。#### V1.8
* 支持向左移除弹幕,支持左边出现动画效果,增加弹幕移除后的回调代理。#### V1.901测试版
* 支持从1增加到某个数字的动画(在替换模式`LiveGiftAddModeReplace`下存在小bug,如果有某猿能提供帮助将不胜感激)
* 支持队列模式(如下GIF图,注意看鼠标~)
* 移除的模式增加无动画移除
* 修改了部分枚举名称更符合OC语法
* 暴露了动画时长属性,方便开发者依据不同情况自行修改![](https://ws1.sinaimg.cn/large/c6a1cfeagy1fjq279e03tg20a30iek2l.gif)
### 快速使用
* 使用的第三方库:
* [Masonry](https://github.com/SnapKit/Masonry)
* [SDWebImage](https://github.com/rs/SDWebImage)* 两个模型:`LiveGiftListModel`和`LiveUserModel`
* `LiveGiftListModel `是用来显示弹幕上右侧礼物图片`picUrl`和打赏的语句`rewardMsg`的,礼物有`type`字段
* `LiveUserModel `是用来显示送礼物的人的名称`name`和头像`iconUrl`
* 导入`#import "LiveGiftShowCustom.h"`* `@property (nonatomic ,weak) LiveGiftShowCustom * customGiftShow;
````
/*
礼物视图支持很多配置属性,开发者按需选择。
*/
- (LiveGiftShowCustom *)customGiftShow{
if (!_customGiftShow) {
_customGiftShow = [LiveGiftShowCustom addToView:self.view];
_customGiftShow.addMode = LiveGiftAddModeAdd;
[_customGiftShow setMaxGiftCount:3];
[_customGiftShow setShowMode:LiveGiftShowModeFromTopToBottom];
[_customGiftShow setAppearModel:LiveGiftAppearModeLeft];
[_customGiftShow setHiddenModel:LiveGiftHiddenModeNone];
[_customGiftShow enableInterfaceDebug:YES];
_customGiftShow.delegate = self;
}
return _customGiftShow;
}
```* 在开发中使用
```
LiveGiftShowModel * listModel = [LiveGiftShowModel giftModel:self.giftArr[3]
userModel:self.firstUser];
[self.giftShow addGiftListModel:listModel];
```
即可完成接入。每一次点击只需要`[self.giftShow addGiftListModel:listModel];`即可自动计数加一。最高支持显示9999。### 特别说明
* 层次结构说明,如下图:
![](https://ws1.sinaimg.cn/large/c6a1cfeagy1ft3d4bi9cwj20zd0alwi2.jpg)
* `LiveGiftShowCustom.m`中
```
#pragma mark - 初始化
+ (instancetype)addToView:(UIView *)superView{
LiveGiftShowCustom * v = [[LiveGiftShowCustom alloc]init];
[superView addSubview:v];
//布局
[v mas_makeConstraints:^(MASConstraintMaker *make) {
//这个改动之后要注意修改LiveGiftShowView.h的kViewWidth
make.width.equalTo(@244);
//将主视图的高度设置0.01,保证弹幕后面的视图能响应点击事件。
make.height.equalTo(@0.01);
//这个可以任意修改
make.left.equalTo(superView.mas_left);
//这个参数在的设定应该注意最大礼物数量时不要超出屏幕边界。
make.top.equalTo(superView.mas_top).offset(400);
}];
v.backgroundColor = [UIColor clearColor];
return v;
}
```### 自定义配置
* `LiveGiftShowCustom` 管理所有弹幕的视图|两个弹幕之间的高度差|两个交换动画时长|
|:----------------:|:------------:|
|kGiftViewMargin |kExchangeAnimationTime|
|50.0 |0.25 |* `LiveGiftShowView`一个弹幕的视图
|弹幕背景宽|弹幕背景高|送礼者名称字号|送礼者名称文字颜色|礼物寄语字号|礼物寄语文字颜色|
|:------:|:------:|:------:|:------:|:------:|:------:|
|kViewWidth|kViewHeight|kNameLabelFont|kNameLabelTextColor|kGiftLabelFont|kGiftLabelTextColor|
|240.0|44.0|12.0|whiteColor|10.0|orangeColor||每个数字图片宽度|弹幕几秒后消失|数字改变动画时长|弹幕消失动画时长|
|:------:|:------:|:------:|:------:|
|kGiftNumberWidth|kTimeOut|kNumberAnimationTime|kRemoveAnimationTime|
|15.0|3|0.25|0.5|