Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何实现直播中手绘礼物?

如何实现直播中手绘礼物?

作者头像
落影
发布于 2018-04-27 09:37:17
发布于 2018-04-27 09:37:17
1.4K00
代码可运行
举报
文章被收录于专栏:落影的专栏落影的专栏
运行总次数:0
代码可运行

前言

在上一篇直播APP常用动画效果中介绍了各种常用的动画效果,但是在直播APP中还有一种特别常用的礼物——手绘礼物

这篇就是介绍如何实现这一个好玩的礼物。

正文

手绘礼物:简单来说,就是观众可以通过手指在屏幕绘制形状、文字等形成特殊的礼物,主播收到后除了钻石奖励,还会显示观众绘制的礼物。

手绘礼物的实现,大致分为以下几个部分:

1、绘制准备;

2、手绘记录;

3、消息传输;

4、解析并显示;

效果展示:

绘制准备

1、绘制区域

绘制区域指的是礼物的可绘制区域,需要监听手势。

但是该区域可能存在其他手势,比如说上下滑手势切换直播间、左右滑手势切换UI显示,需要解决冲突问题:

添加上下滑手势和左右滑手势的delegate,在UIGestureRecognizerDelegate的实现中,根据当前绘制区域是否显示判断是否接受手势;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

为了保证在不同手机上,绘制区域不超过屏幕范围与绘制的方便,规定绘制区域为正方形,并且长度为屏幕的宽度,中心与屏幕正中心对齐。

图案选择:绘制的图案有多个,根据是否需要混合多个图案,选择对应的数据结构存储点数据。

绘制区域

2、手绘记录

手绘的记录可以通过UIResponder的方法来实现:

由touchBegan开始,记录touchMove的位置,touchEnd结束;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

注意,为了避免两个图案过于贴近,需要添加距离判断:

根据当前点位置和上一个点的位置,判断两个点的距离是否大于最小间隔;

最终把合法的位置和当前选择的图案编号,转换为本地点数据结构存入数组中。

绘制预览

3、消息传输

消息传输首先要和安卓端协商好数据格式,把本地点数据结构转为json串或者字节流,再放入房间消息中;

规定的数据格式包括以下信息:

square_size:�绘制正方形大小;

point_count:绘制点的数量;

point_data:点的位置信息;

point_type:点的图案类型;

为了缩小消息体积,点的位置信息截取小数点后1、2位;

把点数据按照指定的格式进行转换后,就可以打包成房间消息,进行消息传输。

4、解析并显示

显示的要求是与绘制效果一致,不变形与视频的相对位置不变;

上一步已经规定好的数据格式,当收到数据时按照对应格式进行转换,得到正方形大小、点位置、图案和数量信息,传给显示类。

为了缩短手绘图案的显示时间,绘制的点信息里面并没有时间;

显示的时候,按照绘制的先后顺序,在固定的时间间隔进行显示。

注意,显示区域与屏幕中心对齐,同时显示区域也是长为屏幕宽度的正方形,点位置信息需要做一次转换,得到当前屏幕的坐标。

总结

总结需求的要点:操作简单,绘制预览与显示结果一致。

之前就说过要做这个功能,一开始觉得挺麻烦,分析完需求后发现挺简单的;从提出需求、分析要点、实现和测试,耗时极短。

感觉和写这篇介绍的时间差不多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.01.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点
1. iOS中的事件基本介绍 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 1.1 事件可以分为三大类型,并且UIResponder内部提供了相应方法来处理事件 1. 触摸事件 //一根或者多根手指开始触摸view时自动调用view的下面方法 - (void)touchesBegan
xx_Cc
2018/05/10
1.8K0
iOS-手势UIGestureRecognier详解一. 手势UIGestureRecognier简介二. 手势的抽象类——UIGestureRecognizer三. UIGestureRecogni
一. 手势UIGestureRecognier简介 iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度。利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势。UIGestureRecognizer是一个抽象类,对iOS中的事件传递机制面向应用进行封装,将手势消息的传递抽象为了对象。其中定义了所有手势的基本行为,使用它的子类才能处理具体的手势。 二. 手势的抽象类——UIGesture
xx_Cc
2018/05/10
2.7K0
touchesBegan 触摸事件
1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型:
全栈程序员站长
2022/09/15
9810
IOS触摸事件分发机制详解
本文主要介绍了iOS事件传递机制,包括Touch Event、Mouse Event和Gesture Event。首先介绍了事件传递的整个流程,然后重点讲解了Touch Event、Mouse Event和Gesture Event的传递流程和区别。最后列举了一些常见应用解决方案,如扩大按钮点击区域、子视图消息传递给父视图等。
MelonTeam
2018/01/04
3.7K4
IOS触摸事件分发机制详解
touchesBegan 触摸事件一、概念介绍二、方法介绍三、参数介绍:touches四、参数介绍:event
一、概念介绍 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 事件类型.png 响应者对象UIResponder 在iOS中不是任何
用户2141756
2018/05/18
2.8K0
iOS-控件响应用户控制事件之事件处理
事件处理 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder内部提供了以下方法来处理事件 这些类可以覆盖下列几个方法处理不同的触摸事件 ```objc //触摸事件 (void)touchesBegan:(NSSet )touches with
用户1941540
2018/05/11
1.1K0
史上最详细的iOS之事件的传递和响应机制-原理篇
按照时间顺序,事件的生命周期是这样的:   事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view、寻找最合适的view的底层实现、拦截事件的处理)->找到最合适的view后事件的处理(touches方法的重写,也就是事件的响应)
VV木公子
2018/06/05
11.7K0
史上最详细的iOS之事件的传递和响应机制-原理篇
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用
        在iOS系统中,手势是进行用户交互的重要方式,通过UIGestureRecognizer类,我们可以轻松的创建出各种手势应用于app中。关于UIGestureRecognizer类,是对iOS中的事件传递机制面向应用的封装,将手势消息的传递抽象为了对象。有关消息传递的一些讨论,在前面的博客中有提到:
珲少
2018/08/15
2.2K0
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用
iOS 小技能: Responder Chain(响应者链)【上篇】
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”。
公众号iOS逆向
2022/08/22
1.2K0
iOS 小技能: Responder Chain(响应者链)【上篇】
UI篇-UIResponder之事件传递和响应精析
这篇文章只讨论触摸事件。对于触摸事件UIResponder内部提供了以下方法来处理事件:
進无尽
2018/09/12
2.7K0
UI篇-UIResponder之事件传递和响应精析
iOS 小技能: Responder Chain(响应者链)【下篇】
4个触摸事件处理方法中,都有NSSet *touches和UIEvent *event两个参数。
公众号iOS逆向
2022/08/22
1.1K0
iOS 小技能: Responder Chain(响应者链)【下篇】
绘图-简单手绘板的实现
自定义一个UIBezierPath的子类 LGPaintpath,下面是它的初始化方法
進无尽
2018/09/12
9420
绘图-简单手绘板的实现
【IOS开发进阶系列】手势专题
        iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式:
江中散人_Jun
2023/10/16
6570
【IOS开发进阶系列】手势专题
iOS 中的事件响应
iOS 中的事件响应者主要分为两类,分别为UIResponder及UIGestureRecognizer,其中UIControl是一种比较特殊的UIResponder,所以本文将事件响应者分为以下三种类型进行讨论。
CoderStar
2022/08/24
3.2K0
iOS 中的事件响应
iOS中手势的应用1. 四类事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用
iOS设备现如今大受欢迎的最重要原因之一就在于其开创了触控操作的潮流。发展到现在,无论是Android还是iPhone,现在APP与用户进行交互,基本上都是依赖于各种各样的触控事件。例如用户对屏幕进行了侧滑,APP就需要对这个手势进行相应的处理,给用户一个反馈。这些相应的事件就都是在UIResponder中定义的。 广告插播的措不及防:如果您要是觉得这篇文章让您有点收获,随手点个赞会让俺兴奋好久吶。 UIResponder大体有四类事件:触摸、加速计、远程控制、按压(iOS9.0以后出来的,3DTou
stanbai
2018/06/28
2.5K0
ios事件-触摸事件2(手势 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)
本文中,凡是看到xxx(),即表示xxx是一个函数或者方法!!!事件分为事件传递和事件响应,其中,事件响应又称事件处理。
全栈程序员站长
2022/09/15
1.2K0
ios事件-触摸事件2(手势 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)
iOS14开发-触摸与手势识别
用于描述触摸的窗口、位置、运动和力度。一个手指触摸屏幕,就会生成一个 UITouch 对象,如果多个手指同时触摸,就会生成多个 UITouch 对象。
YungFan
2021/05/10
2.6K0
iOS 事件传递和处理
iPhone拥有很好的用户交互体验,这源于iOS系统对交互事件的高效处理和高优响应; App开发者处理用户交互非常便捷,这源于iOS系统和UIKit对用户操作做了封装和默认处理; 本文围绕iOS的事件传递和处理,探究其具体过程。
落影
2021/05/06
1.6K0
iOS小技能: 网络加载中处理、接口暂无数据处理、全局监听用户点击事件
在日常开发中经常涉及数据列表的查询,处理服务侧无数据返回的情况或者网络异常的手段是iOS必备小技能。
公众号iOS逆向
2022/08/22
8320
iOS小技能: 网络加载中处理、接口暂无数据处理、全局监听用户点击事件
iOS_38_手势
默认是会调用其[super touchesXXX],这个super就是上一个响应者
全栈程序员站长
2022/07/06
1K0
iOS_38_手势
推荐阅读
相关推荐
iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验