【code_hyy_基礎(chǔ)】UIWindow瞬雹,UIView,UIViewController刽虹,UIApplication酗捌,UIResponder, UIScreen的父類是什么

1涌哲、前言

我們先來看一下這幾個概念的類繼承關(guān)系圖:


image

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

2阀圾、應(yīng)用程序(UIApplication)

一個 UIApplication 對象就代表一個應(yīng)用程序哪廓。一個 iOS 程序啟動后創(chuàng)建的第一個對象就是 UIApplication 對象(只有一個),而且是單例的初烘。
如有需要涡真,可以通過如下代碼獲取該單例對象:

1.  let app = UIApplication.sharedApplication()

利用 UIApplication 對象,可以進行一些應(yīng)用級別的操作肾筐。
(1)設(shè)置應(yīng)用圖標右上角的紅色提醒數(shù)字

app.applicationIconBadgeNumber = 3

(2)設(shè)置聯(lián)網(wǎng)指示器的可見性

app.networkActivityIndicatorVisible = true 

(3)管理狀態(tài)欄

     app.setStatusBarStyle(UIStatusBarStyle.Default, animated: true)  
    app.setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade)  

(4)openURL 方法

 // 發(fā)信息  
app.openURL(NSURL(string: "sms://10010")!)  
  
// 發(fā)郵件  
app.openURL(NSURL(string: "mailto://jinnchang@126.com")!)  
  
// 打開一個網(wǎng)頁  
app.openURL(NSURL(string: "http://blog.csdn.net/jinnchang")!)  
  
// 跳轉(zhuǎn)到 AppStore  
app.openURL(NSURL(string: "https://itunes.apple.com/cn/app/qq/id444934666?mt=8")!) 

3哆料、視圖(UIView)

UIView 的實例即視圖,負責在屏幕上定義一個矩形區(qū)域吗铐,同時處理該區(qū)域的繪制和觸屏事件东亦。視圖可以嵌套,也可以像圖層一樣進行疊加唬渗。

4典阵、窗口(UIWindow)

UIWindow 管理和協(xié)調(diào)應(yīng)用程序的顯示,雖然 UIWindow 繼承自 UIView谣妻,但通常不直接操作 UIWindow 對象中與視圖相關(guān)的屬性變量。
iOS 程序啟動完畢后卒稳,創(chuàng)建的第一個視圖控件就是 UIWindow(創(chuàng)建的第一個對象是 UIApplication)蹋半,接著創(chuàng)建控制器的 view,最后將控制器的 view 添加到 window 上充坑,于是控制器的 view 就顯示在屏幕上了减江。一般情況下染突,應(yīng)用程序只有一個 UIWindow 對象,即使有多個辈灼,也只有一個 UIWindow 可以接受到用戶的觸屏事件份企。

(1)自定義一個 myWindow

     let myWindow = UIWindow(frame: UIScreen.mainScreen().bounds)  

(2)設(shè)置 myWindow 為主窗口并顯示出來(view 不能憑空顯示,必須依賴 window)

     myWindow.makeKeyAndVisible()  

UIWindow 和 UIView 之間的關(guān)系也可以想象成這樣一個場景:首先會有一個空的畫框(UIWindow)巡莹,我們在畫框上放置一塊畫布(UIView)司志,然后可以在這個畫布上進行繪畫。畫布上可能會被畫上各種元素降宅,例如 UILabel骂远、UIButton 等,這些元素其實也是一個又一個 UIView腰根,它們會有一個層級關(guān)系管理激才,有點類似于 Photoshop 中圖層的概念,層級高的元素會覆蓋住層級低的元素额嘿,從而導(dǎo)致層級低的元素被部分或完全遮擋瘸恼。

5、屏幕(UIScreen)

通過這個類我們可以獲取一些關(guān)于屏幕的信息册养,通常用來獲取屏幕尺寸东帅。

 // 返回帶有狀態(tài)欄的 Rect    
let screenBounds = UIScreen.mainScreen().bounds  
  
// 返回不含狀態(tài)欄的 Rect    
let viewBounds = UIScreen.mainScreen().applicationFrame 

6、視圖控制器(UIViewController)

視圖控制器管理 UIView 實例的生命周期及資源的加載與釋放捕儒、處理由于設(shè)備旋轉(zhuǎn)導(dǎo)致的界面旋轉(zhuǎn)冰啃、以及和用于構(gòu)建復(fù)雜用戶界面的高級導(dǎo)航對象進行交互。

下圖展示了 UIView刘莹、UIWindow阎毅、UIScreen、UIViewController 之間的層級關(guān)系:

image

想要完整了解 UIViewController 用法可以參考 Github 上關(guān)于 UIViewController 的示例:UIViewControllerSample

7点弯、導(dǎo)航控制器(UINavigationController)

在介紹 UINavigationController 之前先介紹另一個概念:容器(Container)扇调。一個 app 可能有很多的 UIViewController 組成,這時需要一個容器來對這些 UIViewController 進行管理抢肛。大部分的容器也是一個 UIViewController狼钮,如 UINavigationController、UITabBarController捡絮,也有少數(shù)不是 UIViewController熬芜,比如 UIPopoverController 等。
UINavigationController 繼承自 UIViewController福稳,通常我們新建的工程是直接將視圖控制器添加到 window 上的涎拉,如果添加了 navigation 以后就多了一層。

 import UIKit  
  
@UIApplicationMain  
class AppDelegate: UIResponder, UIApplicationDelegate {  
  
    var window: UIWindow?  
  
  
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {  
        // Override point for customization after application launch.  
          
        // 初始化 window  
        window = UIWindow(frame: UIScreen.mainScreen().bounds)  
        window?.backgroundColor = UIColor.grayColor()  
          
        // 初始化 navigationController  
        let viewController = ViewController(nibName: nil, bundle: nil)  
        let navigationController = UINavigationController(rootViewController: viewController)  
          
        // 設(shè)置 window 的根控制器為 navigationController  
        window?.rootViewController = navigationController  
          
        // 設(shè)置 window 為主窗口并顯示出來  
        window?.makeKeyAndVisible()  
          
        return true  
    }

以下是 UINavigationController 的結(jié)構(gòu)圖:

image

通過 UINavigationController 進行視圖切換的兩種常用方式:

(1)presentViewController

     // 向上彈出視圖  
    let firstViewController = FirstViewController(nibName: nil, bundle: nil)  
    self.navigationController?.presentViewController(firstViewController, animated: true, completion: nil)  

 // 退出視圖  
self.dismissViewControllerAnimated(true, completion: nil)

(2)pushViewController

     // 向左推出視圖  
    let secondViewController = SecondViewController(nibName: nil, bundle: nil)  
    self.navigationController?.pushViewController(secondViewController, animated: true);  

     // 退出視圖  
    self.navigationController?.popToRootViewControllerAnimated(true)  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鼓拧,隨后出現(xiàn)的幾起案子半火,更是在濱河造成了極大的恐慌,老刑警劉巖季俩,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钮糖,死亡現(xiàn)場離奇詭異,居然都是意外死亡酌住,警方通過查閱死者的電腦和手機店归,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赂韵,“玉大人娱节,你說我怎么就攤上這事〖朗荆” “怎么了肄满?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長质涛。 經(jīng)常有香客問我稠歉,道長,這世上最難降的妖魔是什么汇陆? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任怒炸,我火速辦了婚禮,結(jié)果婚禮上毡代,老公的妹妹穿的比我還像新娘阅羹。我一直安慰自己,他們只是感情好教寂,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布捏鱼。 她就那樣靜靜地躺著,像睡著了一般酪耕。 火紅的嫁衣襯著肌膚如雪导梆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天迂烁,我揣著相機與錄音看尼,去河邊找鬼。 笑死盟步,一個胖子當著我的面吹牛藏斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播却盘,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼狰域,長吁一口氣:“原來是場噩夢啊……” “哼窜觉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起北专,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旬陡,沒想到半個月后拓颓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡描孟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年驶睦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿醒。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡场航,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廉羔,到底是詐尸還是另有隱情溉痢,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布憋他,位于F島的核電站孩饼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏竹挡。R本人自食惡果不足惜镀娶,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揪罕。 院中可真熱鬧梯码,春花似錦、人聲如沸好啰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坎怪。三九已至罢坝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搅窿,已是汗流浹背嘁酿。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留男应,地道東北人闹司。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像沐飘,于是被迫代替她去往敵國和親游桩。 傳聞我的和親對象是個殘疾皇子牲迫,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容