映客都是互刷礼物吗_iOS 动画队列—仿映客刷礼物效果
最近在研究直播的相关知识,在网上看到了不少优秀的开源项目,但都没有看到映客那个刷礼物的效果,于是手痒痒,决定自己做一个。
1. 首先从简单的开始,文字描边+连击效果,这个比较简单,只要重写 UILabel 的- (void)drawTextInRect:(CGRect)rect
就可以达到文字描边的效果;然后开定时器,让数字增加,动画效果用关键帧动画控制。
2. 然后仿照映客的 UI 自定义 View ,控制动画,从屏幕外面进入,然后显示连击效果,最后隐藏,恢复到初始位置。
3. 上面的动画效果只要稍微有点动画基础,很容易就搞定了。做到这里我冷静下来,不再往下面做了,因为事情远远没有想象的那么简单。首先考虑的是,在收到礼物消息的回调时去赋值数据源,运行动画,但是这个回调是是一个字典数组,里面包含了一段时间内多条消息,他们是有顺序的,这是其一;其二,这个回调调用次数会很频繁,短时间内就会收到更多的消息数组。所以需要把这些消息处理成队列,然后播放动画效果,一个动画效果播放完成后,再从消息队列中取下一个消息,继续播放下一个动画,这样才能保证动画的播放顺序不回乱。
说到队列的话就想到了多线程,NSOperation ,我们可以重写它,然后在 start 方法中添加动画,但是注意我们只是需要让这些消息排队,更新 UI 还是要在主线程操作;我们还要手动触发 NSOperation 的 KVO,告诉这个操作什么时候开始,什么时候算是结束,我们想在一个动画播放完毕后再执行下一个动画,于是我这里定义了一个 block ,在动画结束时,传递给 NSOperation ,告诉它动画结束了。@synthesize finished = _finished;
@synthesize executing = _executing;
- (instancetype)init
{
self = [super init];
if (self) {
_executing = NO;
_finished = NO;
}
return self;
}
- (void)start {
if ([self isCancelled]) {
self.finished = YES;
return;
}
self.executing = YES;
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
_presentView = [[PresentView alloc] init];
_presentView.model = _model;
// i % 2 控制最多允许出现几行
_presentView.frame = CGRectMake(-self.listView.frame.size.width / 2, 300 - (_index % 2) * 70, self.listView.frame.size.width / 2, 40);
_presentView.originFrame = _presentView.frame;
[self.listView addSubview:_presentView];
[self.presentView animateWithCompleteBlock:^(BOOL finished) {
self.finished = finished;
}];
}];
}
#pragma mark - 手动触发 KVO
- (void)setExecuting:(BOOL)executing
{
[self willChangeValueForKey:@"isExecuting"];
_executing = executing;
[self didChangeValueForKey:@"isExecuting"];
}
- (void)setFinished:(BOOL)finished
{
[self willChangeValueForKey:@"isFinished"];
_finished = finished;
[self didChangeValueForKey:@"isFinished"];
}
注意这里 :_presentView.frame = CGRectMake(-self.listView.frame.size.width / 2, 300 - (_index % 2) * 70, self.listView.frame.size.width / 2, 40);// i % 2 控制最多允许出现几行
queue.maxConcurrentOperationCount = 2; // 队列分发
当时其实只是实现了一个队列,按顺序一个一个播放,如何实现 N 列并发呢?其实把这些并发的动画队列想象成图片的多并发异步下载就好了,下意识地就加了上面两句控制并发列数的代码。能这么顺利做出来,是因为最近仔细研究了 SDWebImage 的源码,不觉得重写 NSOperation 那个方式很熟悉么~哈哈。最近工作忙,动画的细节和封装性没有再完善,不过易用性我感觉还是很好的,最后附上 demo 地址和使用方法,祝大家玩得开心~
映客都是互刷礼物吗_iOS 动画队列—仿映客刷礼物效果相关推荐
- 映客都是互刷礼物吗_一姐负气出走花椒,映客正在发生一场大规模主播内讧事件.........
有人的地方就有江湖,更何况是最热闹的移动直播平台. 小红近日发现大新闻,映客粉丝数第一的主播"二姐Alice",竟然转战到了花椒直播平台,已在花椒直播了几场,每次都登上花椒榜单前列 ...
- 映客都是互刷礼物吗_今日网红
有人的地方就有江湖,更何况是最热闹的移动直播平台. 小红近日发现大新闻,映客粉丝数第一的主播"二姐Alice",竟然转战到了花椒直播平台,已在花椒直播了几场,每次都登上花椒榜单前列 ...
- 映客都是互刷礼物吗_仿映客刷礼物效果 代码优化
上一篇文章<仿映客刷礼物效果---基本逻辑实现>中,分析了刷礼物效果的基本流程与具体实现代码.但还有一些BUG和一些可优化的地方没有处理,现在我们就来分析下这些遗留的问题.当然个人的能力是 ...
- 映客都是互刷礼物吗_仿映客刷礼物效果---代码优化
上一篇文章<仿映客刷礼物效果---基本逻辑实现>中,分析了刷礼物效果的基本流程与具体实现代码.但还有一些BUG和一些可优化的地方没有处理,现在我们就来分析下这些遗留的问题.当然个人的能力是 ...
- 映客都是互刷礼物吗_仿映客刷礼物效果—基本逻辑实现
项目介绍: 最近做了个直播项目,需要用到弹幕和刷礼物.在网上找了许多开源代码,发现都不是很适合自己的项目需求,于是利用空余时间将两个功能都实现下,这里分享出来,供大家一起学习.(关于弹幕的实现,大家可 ...
- 映客都是互刷礼物吗_iOS 基于 IM 实现仿映客刷礼物连击效果
这里实现了以下功能:随着收到 IM 礼物消息,实时累加礼物数量 如果超出连击时间,比如 3s ,则重新开始计数,从 1 开始 如果在连击时间内,则在原先基础上累加 下面把改造思路跟大家分享下: 问题一 ...
- 映客都是互刷礼物吗_映客互刷礼物有什么用_映客守护有什么用
一起直播.互刷礼物.改ID发性感照,赵本山女 375x332 - 122KB - PNG 一起直播.互刷礼物.改ID发性感照,赵本山女 600x893 - 247KB - JPEG 一起直播.互刷礼物 ...
- 【云豹直播系统】专业制作仿映客手机直播app、视频直播系统
从去年开始,视频直播软件已在大众的娱乐生活中悄然走红,由PC端过渡到手机端的视频直播甚是火爆.在APP上,主播们可以通过手机摄像头,即时与粉丝聊天互动,让网友见识到移动直播的魅力.火爆远不止如此,国内 ...
- android动画送礼物,Android开发仿映客送礼物效果
这里写链接内容仿映客送小礼物的特效,顺便复习一下属性动画,话不多说先看效果图. 需求分析 可以看到整个动画有几部分组成,那我们就把每个部分拆分出来各个击破. 1.要显示那些内容以及内容间的位置关系? ...
最新文章
- 【组队学习】【26期】动手学数据分析
- mysql 存储过程out,in,inout分别表示什么
- 【决策】Waymo无人出租车年底发射,现已进入定价环节 | 公交部门竟成友军?...
- 套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...
- java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常
- OpenSSL库概述
- python比较文件每行长度_读取文件并查找所有行的长度是否相同
- 使用sklearn PCA主成分分析对图像特征进行降维
- android左右滑动fragment,Android基于ViewPager+Fragment实现左右滑屏效果的方法
- PaddlePaddle(1)——让人拍案叫绝的创意都是如何诞生的
- 深度学习一(PyTorch物体检测实战)
- 个人博客前后台整站开发——模板免费下载
- Shiro记住我(RememberMe)
- 从招聘网站分析大数据相关职位现状
- 假期读好书——力荐《八位大学校长》
- Unhandled promise rejection错误解决
- 网易收购《底特律》《暴雨》开发商继续走向全球化
- 3D目标检测-BEVFormer、BEVDepth
- 小米路由器忘记管理密码后重置密码
- python通过手机拍摄的视频图片进行人脸头像采集
热门文章
- matlab求矩阵行最简形,计算矩阵行最简行的命令
- C++实现行最简型矩阵
- fiddler抓取iOS微信小程序HTTPS包方法
- 如何实现设为首页,加入收藏的功能
- 数据压缩(二)——PNG文件结构分析
- (三)Rxjava2+Retrofit之文件上传与下载
- 认识几种三坐标测量机的结构形式
- android 8省电,智能手机怎么省电?Android手机省电攻略
- 讲故事的人写的谈判手册——Leo锦书64
- [Java Path Finder][JPF学习笔记][4]将JPF源码导入Eclipse