直播礼物连刷能有效的提升主播与用户的交互,从而提升用户刷礼物的数量,那现在咱们来做一个简单的直播礼物连刷教程吧。

先贴出效果图:

  1. 首先从简单的开始,文字描边+连击效果,这个比较简单,只要重写 UILabel 的
  • (void)drawTextInRect:(CGRect)rect
    就可以达到文字描边的效果;然后开定时器,让数字增加,动画效果用关键帧动画控制。
  1. 然后仿照映客的 UI 自定义 View ,控制动画,从屏幕外面进入,然后显示连击效果,最后隐藏,恢复到初始位置。

  2. 上面的动画效果只要稍微有点动画基础,很容易就搞定了。做到这里我冷静下来,不再往下面做了,因为事情远远没有想象的那么简单。首先考虑的是,在收到礼物消息的回调时去赋值数据源,运行动画,但是这个回调是是一个字典数组,里面包含了一段时间内多条消息,他们是有顺序的,这是其一;其二,这个回调调用次数会很频繁,短时间内就会收到更多的消息数组。所以需要把这些消息处理成队列,然后播放动画效果,一个动画效果播放完成后,再从消息队列中取下一个消息,继续播放下一个动画,这样才能保证动画的播放顺序不回乱。

说到队列的话就想到了多线程,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 那个方式很熟悉么~哈哈。最近工作忙,动画的细节和封装性没有再完善,不过易用性我感觉还是很好的,祝大家玩得开心~

github源码:https://github.com/aiyaapp/AiyaEffectsIOS

最简单的直播礼物连刷特效制作(带源码)相关推荐

  1. 关于水表指针的简单识别(提供一个小思路,带源码)

    这几天在群里吹牛逼的时候,遇到群友的一个提问,大概是水表上的4个指针识别角度,如图所示: 思路是水表都是固定状态 所以遮挡个蒙版 想办法让用户对准固定的 位置 拍照 这样方便取出单独的小框框 如图所示 ...

  2. html直播动画,HTML5 直播疯狂点赞动画实现代码 附源码

    直播有一个很重要的互动: 为了烘托直播间的氛围,直播相对于普通视频或者文本内容,点赞通常有两个特殊需求: 点赞动作无限次,引导用户疯狂点赞 直播间的所有疯狂点赞,都需要在所有用户界面都 我们先来看效果 ...

  3. 疯狂html附源码,科技常识:HTML5 直播疯狂点赞动画实现代码 附源码

    今天小编跟大家讲解下有关HTML5 直播疯狂点赞动画实现代码 附源码 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关HTML5 直播疯狂点赞动画实现代码 附源码 的相关资料,希望小伙伴们看 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. 在直播平台搭建平台中,购物源码开发公司的直播间搭建该如何选择流媒体直播系统传输协议

    2019年直播行业面临着来势汹汹的短视频挑战,但在垂直细分领域,网络直播平台依旧有着难以企及的位置.如今,直播平台搭建的势头依旧没有减弱,只是更多的人想要将直播平台与更多的行业相结合.对于直播平台搭建 ...

  6. HTML期末大作业~简单的程序员个人博客网站模板源码(HTML+CSS)~个人主页博客web网页设计制作~HTML简单个人网页制作~Web大学生网页成品...

    HTML期末大作业~ 简单的程序员个人博客网站模板源码(HTML+CSS)~学生HTML个人网页作业作品下载 ~个人主页博客网页设计制作 ~大学生个人网站作业模板 ~简单个人网页制作 临近期末, 你还 ...

  7. html5直播源码,HTML5 直播疯狂点赞动画实现代码 附源码

    直播有一个很重要的互动:点赞. 为了烘托直播间的氛围,直播相对于普通视频或者文本内容,点赞通常有两个特殊需求: 点赞动作无限次,引导用户疯狂点赞 直播间的所有疯狂点赞,都需要在所有用户界面都动画展现出 ...

  8. 简单干净的Emlog6.0.1技术导航模板源码-视频教程

    简介: 简单干净的Emlog6.0.1技术导航模板源码:一款非常简洁的Emlog6.0.1技术导航的模板,有着无框架.精简.加载迅速著称,还有些许实用的功能,此模板是有史以来第一款Emlog完整版的技 ...

  9. 微信小程序:修复图片音频全新升级带特效喝酒神器源码

    这是一款全新升级带特效喝酒神器小游戏微信小程序源码 小编发现很多喝酒神器小程序都不带特效和音效的 感觉差了那么一点意思而且感觉也不炫酷 所以小编今天给大家带来一款带特效,音效炫酷的喝酒神器 该款神器由 ...

  10. 前一段时间比较火的刷网课平台源码,带数据库和教程

    前一段时间比较火的刷网课平台源码,带数据库和教程. 好在疫情已经结束了,希望今后世上再无网课. 这个代码免费提供给大家学习开发用吧,作为一个php的入门学习案例用用还可以. 使用办法 网站根目录解压 ...

最新文章

  1. 8 iOS中KVO 的本质
  2. 微软苹果服务器宕机,苹果服务器宕机,iPhone用户别做这两项操作,微软特斯拉也中招...
  3. java校验ip格式_JAVA IP地址格式验证,使用正则表达式
  4. 如何修改html页眉页脚,如何使用标准页眉和页脚修改/更新一组html文件
  5. 解决虚拟机linux端mysql数据库无法远程访问
  6. 一文掌握二代测序NGS
  7. Nexus【环境搭建 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
  8. Qt Creator指定构建设置
  9. 一次Linux磁盘损坏导致系统不可用恢复实例
  10. 文件上传之Apache commons fileupload使用
  11. gmail注册手机号不能用于验证_一个手机号码、辅助邮箱,可以注册绑定多少个gmail帐号?...
  12. windows server 2003 下载
  13. 用Python画一个时钟---简易版
  14. 现代操作系统 第三章 内存管理 习题答案
  15. Java+spring基于ssm的基于SSM的高校奖学金助学金管理系统
  16. 两台电脑共享一套键盘鼠标的神器
  17. java笔试常见填空题
  18. 已知网络号如何求子网掩码?
  19. 快码加编——代码生成神器
  20. 【详解】标识符命名规则及命名规范

热门文章

  1. 如何查看硬盘对应的主板接口属性
  2. 红巨星粒子插件Trapcode Suite 14.0 Win版全套中文完美汉化版
  3. echarts 自定义 tooltip
  4. JS小图切换大图轮播代码
  5. 图形可视化2:matlab画散点图加拟合趋势线
  6. 斯坦福NLP名课带学详解 | CS224n 第6讲 - 循环神经网络与语言模型(NLP通关指南·完结)
  7. 英语作文计算机和ai作用,ai智能对生活的改变英语作文
  8. 数学建模层次分析法例题及答案_数学建模之层次分析法
  9. Java 基础高频面试题(2022年最新版)
  10. 非计算机专业计算机基础大一考试题库,2017计算机基础大一考试题「附答案」...