UIWindow笔记

在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIView来呈现界面。UIWindow并不包含任何默认的内容,但是它被当作UIView的容器,用于放置应用中所有的UIView
从继承关系来看,UIWindow继承自UIView,所以UIWindow除了具有UIView的所有功能之外,还增加了一些特有的属性和方法,而我们最常用的方法,就是在App刚启动时,调用UIWindow的makeKeyAndVisible方法,代码如下:


- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

// Override point for customization after application launch.

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

MainNavigationController *VC = [MainNavigationController sharedMainNavigationController];

self.window.rootViewController= VC;

[self.windowmakeKeyAndVisible];

returnYES;

}

P.S:makeKeyAndVisible方法,从方法名字面上看有两层意思:让window成为key window,使得window可见。

总的来看,UIWindow的主要作用有:

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


为UIWindow增加UIView

通常我们有两种办法给UIWindow增加子UIView:

通过调用addSubView方法,因为UIWindow是UIView的子类,所以它可以使用UIView的addSubView方法给自己增加子UIView,从而承担容器的作用;

通过设置其特有的rootViewController属性。设置该属性后,UIWindow会自动将view controller的view添加到当前window中,同时负责维护view controller和view的生命周期。上述在application:didFinishLaunchingWithOptions:中使用的就是这种办法;


系统对UIWindow的使用

通常在一个程序中只会有一个UIWindow,但有些时候我们调用系统的控件(例如UIAlertView)时,iOS系统为了保证UIAlertView在所有的界面之上,它会临时创建一个新的UIWindow,通过将其UIWindowLevel设置更高,让UIAlertView盖在所有其他UI之上。


手工创建UIWindow

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

UIWindow应用

1、在app第一次启动打开指导页,一般可以使用UIWindow加载一个view来展现

2、自定义loading动画页面,

3、自定义UIAlterView或者UIActionSheet




imageNamed与imageWithContentsOfFile的区别

imageNamed会将加载到的image缓存处理,但是会增加内存压力

应用场景:图片多次加载的情况下,使用imageNamed方法加载,较为合理

imageWithContentsOfFile不会进行缓存处理,但是对内存相对友好

应用场景:图片加载一次,或者少数次数,比如第一次启动打开指导页等


在此基础上最近做了一个在keyWindow上加上的一个启动之后的引导页面demo,欢迎大家下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //设置尺寸为屏幕尺寸的时候self.window = [[UIWindow alloc] initWithFra...
    LuckTime阅读 838评论 0 0
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,542评论 1 14
  • 调用 setState 的时候,发生了什么? 在执行setState的时候,React Component将new...
    肆意木阅读 848评论 0 2
  • 问我最怕什么?我肯定说是麻烦,我觉得什么事情还是越简单越好,其实很多的事情,我们是有简单的办法的,但...
    Shopgirl阅读 267评论 0 0
  • 昨晚说好今早上我做饭,阗阗去遛狗,时间就能倒开去按时忙我的事情。阗阗游泳累的叫了几声起不了床,叫醒先生去遛狗,...
    丽萍在这阅读 91评论 4 2