【iOS開發(fā)-18】UIWindow和UIView是什么關(guān)系,隨著xcode版本增進(jìn)UIWindow不重要了嗎?求解答
來源:程序員人生 發(fā)布時(shí)間:2014-10-14 03:06:38 閱讀次數(shù):2147次
(1)因?yàn)閤code版本不同,最新的xcode已經(jīng)不提供我們老版本可以隨意創(chuàng)建的空白文檔了(而是純粹的什么都沒有的project,是的,什么都沒有),所以我們建立在單MVC模板之上,本例以及之前的所有的代碼都是在ViewController.m中書寫,而不是在AppDelegate.m中。所以我們這里的父視圖其實(shí)是self.view而不是self.window,所以這里我們講解的window其實(shí)在我們的模板里面只是view的子視圖。
(2)我們除了設(shè)置window對象的hidden屬性為NO之外,還要用self.view addSubView把它加載進(jìn)去,這樣我們的window才能顯示。
(3)而且,由此可知,有些針對window的層架的屬性操作,比如UIWindowLevelStatusBar其實(shí)不起效果了,因?yàn)閣indow的層級由父視圖self.view加載順序決定,后加載的在上面遮蓋其他視圖。
(4)以后,我們只能把UIWindow視圖當(dāng)做一個(gè)UIView的子視圖來運(yùn)用,并在app中進(jìn)行布局?或許暫時(shí)這是我們的猜測,繼續(xù)前進(jìn)。
(5)以前我們舉例都說,它本身是一個(gè)window,如果里面有個(gè)播放器,這個(gè)播放器也是一個(gè)window加載在上面的。現(xiàn)在我們貌似都是用view說事了。至于如何從UIWindow逐漸改變到UIView的網(wǎng)上答案也很少,估計(jì)在某些場合UIWindow還是有很大用處的。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
//
UIWindow *window1=[[UIWindow alloc]init];
UIWindow *window2=[[UIWindow alloc]init];
UIWindow *window3=[[UIWindow alloc]init];
window1.frame=CGRectMake(0, 0, 300, 300);
window1.backgroundColor=[UIColor grayColor];
window2.frame=CGRectMake(0, 0, 200, 400);
window2.backgroundColor=[UIColor greenColor];
window3.frame=CGRectMake(0, 0, 250, 200);
window3.backgroundColor=[UIColor redColor];
//window對象默認(rèn)是隱藏的,需要設(shè)置一下
window1.hidden=NO;
window2.hidden=NO;
window3.hidden=NO;
//設(shè)置window視圖的層級,無效。正常是Normal,一般狀態(tài)欄是UIWindowLevelStatusBar層,一般設(shè)置后悔遮蓋狀態(tài)欄,而UIWindowLevelAlert層級最高在最上面,但此處無效,因?yàn)槭羌虞d在self.view中的,所以由加載順序決定,其他設(shè)置都無效
window2.windowLevel=UIWindowLevelAlert;
window3.windowLevel=UIWindowLevelStatusBar;
//設(shè)置之后,當(dāng)然,需要加載進(jìn)來,由此可見,在這里UIView最大,其他的UIWindow都是它的子視圖
[self.view addSubview:window1];
[self.view addSubview:window2];
[self.view addSubview:window3];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
我們在AppDelegate中嘗試如下,沒有效果,也不影響其他:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIWindow *window4=[[UIWindow alloc]init];
window4.frame=CGRectMake(0, 0, 100, 80);
window4.backgroundColor=[UIColor purpleColor];
window4.hidden=NO;
window4.windowLevel=UIWindowLevelStatusBar;
[self.window addSubview:window4];
// Override point for customization after application launch.
return YES;
}
截個(gè)圖:

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈