欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UIWindow 知识梳理

程序员文章站 2022-03-30 09:04:14
...

UIWindow简介

在iOS开发中,UIWindow和UIView一样都是用来呈现界面的。UIWindow并不包含任何默认内容,但是它被当成UIView的容器存在。

UIWindow的作用:

  1. 作为UIView的最顶层容器,包含应用显示说需要的所有UIView
  2. 传递触摸事件

WindowLevel 属性

这个属性定义了UIWindow的层级。

这是一个 枚举:

  1. UIWindowLevelNormal = 0.000000
  2. UIWindowLevelStatusBar = 1000.000000
  3. UIWindowLevelAlert = 2000.000000

手工创建UIWindow

有些时候,我们也希望在应用开发中,将某些界面覆盖在所有界面的最上层。这个时候,我们就可以手工创建一个新的UIWindow。需要注意的是,和UIView创建不同,UIWindow一旦被创建,它就自动被添加到整个界面上了。

下面是示例代码:

#import "ViewController.h"

@interface ViewController ()
{
    UIWindow *window;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //set a button
    UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
    [self.view addSubview:button];
    button.frame = CGRectMake(100, 100, 20, 20);

    [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchDown];
}

- (void)buttonClick
{
    //set up window
    window = [[UIWindow alloc]initWithFrame:CGRectMake(10, 100, self.view.frame.size.width - 20, 400)];
    window.windowLevel = UIWindowLevelAlert;
    window.backgroundColor = [UIColor redColor];
    window.hidden = NO;
    
    //add hidden gesture
    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc]init];
    [gesture addTarget:self action:@selector(hideWindow)];
    [window addGestureRecognizer:gesture];
}

- (void)hideWindow
{
    window.hidden = YES;
    window = nil;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

当然 我们也可以在window上添加很多View,以实现弹出一个 优美的框。

甚至我们可以在每次应用退出有进入的时候加个密码页面。

只要如下:

 - (void)applicationDidBecomeActive:(UIApplication *)application
{
    //PasswordInputWindow是封装好了的密码页面
    //sharedInstance 单例获取
    //show 展示方法
    [[PasswordInputWindow sharedInstance] show];
}