UIWindow

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方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值