您的位置:首页 > 产品设计 > UI/UE

UIWindow

2015-08-11 16:41 429 查看

UIWindow

标签(空格分隔): UI

UIWindow的显示

创建窗口(程序自动创建窗口)

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

self.window.backgroundColor = [UIColor redColor];


加载Main.storyboard,并且创建storyboard描述的控制器

UIViewController *rootVc = [[UIViewController alloc] init];


把storyboard描述的控制器作为窗口的根控制器

self.window.rootViewController = rootVc;


显示窗口(在程序启动完成的时候,仅仅只是帮你创建好窗口,并不会马上显示。)

窗口要显示出来必须的步骤

1.强引用窗口

2.设置窗口的尺寸

[self.window makeKeyAndVisible];


窗口的层级

self.window.windowLevel = 1000;


窗口的显示看窗口的层级高低

相同层级的窗口,后创建的显示

通过storyboard手动加载控制器

先把项目的Main Interface清空

/**
*  应用程序加载完成的时候调用
*/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

// 从storyboard加载控制器
UIStoryboard *sto = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

// 创建控制器
UIViewController *rootVc = [sto instantiateInitialViewController];
UIViewController *contr = [sto instantiateViewControllerWithIdentifier:@"VC"];
self.window.rootViewController = contr;

// 显示窗口
[self.window makeKeyAndVisible];

return YES;
}


通过Xib创建控制器

先把项目的Main Interface清空

新建Xib文件

在Xib文件中拖一个UIView

修改
File's Owner
的class为控制器的类名

需要把Xib上的View与控制器连线

// 创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

// 通过Xib创建控制器
UIViewController *rootVc = [[UIViewController alloc] initWithNibName:@"VC" bundle:nil];

self.window.rootViewController = rootVc;

// 显示窗口
[self.window makeKeyAndVisible];


控制器的View

假设通过Xib创建XMGViewController控制器对象

如果nibName为nil,首先会去查找
XMGView.xib
,如果有,就会去加载XMGView.xib描述的控制器的view

如果没有找到,就会去找
XMGViewController.xib
,如果有,也会去加载

都没有找到,就会
生成一个空的view


只要没有重写
loadView
,系统就会自动判断有没有storyboard或者xib描述控制器的View,如果有就会去加载它们描述控制器的view



生成的默认的空View,默认几乎透明(alpha = 0.01)

如果一个VIew完全透明,可以直接穿透,点击后面的东西

如果当前控制器是窗口的根控制器,可以不设置尺寸

打印控制器的View的真实尺寸,一般不会在viewDidLoad方法中打印,因为不准确

// 在这个方法中打印View的真实尺寸
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"%@",NSStringFromCGRect(self.view.frame));
}


控制器的view是延迟加载的:用到时再加载

可以用
isViewLoaded
方法判断一个UIViewController的view是否已经被加载

控制器的view加载完毕就会调用viewDidLoad方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: