開發中經常碰到需要添加一個半透明的蒙版,比如各類提示彈窗等。
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];
}