UIWindow 知识梳理
程序员文章站
2022-03-30 09:04:14
...
UIWindow简介
在iOS开发中,UIWindow和UIView一样都是用来呈现界面的。UIWindow并不包含任何默认内容,但是它被当成UIView的容器存在。
UIWindow的作用:
- 作为UIView的最顶层容器,包含应用显示说需要的所有UIView
- 传递触摸事件
WindowLevel 属性
这个属性定义了UIWindow的层级。
这是一个 枚举:
- UIWindowLevelNormal = 0.000000
- UIWindowLevelStatusBar = 1000.000000
- 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];
}
上一篇: Vue中 的 watch