【iOS開發-18】UIWindow和UIView是什麼關係,隨著xcode版本增進UIWindow不重要了嗎?求解答,uiviewuiwindow

來源:互聯網
上載者:User

【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檔案中操作了,慢慢習慣吧!希望對你有所協助。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.