• 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];//让键盘基于_UITextLayoutCanvasView
    shield.userInteractionEnabled=YES;//允许交互,不然无法点击
    UITexrField.inputView=shield;//设置UITextField的inputView
    

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

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

  • 相关阅读:
    P3368 【模板】树状数组 2
    P3374 【模板】树状数组 1
    P1631 序列合并
    P1387 最大正方形
    P1197 [JSOI2008]星球大战
    P2866 [USACO06NOV]糟糕的一天Bad Hair Day
    P1196 [NOI2002]银河英雄传说
    SP1805 HISTOGRA
    P1334 瑞瑞的木板
    2019信息学夏令营游记
  • 原文地址:https://www.cnblogs.com/BYGAO/p/15976204.html
Copyright © 2020-2023  润新知