iOS开发UIWindow和UIView是什么关系

来源:互联网 发布:淘宝 手机端 图片尺寸 编辑:程序博客网 时间:2024/04/25 09:20

转载自:http://blog.csdn.net/weisubao/article/details/39613579

(1)因为xcode版本不同,最新的xcode已经不提供我们老版本可以随意创建的空白文档了(而是纯粹的什么都没有的project,是的,什么都没有),所以我们建立在单MVC模板之上,本例以及之前的所有的代码都是在ViewController.m中书写,而不是在AppDelegate.m中。所以我们这里的父视图其实是self.view而不是self.window,所以这里我们讲解的window其实在我们的模板里面只是view的子视图。


(2)我们除了设置window对象的hidden属性为NO之外,还要用self.view addSubView把它加载进去,这样我们的window才能显示。


(3)而且,由此可知,有些针对window的层架的属性操作,比如UIWindowLevelStatusBar其实不起效果了,因为window的层级由父视图self.view加载顺序决定,后加载的在上面遮盖其他视图。


(4)以后,我们只能把UIWindow视图当做一个UIView的子视图来运用,并在app中进行布局?或许暂时这是我们的猜测,继续前进。


(5)以前我们举例都说,它本身是一个window,如果里面有个播放器,这个播放器也是一个window加载在上面的。现在我们貌似都是用view说事了。至于如何从UIWindow逐渐改变到UIView的网上答案也很少,估计在某些场合UIWindow还是有很大用处的。


[objc] view plaincopy
  1. #import "ViewController.h"  
  2.   
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8.   
  9. - (void)viewDidLoad {  
  10.     //  
  11.     UIWindow *window1=[[UIWindow alloc]init];  
  12.     UIWindow *window2=[[UIWindow alloc]init];  
  13.     UIWindow *window3=[[UIWindow alloc]init];  
  14.     window1.frame=CGRectMake(00300300);  
  15.     window1.backgroundColor=[UIColor grayColor];  
  16.     window2.frame=CGRectMake(00200400);  
  17.     window2.backgroundColor=[UIColor greenColor];  
  18.     window3.frame=CGRectMake(00250200);  
  19.     window3.backgroundColor=[UIColor redColor];  
  20.     //window对象默认是隐藏的,需要设置一下  
  21.     window1.hidden=NO;  
  22.     window2.hidden=NO;  
  23.     window3.hidden=NO;  
  24.     //设置window视图的层级,无效。正常是Normal,一般状态栏是UIWindowLevelStatusBar层,一般设置后悔遮盖状态栏,而UIWindowLevelAlert层级最高在最上面,但此处无效,因为是加载在self.view中的,所以由加载顺序决定,其他设置都无效  
  25.     window2.windowLevel=UIWindowLevelAlert;  
  26.     window3.windowLevel=UIWindowLevelStatusBar;  
  27.     //设置之后,当然,需要加载进来,由此可见,在这里UIView最大,其他的UIWindow都是它的子视图  
  28.     [self.view addSubview:window1];  
  29.     [self.view addSubview:window2];  
  30.     [self.view addSubview:window3];  
  31.   
  32.     [super viewDidLoad];  
  33.     // Do any additional setup after loading the view, typically from a nib.  
  34. }  
  35.   
  36. - (void)didReceiveMemoryWarning {  
  37.     [super didReceiveMemoryWarning];  
  38.     // Dispose of any resources that can be recreated.  
  39. }  
  40.   
  41. @end  

我们在AppDelegate中尝试如下,没有效果,也不影响其他:

[objc] view plaincopy
  1. @implementation AppDelegate  
  2.   
  3. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  4.     UIWindow *window4=[[UIWindow alloc]init];  
  5.     window4.frame=CGRectMake(0010080);  
  6.     window4.backgroundColor=[UIColor purpleColor];  
  7.     window4.hidden=NO;  
  8.     window4.windowLevel=UIWindowLevelStatusBar;  
  9.     [self.window addSubview:window4];  
  10.     // Override point for customization after application launch.  
  11.     return YES;  
  12. }  

截个图:


0 0
原创粉丝点击