iOS实现组件录屏视频不可见,用户肉眼可见(类似系统键盘效果)

博客 动态
0 195
优雅殿下
优雅殿下 2022-03-07 15:56:14
悬赏:0 积分 收藏

iOS实现组件录屏视频不可见,用户肉眼可见(类似系统键盘效果)

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

为了实现这个效果,利用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];//让键盘基于_UITextLayoutCanvasViewshield.userInteractionEnabled=YES;//允许交互,不然无法点击UITexrField.inputView=shield;//设置UITextField的inputView

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

swift实现请参考:
https://juejin.cn/post/7066341701815631909#heading-8

posted @ 2022-03-07 15:37 白叶Stuart 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员