系统键盘在密码框输入时,如果用户开启录屏,键盘在录屏得到的视频里会不可见,但是用户在录屏时却能看到。

为了实现这个效果,利用UItextfield在录屏下视频不可见的特性,将实现这一效果的私有UIview,也就是_UITextLayoutCanvasView提取出来,作为背景,其他组件在这个背景上显示。objective c代码如下

-(UIView *)initWithFrame:(CGRect)frame{

    UITextField * root=[[UITextField alloc] initWithFrame:frame];
if(root){
root.secureTextEntry=YES;//利用密码框录屏不可见的特性
UIView *textLayoutCanvasView=root.subviews.firstObject;//获取_UITextLayoutCanvasView
if (textLayoutCanvasView.subviews.count) {
[textLayoutCanvasView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
}
textLayoutCanvasView.frame=frame;
textLayoutCanvasView.userInteractionEnabled=YES;
textLayoutCanvasView.backgroundColor=[UIColor clearColor];
return textLayoutCanvasView;
} return root.subviews.firstObject;
}

需要注意的是,目前是利用通过获取指定位置的 UITextField 的 subview 来获取私有 view ,如果后期 UITextField 的 subview 位置变更就要再做处理。而且_UITextLayoutCanvasView作为私有成员是不能被添加成员变量和函数的,只能作为背景。例如要实现自定义键盘和系统键盘类似的录屏不可见效果,我目前只能这样想到做:

CustomKeyboard *keyboard=[[CustomKeyboard alloc]init];//你的自定义键盘类
UIView *shield=[self initWithFrame:keyboard.frame];//实现录屏不可见的_UITextLayoutCanvasView
[shield addSubview:keyboard];//让键盘基于_UITextLayoutCanvasView
shield.userInteractionEnabled=YES;//允许交互,不然无法点击
UITexrField.inputView=shield;//设置UITextField的inputView

然后如果出现点击事件传递不到button的原因,是因为事件在更上一层view被拦截了,传递touch或者直接在更上一层处理都行。

swift实现请参考:

https://juejin.cn/post/7066341701815631909#heading-8

iOS实现组件录屏视频不可见,用户肉眼可见(类似系统键盘效果)的更多相关文章

  1. 苹果8plus怎么录屏视频

    现在越来越多的手机控,不管在什么地方,什么时候,都是低头看手机的居多,因为手机信息量太大了,一部手机就可以了解最新咨询,但是作为苹果8plus怎么录制手机屏幕,你们知道吗?今天就和大家一起分享苹果8p ...

  2. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...

  3. Android实现录屏直播(一)ScreenRecorder的简单分析

    http://blog.csdn.net/zxccxzzxz/article/details/54150396 Android实现录屏直播(一)ScreenRecorder的简单分析 Android实 ...

  4. Android 禁止截屏、录屏 — 解决PopupWindow无法禁止录屏问题

    项目开发中,为了用户信息的安全,会有禁止页面被截屏.录屏的需求. 这类资料,在网上有很多,一般都是通过设置Activity的Flag解决,如: //禁止页面被截屏.录屏 getWindow().add ...

  5. Fundebug录屏插件更新至0.6.0

    摘要: 录屏插件的性能进一步优化,传输的数据体积大幅度减少. 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 BUG,提 ...

  6. Fundebug录屏插件更新至0.5.0,新增domain参数

    摘要: 通过配置domain来保证"视频"的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 ...

  7. Fundebug录屏插件更新至0.4.0,修复BUG,优化性能

    摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ...

  8. 用js实现web端录屏

    用js实现web端录屏 原创2021-11-14 09:30·无意义的路过 随着互联网技术飞速发展,网页录屏技术已趋于成熟.例如可将录屏技术运用到在线考试中,实现远程监考.屏幕共享以及录屏等:而在我们 ...

  9. linux下录屏和回放工具script和scriptreplay

    读书是一个长见识的过程,以前偶尔会用到录屏的工具,很少用想系统的学习一下.最近看了linux shell脚本攻略,发现很多新东西是以前自己没有接触到的.比如,这个非常好用的录屏工具:script,这次 ...

随机推荐

  1. python09day

    内容回顾 文件操作初识 三步走: 打开文件open() 文件路径path,编码方式encoding=,mode(默认读) 操作文件(对文件句柄进行操作) 读.写.追加 各四种模式 读:read().r ...

  2. maven 中的工程依赖和层级依赖?

    一.什么是工程依赖? 思考问题?1.1一旦开始分模块开发的时候,之前的所有包都会被拆分成一个一个的项目 model mapper service ... 其实mapper需要model的支持,怎么解决 ...

  3. CF Round #687 Div2 简要题解

    题面 A 可以发现,最远的几个人一定是 \((1, 1), (1, m), (n, 1), (n, m)\) 中的一个,直接计算即可. B 注意到颜色数量很少,直接暴力枚举最终的颜色后模拟即可. C ...

  4. JDK安装步骤

    安装过程: 新建文件夹 新建文件夹 首先新建两个路径:D:\java\jdk和D:\java\jre,代表我把Java安装到D盘下的java路径下,在该路径下要新建两个路径,一会儿放jdk和jre. ...

  5. GC基础知识

    内存溢出和内存泄漏 内存溢出(Out Of Memory) 就是申请内存时,JVM没有足够的内存空间.通俗说法就是去蹲坑发现坑位满了. 内存泄露 (Memory Leak) 就是申请了内存,但是没有释 ...

  6. php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题

    我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的: sql1:查询商品库存 1 if(库存数量 > 0) 2 { 3 //生成订单 4 //库存-1 5 > 当没有并发时 ...

  7. 一个label 混搭不同颜色,不同字体的文字.. by 徐

    效果如图箭头所示,只需要一个label就可以做到不同颜色或不同字体的效果 1 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, ...

  8. shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式

    shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式 1.sort命令 概述: Linux sort命令用于将文本文件内容加以排序. sort命令可针对文本文件的内容,以行为单 ...

  9. python基础语法_3面向对象

    http://www.runoob.com/python3/python3-class.html https://www.imooc.com/learn/317 慕课网:987809563@qq.co ...

  10. 02编程语言与python介绍

    编程语言分类 机器语言:直接用计算机能理解的二进制指令去编写程序,是直接在控制计算机硬件 优点:运行效率高 缺点:开发效率低 1.开发一个简单的小功能都要哟个到非常多条数的二进制指令 2.二进制指令非 ...