開發中經常碰到需要添加一個半透明的蒙版,比如各類提示彈窗等。
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個級別:UIWindowLevelNormal(0.0) < UIWindowLevelAlert(1000.0) < UIWindowLevelStatusBar(2000.0)
也可自定義window.windowLevel = 4000.0;
UIWindow特點
只要創建就會自動添加到界面上
系統彈出UIAlertView、彈出鍵盤、來短信、來電、電量不足等也是用的UIWindow
如果需要window監聽點擊事件需要設置frame,因爲window創建後沒有frame
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
移除window可在點擊方法裏直接 window = nil;
//cover爲frame是[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];
}