【iOS開發-18】UIWindow和UIView是什麼關係,隨著xcode版本增進UIWindow不重要了嗎?求解答,uiviewuiwindow
(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還是有很大用處的。
#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對象預設是隱藏的,需要設定一下 window1.hidden=NO; window2.hidden=NO; window3.hidden=NO; //設定window視圖的層級,無效。正常是Normal,一般狀態列是UIWindowLevelStatusBar層,一般設定後悔遮蓋狀態列,而UIWindowLevelAlert層級最高在最上面,但此處無效,因為是載入在self.view中的,所以由載入順序決定,其他設定都無效 window2.windowLevel=UIWindowLevelAlert; window3.windowLevel=UIWindowLevelStatusBar; //設定之後,當然,需要載入進來,由此可見,在這裡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;}
截個圖:
ios開發 在Xcode裡建立空工程,怎手動添加window 與 view ?
你的delegate已經產生的window,因此你就不需要mainWindow.xib了,你建立mainWindow.xib和直接用代碼產生window效果是一樣的,你要是要產生view的話直接添加UIViewController的類,帶不帶nib檔案看你自己的選擇,然後在delegate中產生UIViewController的執行個體,然後直接[self.window addSubview:viewController.view];就可以了。
當然你也可以手動建立空nib,然後指明它是哪個類,然後再添加相應的控制項,也是可以的。
希望能協助到你。
xcode 找不到window based application 是為何? 我的機器是獅子系統,開發工具是421目前最新的
xcode4.2沒有window based application工程的模版了,所以不能建立這種工程,你建立empty application就可以了。然後一切照舊就成了,我覺得xcode4.0以上就很少在xib檔案中操作了,慢慢習慣吧!希望對你有所協助。