美文网首页iOS学习开发iOS Developer
iOS开发进阶 第十二章 UIWindow

iOS开发进阶 第十二章 UIWindow

作者: StrongX | 来源:发表于2016-12-18 01:25 被阅读332次

    在iOS应用中,我们使用UIWindow和UIView来呈现界面。UIWindow并不包含任何默认的内容,但是当他被当作UIView的容器,用于放置引用中所有的UIView。而每一个UIView通常都是用来表示具体的一部分界面,例如一段文字,一张图片等,当然,你也可以用UIView来当作其他容器UIView的容器。所以UIWindow更多的时候只作为UIView的顶级容器存在.

    ———以上摘抄自《iOS开发进阶》

    本章节较好的介绍了UIWindow的使用,算是唐巧大神的经验之谈。


    12.1UIWindow简介

    从继承关系上来看UIWindow继承自UIView,所以UIWindow包含所有UIView的功能,除此之外,还增加了一些特有的属性和方法。
    我们一定使用过UIWindow,最常见的用法就是在appdelegate中的didFinishLaunchingWithOptions方法中:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Override point for customization after application launch.
     
      _window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
      tabbarViewController *tabbar = [[tabbarViewController alloc]init];
      _window.rootViewController = tabbar;
      [_window makeKeyAndVisible];
       
      return YES;
    }
    

    UIWindwo的主要作用:

    • 作为UIView的 顶级容器,包含应用显示所需的所有UIView。
    • 传递触摸消息和键盘事件给UIView。

    12.2 为UIWindow增加UIView

    • UIWindwo是UIView的子类,所以你可以使用addsubview方法来为UIWindow添加UIView
    • 像我们上面在appdelegate中的didFinishLaunchingWithOptions方法中使用的一样,我们可以通过设置UIWindow的rootViewController
      来添加UIView,系统会自动将controller上的view添加到UIWindow上。

    12.3系统对UIWindow的使用

    在一个app中存在的UIWindow往往并不止一个,例如当使用UIAlertView(现已过期)时系统就是创建了一个UIWindow,并将UIWindowLevel设置的更高来保证UIWindow显示在最上层。

    [UIApplication sharedApplication].windows; //系统中所有的UIWindow的数组,排列为层次从低到高
    [UIApplication sharedApplication].keyWindow;  //当前活动的UIWindow
    

    12.3.1WindowLevel

    上文提到了UIWindow的层次问题,而这个属性是通过WindowLevel来描述的。这是一个CGFloat类型,在iOS中系统有三个常量:

    UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;  //0  默认值
    UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;   // 2000
    UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar __TVOS_PROHIBITED; // 1000
    

    当然事实上并不止这么几个值,你可以复制成你想要的值。

    12.3.2手动创建UIWindow

    书中有大片的示例代码(为什么给我滥竽充数的感觉),总结一下就是以下几个点:

    1、什么时候使用UIWindow?
    由于UIWindow的特性—显示在顶层,所以一般来说我们将会利用这个特性。比如说:密码输入界面(支付宝手势解锁)、应用介绍、弹出的banner、弹出的广告之类的。

    2、如何显示UIWindow?
    一般来说我们调用makeKeyAndVisible 这个方法来使UIWindow显示在应用顶层。
    事实上我们只需要将self.hidden=NO;就可以显示出UIWindow了,两个方法的区别就是上面那个方法同时设置了keyWindow

    3、如何移除UIWindow?

    _window.hidden = YES;
    _window = nil;
    

    12.3.3不要滥用UIWindow

    有的时候我们明显可以判断这个View属于某个controller的时候那么更适合将调用vc的addsubview方法来来实现显示。
    同事当UIWindow过多使用的时候,有时候我们很难管理每个Window的层次关系,从而导致希望显示到顶层UIWindow未能显示在顶层。


    更多文章

    欢迎加入iOS交流群537774852

    相关文章

      网友评论

        本文标题:iOS开发进阶 第十二章 UIWindow

        本文链接:https://www.haomeiwen.com/subject/nauamttx.html