详解iOS设计中的UIWindow使用

每一个IOS程序都有一个UIWindow,在我们通过模板简历工程的时候,xcode会自动帮我们生成一个window,然后让它变成keyWindow并显示出来。这一切都来的那么自然,以至于我们大部分时候都忽略了自己也是可以创建UIWindow对象。

 

  通常在我们需要自定义UIAlertView的时候(IOS 5.0以前AlertView的背景样式等都不能换)我们可以使用UIWindow来实现(设置windowLevel为Alert级别),网上有很多例子,这里就不详细说了。

一、UIWindowLevel

 

  我们都知道UIWindow有三个层级,分别是Normal,StatusBar,Alert。打印输出他们三个这三个层级的值我们发现从左到右依次是0,1000,2000,也就是说Normal级别是最低的,StatusBar处于中等水平,Alert级别最高。而通常我们的程序的界面都是处于Normal这个级别上的,系统顶部的状态栏应该是处于StatusBar级别,UIActionSheet和UIAlertView这些通常都是用来中断正常流程,提醒用户等操作,因此位于Alert级别。

 

  上一篇文章中我也提到了一个猜想,既然三个级别的值之间相差1000,而且我们细心的话查看UIWindow的头文件就会发现有一个实例变量_windowSublevel,那我们就可以定义很多中间级别的Window。例如可以自定义比系统UIAlertView级别低一点儿的window。于是写了一个小demo,通过打印发现系统的UIAlertView的级别是1996,而与此同时UIActionSheet的级别是2001,这样也验证了subLevel的确存在。

   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert View"

message:@"Hello Wolrd, i'm AlertView!!!"

delegate:nil

cancelButtonTitle:@"OK"

otherButtonTitles:@"Cancel", nil];

[alertView show];

[alertView release];

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"ActionSheet"

delegate:nil

cancelButtonTitle:@"Cancel"

destructiveButtonTitle:@"Don't do that!"

otherButtonTitles:@"Hello Wolrd", nil];

[actionSheet showInView:self.view];

[actionSheet release];


  下面是程序运行截图:


根据window显示级别优先的原则,级别高的会显示在上面,级别低的在下面,我们程序正常显示的view位于最底层,至于具体怎样获取UIAlertView和UIActionSheet的level,我会在下面第二部分keyWindow中介绍并给出相应的代码。

UIWindow在显示的时候会根据UIWindowLevel进行排序的,即Level高的将排在所有Level比他低的层级的前面。下面我们来看UIWindowLevel的定义:

const UIWindowLevel UIWindowLevelNormal;    

const UIWindowLevel UIWindowLevelAlert;    

const UIWindowLevel UIWindowLevelStatusBar; 

以上是 详解iOS设计中的UIWindow使用 的全部内容, 来源链接: utcz.com/z/350001.html

回到顶部