UIScreen(屏幕),UIWindow(窗口),UIView(視圖)是IOS的三個基本界面元素。
UIScreen為硬件設備的屏幕抽象,其中一個屬性是整個屏幕區(qū)域bounds。
UIWindow為內(nèi)容顯示提供背景平臺,ios一般只有一個UIWindows,UIView的子類,可以看成特殊的View.
UIView負責絕大部分的內(nèi)容描畫,并負責響應用戶的交互、管理子視圖。
1.UIScreenUIScreen類代表了屏幕,UIScreen一般也只是用來獲取屏幕大小。
如下例所示:
CGrect screenBounds = [[UIScreen mainScreen] bounds];//返回的是帶有狀態(tài)欄的Rect (0.0,0.0,320.0,480.0)
CGRect viewBounds = [[UIScreen mainScreen] applicationFrame];//不包含狀態(tài)欄的Rect(0.0,20.0,320.0,480.0)[iphone狀態(tài)欄高度20像素]
2.UIWindowiPhone應用程序通常只有一個窗口,表示為一個UIWindow類的實例。應用程序在啟動時(或者從nib文件進行裝載)創(chuàng)建這個窗口,并往窗口中加入一或多個視圖并顯示出來。之后我們很少需要再次引用它。UIWindow對象是所有UIView的根,管理和協(xié)調的應用程序的顯示。一般應用程序只有一個UIWindow對象,即使有多個UIWindow對象,也只有一個UIWindow可以接受到用戶的觸屏事件。在 IOS中,UIWindow對象并沒有像windows應用程序中常見的關閉框或標題欄這樣的部件,普通用戶不能直接對其進行關閉或其它操作。所有對窗口 的操作都需要通過其編程接口來實現(xiàn)。應用程序可以借助窗口對象來進行事件傳遞。窗口對象會持續(xù)跟蹤當前的第一響應者對象,并在UIApplication 對象提出請求時將事件傳遞它。在Mac OS X中,NSWindow的父類是NSResponder;而在iPhone OS中,UIWindow的父類是UIView。因此,UIWindow窗口在IOS中也是一個視圖對象。在 創(chuàng)建應用程序窗口時,應該總是將其初始的邊框尺寸設置為整個屏幕的大小。如果您的窗口是從nib文件裝載得到,Interface Builder并不允許創(chuàng)建比屏幕尺寸小的窗口;然而,如果您的窗口是通過編程方式創(chuàng)建的,則必須在創(chuàng)建時傳入期望的邊框矩形。除了屏幕矩形之外,沒有理 由傳入其它邊框矩形。
屏幕矩形可以通過UIScreen對象來取得,具體代碼如下所示:
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.window.rootViewController = viewController;//UIWindow有一個根視圖控制器—這個視圖控制器負責配置當窗體顯示時最先顯示的視圖。
[self.window makeKeyAndVisible];//這行代碼會讓包含了視圖控制器視圖的Window窗口顯示在屏幕上。
3.視圖UIView視圖是UIView類的實例,負責在屏幕上定義一個矩形區(qū)域。視圖在展示用戶界面及響應用戶界面交互方面發(fā)揮關鍵作用。每個視圖對象都要負責渲染視圖矩形區(qū)域中的內(nèi)容,并響應該區(qū)域中發(fā)生的操作事件。視圖是應用程序與用戶交互的重要機制。除 了顯示內(nèi)容和處理事件之外,視圖還可以用于管理一或多個子視圖。子視圖是指嵌入到另一視圖對象邊框內(nèi)部的視圖對象,而被嵌入的視圖則被稱為父視圖或超視 圖。視圖的這種布局方式被稱為視圖層次,一個視圖可以包含任意數(shù)量的子視圖,通過為子視圖添加子視圖的方式,視圖可以實現(xiàn)任意深度的嵌套。子視圖總是被顯 示在其父視圖的上方。每個父視圖都負責管理其直接的子視圖,根據(jù)需要調整它們的位置和尺寸,以及響應它們沒有處理的事件。在IOS中視圖和視圖控制器緊密協(xié)作,視圖控制器的作用是處理視圖的裝載與卸載、處理由于設備旋轉導致的界面旋轉,以及和用于構建復雜用戶界面的高級導航對象進行交互.