iOS- 添加UIWindow蒙版

開發中經常碰到需要添加一個半透明的蒙版,比如各類提示彈窗等。

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];

}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章