一些 iOS 對象的基本概念

原文鏈接:http://blog.csdn.net/jinnchang/article/details/44954803


1、前言

我們先來看一下這幾個概念的類繼承關係圖:

iOS 中,所有顯示在界面上的對象都是從 UIResponder 直接或間接繼承的。

2、應用程序(UIApplication)

一個 UIApplication 對象就代表一個應用程序。一個 iOS 程序啓動後創建的第一個對象就是 UIApplication 對象(只有一個),而且是單例的。如有需要,可以通過如下代碼獲取該單例對象:

[objc] view plaincopy
  1. [UIApplication sharedApplication]  

利用 UIApplication 對象,可以進行一些應用級別的操作。

[objc] view plaincopy
  1. // 設置應用圖標右上角的紅色提醒數字  
  2. [[UIApplication sharedApplication] setApplicationIconBadgeNumber:3];  
  3.   
  4. // 設置聯網指示器的可見性  
  5. [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];  
  6.   
  7. // 管理狀態欄  
  8. [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];  
  9.   
  10. // 發信息  
  11. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10010"]];  
  12.   
  13. // 打電話  
  14. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10010"]];  
  15.   
  16. // 發郵件  
  17. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]];  
  18.   
  19. // 打開一個網頁  
  20. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://blog.csdn.net/jinnchang"]];  
  21.   
  22. // 跳轉到 AppStore  
  23. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/qq/id444934666?mt=8"];  

3、視圖(UIView)

UIView 的實例即視圖,負責在屏幕上定義一個矩形區域,同時處理該區域的繪製和觸屏事件。視圖可以嵌套,也可以像圖層一樣進行疊加。像 UITableView、UIButton 等都是UIView 的子類。

4、窗口(UIWindow)

UIWindow 管理和協調應用程序的顯示,雖然 UIWindow 繼承自 UIView,但通常不直接操作 UIWindow 對象中與視圖相關的屬性變量。
iOS 程序啓動完畢後,創建的第一個視圖控件就是 UIWindow(創建的第一個對象是 UIApplication),接着創建控制器的 view,最後將控制器的 view 添加到 window 上,於是控制器的 view 就顯示在屏幕上了。一般情況下,應用程序只有一個 UIWindow 對象,即使有多個,也只有一個 UIWindow 可以接受到用戶的觸屏事件。

(1)自定義一個 window

[objc] view plaincopy
  1. self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];  

(2)設置 window 爲主窗口並顯示出來(view 不能憑空顯示,必須依賴 window)

[objc] view plaincopy
  1. [self.window makeKeyAndVisible];  

UIWindow 和 UIView 之間的關係也可以想象成這樣一個場景:首先會有一個空的畫框(UIWindow),我們在畫框上放置一塊畫布(UIView),然後可以在這個畫布上進行繪畫。畫布上可能會被畫上各種元素,例如 UILabel、UIButton 等,這些元素其實也是一個又一個 UIView,它們會有一個層級關係管理,有點類似於 Photoshop 中圖層的概念,層級高的元素會覆蓋住層級低的元素,從而導致層級低的元素被部分或完全遮擋。

5、屏幕(UIScreen)

通過這個類我們可以獲取一些關於屏幕的信息,通常用來獲取屏幕尺寸。

[objc] view plaincopy
  1. // 返回帶有狀態欄的 Rect  
  2. CGRect screenBounds = UIScreen.mainScreen.bounds;  
  3.       
  4. // 返回不含狀態欄的 Rect  
  5. CGRect applicationBounds = UIScreen.mainScreen.applicationFrame;  

6、視圖控制器(UIViewController)

視圖控制器管理 UIView 實例的生命週期及資源的加載與釋放、處理由於設備旋轉導致的界面旋轉、以及和用於構建複雜用戶界面的高級導航對象進行交互。

下圖展示了 UIView、UIWindow、UIScreen、UIViewController 之間的層級關係:


7、容器(Container)

一個 app 可能有很多的 UIViewController 組成,這時需要一個容器來對這些 UIViewController 進行管理。大部分的容器也是一個 UIViewController,如 UINavigationController、UITabBarController,也有少數不是 UIViewController,比如 UIPopoverController 等。
UINavigationController 繼承自 UIViewController,通常我們新建的工程是直接將視圖控制器添加到 window 上的,如果添加了 navigation 以後就多了一層。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章