iOS- 添加UIWindow蒙版

时间:2022-05-10 20:39:30

开发中经常碰到需要添加一个半透明的蒙版,比如各类提示弹窗等。

UIWindow图层上添加蒙版

优先级

例如蒙版也可添加到self.navigationController.view图层上或者self.tabBarController.view图层上

self.view < self.navigationController.view < self.tabBarController.view < UIWindow


UIWindow:一般作为UIView的容器

 应用场景

    当需要将某些控件显示到最上层时就可以创建一个window,然后将空间添加到window

    支付宝、记账类软件认证界面(手势解锁)大部分都是用UIWindow做的

 注意

    1.一般情况下不要随意创建window,不要滥用,因为只要创建就会自动添加到界面上(不用addsubview!!!),那么如果滥用window会导致应用程序的层级结构混乱

    2.window是有级别的,级别越高就显示在越顶层(键盘级别最高)

    默认有3个级别:UIWindowLevelNormal0.0 < UIWindowLevelAlert1000.0 < UIWindowLevelStatusBar2000.0

    也可自定义window.windowLevel = 4000.0;

 UIWindow特点

    只要创建就会自动添加到界面上

    系统弹出UIAlertView、弹出键盘、来短信、来电、电量不足等也是用的UIWindow

    如果需要window监听点击事件需要设置frame,因为window创建后没有frame

        UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    移除window可在点击方法里直接 window = nil;

 

//coverframe[UIScreen mainScreen].bounds的半透明或透明色button

UIWindow *window = [UIApplication sharedApplication].keyWindow;

[window addSubview:cover];


上个案例,自定义的一个指纹锁弹窗,其中touchidView为xib自定义的view样式,具体可根据实际需要自定义以及添加代理等方法。

#pragma mark - 添加touchIDView弹窗

- (void)popCoverview{

    

    //设置蒙版

    self.coverView = [[UIViewalloc]initWithFrame:[UIScreenmainScreen].bounds];

    self.coverView.backgroundColor = [UIColorblackColor];

    self.coverView.alpha =0.6;

    //添加蒙版上弹窗视图

    self.touchidView = [[NSBundlemainBundle]loadNibNamed:@"DDTouchidView"owner:selfoptions:nil].lastObject;

    self.touchidView.center =self.coverView.center;

    self.touchidView.delegate =self;

    

    //实现弹出方法

    UIWindow *window = [UIApplicationsharedApplication].keyWindow;

    window.windowLevel =UIWindowLevelNormal;

    

    [window addSubview:self.coverView];

    [window addSubview:self.touchidView];

}