關于ios開發(fā)視圖的若干問題的探討

1.概念問題:

一.什么是UIApplication?PPT演示

注意:UIApplication不能手動創(chuàng)建,不能alloc init汰聋,一個應用程序只允許

一個门粪。

為什么要弄成單例,UIApplication對象是用來設置應用全局信息的烹困,一個

應用程序如果有很多UIApplication對象玄妈,都不知道聽誰的。

驗證:單例和不能alloc,init

2.UIApplication的作用:做應用級別的操作

2.1>設置應用圖標右上角的數(shù)字,圖標需要手動清除髓梅,應用程序關閉拟蜻,不

會自動清除.

applicationIconBadgeNumber

2.2>顯示聯(lián)網(wǎng)狀態(tài),告訴用戶此應用正在聯(lián)網(wǎng)networkActivityIndicatorVisible

2.3>打開一個資源3.URL:一個資源的唯一路徑

3.1>網(wǎng)絡資源URL的組成==協(xié)議頭://主機域名/路徑http://www.baidu.com/abc/1.png

3.2>本地資源URL的組成==協(xié)議頭:///路徑 本機域名可以不寫file:///User/apple/Desktop/1.png

4.UIApplication打開資源的好處:不用判斷用什么軟件打開,系統(tǒng)會自動根據(jù)協(xié)議頭判斷女淑。

5.UIApplication管理狀態(tài)欄.PPT演示

5.1> ios7默認交給控制器瞭郑,需要配置下,不交給控制器管理鸭你,就會交個UIApplication管理。

5.2>動畫隱藏狀態(tài)欄

5.3>動畫設置狀態(tài)欄樣式

二、UIApplication的Delegate

1.AppDelegate的作用:

?為什么要搞個AppDelegate袱巨,代理設計模式阁谆,有些事情自己不想處理,交

給別人處理

?怎么成為UIApplication的代理愉老,遵守協(xié)議场绿。

2.在哪設置UIApplication的代理,需要了解ios程序的啟動過程.

2.1>創(chuàng)建application,創(chuàng)建并且設置application的代理

2.2>開啟事件循環(huán)嫉入,不斷監(jiān)聽事件焰盗。如果產(chǎn)生系統(tǒng)事件,就會通知代

理咒林,其他事件熬拒,會找到一個最合適的視圖處理事件。2.3>只有應用程序關閉垫竞,才會結(jié)束程序

3.UIApplicationMain函數(shù):PPT演示

?注意UIApplicationMain函數(shù)會開啟一個事件循環(huán)澎粟,并不會馬上就執(zhí)行完

畢。

?底層做的事情欢瞪,創(chuàng)建UIApplication對象和UIApplicationDelegate對象,設置

UIApplication的代理活烙,開啟事件循環(huán),監(jiān)聽系統(tǒng)事件遣鼓。

3.1>delegateClassName不能傳nil,這里傳nil啸盏,意味著application沒有代理,就無法監(jiān)聽系統(tǒng)的事件骑祟,系統(tǒng)的事件都沒法監(jiān)聽宫补,窗口都不知道什么時候去加載,因為視圖都是懶加載的曾我,因此就不會創(chuàng)建窗口粉怕,什么東西都沒有。

3.2>principalClassName傳nil,默認是UIApplication抒巢,創(chuàng)建一個

UIApplication對象贫贝。

4.UIApplication代理的作用:處理系統(tǒng)事件,不是任何事件都交給他處理蛉谜,按

鈕點擊稚晚,屏幕點擊都不是他處理,是由UIApplication處理型诚。

2.1>加載完成客燕,初始化的操作

2.2>進入后臺:一般在這里保存應用的數(shù)據(jù)(游戲數(shù)據(jù),比如暫停游戲)

2.3>內(nèi)存警告:清空不必要的內(nèi)容

三狰贯、window:通常一個app只會有一個UIWindow對象也搓,但是可以創(chuàng)建多個赏廓,而iOS程序之所以能顯示到屏幕上就是因為UIWindow,即:IOS程序啟動完畢后傍妒,創(chuàng)建的第一個視圖控件就是UIWindow幔摸,接著創(chuàng)建控制器的view最后將控制器的view添加到了UIWindow上,于是控制器的view就顯示在了屏幕上颤练,自己創(chuàng)建窗口,窗口顯示出來既忆,兩個條件。1.makeKeyAndVisible2.窗口不要被釋放

注意:

1>keyWindow:makeKeyAndVisible會讓窗口成為主窗口嗦玖,并且顯示出來患雇,打印applic

2>創(chuàng)建的窗口交給windows這個數(shù)組管理: ?

○在創(chuàng)建一個窗口顯示出來,一個應用程序只有一個主窗口宇挫,并且顯示出來的窗口苛吱,application管理,application有個Windows數(shù)組捞稿,存放顯示出來的窗口又谋,有一個例外

態(tài)欄也是一個窗口,但是沒有交給application管理娱局。打印application.windows

3>還有那些是窗口?鍵盤也是窗口彰亥,創(chuàng)建一個textField成為第一響應者,并且加到最里

顯示在最前面衰齐,打印application.windows任斋,就知道了。

4>為什么他們會顯示在最前面耻涛,因為窗口有層級废酷,他們的層級高

5> windowLevel:UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert

UIWindowLevelNormal :默認窗口的層級UIWindowLevelStatusBar :狀態(tài)欄,鍵盤、UIWindowLevelAlert:UIActionSheet,UIAlearView

6>把window的層級設置為UIWindowLevelAlert抹缕,就會顯示在最前面澈蟆。


四.UITableView和UIButton的層級結(jié)構(gòu)(繼承關系),一直到 NSObject .

(1)UITableView -> UIScrollView -> UIView -> UIResponder -> NSObject

(2)UIButton -> UIControl -> UIView -> UIResponder -> NSObject


五.關于響應者對象:

概念:在iOS中不是任何對象都能處理事件卓研,只有繼承了UIResponder的對象才能接收并處理事件趴俘。這種有響應和處理事件的對象,我們稱之為“響應者對象”奏赘。UIApplication寥闪、UIViewController、UIView都繼承自UIResponder磨淌,因此它們都是響應者對象疲憋,都能夠接收并處理事件

響應者鏈的事件傳遞過程:(1)如果view的控制器存在,就傳遞給控制器梁只;如果控制器不存在缚柳,則將其傳遞給它的父視圖(2)在視圖層次結(jié)構(gòu)的最頂級視圖埃脏,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理(3)如果window對象也不處理喂击,則其將事件或消息傳遞給UIApplication對象(4)如果UIApplication也不能處理該事件或消息剂癌,則將其丟棄

六淤翔、關于view的幾個模糊點:

1翰绊、控制器的view的創(chuàng)建的決定權(quán):重寫loadView>storyboard>nibName>xib;

注意:loadView的使用方法

1> loadView作用:一般用來創(chuàng)建自定義的view

2> loadView什么時候調(diào)用:當控制器的view沒有創(chuàng)建的時候旁壮,就會調(diào)用loadView去創(chuàng)建控制器的view.

3> loadView使用注意:如果重寫loadView里面沒有創(chuàng)建控制器的view监嗜,就不能使

用self.view,會造成死循環(huán)。

2.控制器的view是透明的:直接通過alloc,init創(chuàng)建的控制器的view默認是透明的

七抡谐、關于storyboard控制器的創(chuàng)建:

怎么自己通過storyboard創(chuàng)建控制器(空項目)丰包,之前都是系統(tǒng)加載storyboard路翻,幫我們創(chuàng)建好控制器。

?了解UIStoryboard對象,通過這個對象释漆,就能加載storyboard文件

注意:必須要有storyboard,創(chuàng)建UIStoryboard對象才有意義痹栖,alloc init創(chuàng)

建UIStoryboard對象沒有意義

1.1>instantiateInitialViewController:默認加載箭頭指向的控制器

1.2>instantiateViewControllerWithIdentifier:根據(jù)標識在storyboard查找

控制器辣恋,并且創(chuàng)建。

○標識不能亂傳羔沙,會報錯的躺涝,必須storyboard有這個標識才行。

1.3>現(xiàn)在創(chuàng)建的控制器都不能處理事件扼雏,如果需要處理事件坚嗜,需要自定

義控制器。

現(xiàn)在創(chuàng)建的控制器為什么不能處理事件?

原因:當通過storyboardID找到storyboard中的控制器的時候诗充,就會

創(chuàng)建storyboard中描述的控制器對象苍蔬,創(chuàng)建對象首先得知道類名,

會根據(jù)storyboard中的Custom Class確定類名蝴蜓,然后創(chuàng)建對象碟绑,默認

都是系統(tǒng)自帶的對控制器對象,系統(tǒng)自帶的是不能處理事件的励翼。他

不能寫監(jiān)聽方法蜈敢。

八、關于控制器的生命周期方法:

1>演示導航控制器根控制器View的生命周期(viewDidLoad這些view開頭

的汽抚,稱為生命周期方法)

?通過view的生命周期方法抓狭,就知道控制器的view是懶加載的,導航

控制器有2個子控制器造烁,先會加載第一個子控制器的view否过,當Push

第二個的時候午笛,才去加載第二個控制器的view

2>didReceiveMemoryWarning,當控制器接收內(nèi)存警告的時候調(diào)用3>內(nèi)存警告?zhèn)鬟f過程:手機內(nèi)存不足產(chǎn)生事件->通知應用程序->調(diào)用應用程序代理方法->把事件傳遞給窗口->窗口傳給控制器->調(diào)用控制器內(nèi)存警告的方法苗桂。4>當控制器接收內(nèi)容警告药磺,會銷毀沒有顯示的控制器的view。5>調(diào)用viewWillUnload,viewDidUnload煤伟,銷毀控制器的view

6>viewDidUnload里面一般清空顯示在view里面的數(shù)據(jù),演示非arc開發(fā)

?為什么要清空顯示view的數(shù)據(jù):展示數(shù)據(jù)的view都不存在了癌佩,這些

數(shù)據(jù)也就沒有用處了,因為數(shù)據(jù)主要是用來展示在view上的便锨。

setDatas:(NSArray*)datas围辙;

?建議使用nil,清空數(shù)據(jù)放案,在非arc和arc都通用姚建。arc是不能使用release,而且非arc,self.datas = nil;做的事情更多吱殉。

7>didReceiveMemoryWarning會導致viewDidLoad重新調(diào)用掸冤。

○當收到內(nèi)存警告,導航控制器的子控制器的view有可能被干掉友雳,他

如果沒有顯示的話稿湿,當下次使用這個控制器的時候就會調(diào)用。

具體而言:

- (void)init; // 創(chuàng)建

- (void)loadView; //?構(gòu)建視圖層級結(jié)構(gòu)

- (void)viewDidLoad; //?視圖完成加載

- (void)viewWillAppear:(BOOL)animated; //?視圖將要出現(xiàn)在屏幕上

- (void)viewWillLayoutSubviews; //?視圖將要布局子視圖沥阱,用代碼調(diào)整控件布局才會使用

- (void)viewDidLayoutSubviews; //?視圖布局子視圖完成

- (void)viewDidAppear:(BOOL)animated; //?視圖完成顯示缎罢,視圖已經(jīng)出現(xiàn)在屏幕上

- (void)viewWillDisappear:(BOOL)animated; //?視圖將要從屏幕上消失

- (void)viewDidDisappear:(BOOL)animated; //?視圖已經(jīng)從屏幕上消失

- (void)dealloc; //?釋放視圖控制器

九、導航控制器的使用

3.0>學一個新的控制器考杉,先學他內(nèi)部的結(jié)構(gòu)和他的作用

? UINavgationViewController的內(nèi)部結(jié)構(gòu)(導航條策精,導航控制器的

view,存放導航控制器子控制器的view)

3.1>怎么添加導航控制器的子控制器崇棠,push,或者一創(chuàng)建的時候就給一個根控制器咽袜,默認第一個子控制器叫根控制器。

3.2>怎么管理很多子控制器?push很多控制器就OK了,不要一下子push很多子控制器枕稀,跳轉(zhuǎn)控制器的權(quán)利應該交給用戶询刹,由用戶決定進入那個界面。

3.3>通常開發(fā)中是給某個控制器添加導航功能萎坷,是點擊某個控制器中的

控件凹联,導航到另外一個控制器

?因此一開始只需要顯示導航控制器的根控制器就好,具體需不需要

導航哆档,由用戶決定蔽挠,如果需要導航,就點擊跟控制器的按鈕瓜浸。

?導航控制器的作用:用來做導航功能澳淑,一個控制器如果想擁有導航

功能比原,就包裝成導航控制器。

4> UINavgationViewController子控制器管理原理

4.1>導航控制器是通過棧管理子控制器杠巡,PPT分析量窘,棧是先進后出4.2> push把控制器壓入棧,然后創(chuàng)建控制器的view氢拥,把控制器的view在添加到導航控制器上

4.3>什么是棧頂和棧底控制器,棧底也叫導航控制器的根控制器蚌铜。

4.4>顯示到導航控制器的永遠是棧頂控制器的view,棧底控制器的view不會被銷毀兄一,只是移除父視圖厘线。4.5>點擊返回识腿,移除棧頂控制器出革,移除的控制器會被銷毀

5.導航控制器出棧操作

?首先了解topViewController和viewControllers和childViewControllers,出棧

的時候可能用到渡讼。

5.0. topViewController獲取棧頂控制器骂束。

5.1 viewControllers和childViewControllers:壓入棧的控制器都會作為導航控制器的子控制器。

5.2通過pop手動出棧成箫,之前都是點擊back自動出棧展箱。

5.3主動出棧,要求出棧的控制器必須是棧里面的控制器蹬昌,不能自己創(chuàng)建

一個控制器出棧混驰,會報出棧的控制器不存在的錯誤,這時候可以用

viewControllers或者childViewControllers拿到根控制器皂贩。

5.4 pop控制器栖榨,不會馬上銷毀棧頂控制器,而是告訴導航控制器需要把

棧頂控制器出棧明刷,等到恰當?shù)臅r間就會把棧頂控制器出棧婴栽,并且銷

5.2通過pop手動出棧,之前都是點擊back自動出棧辈末。

5.3主動出棧愚争,要求出棧的控制器必須是棧里面的控制器,不能自己創(chuàng)建

一個控制器出棧挤聘,會報出棧的控制器不存在的錯誤轰枝,這時候可以用

viewControllers或者childViewControllers拿到根控制器。

5.4 pop控制器组去,不會馬上銷毀棧頂控制器鞍陨,而是告訴導航控制器需要把

棧頂控制器出棧,等到恰當?shù)臅r間就會把棧頂控制器出棧添怔,并且銷

毀湾戳。(斷點演示)

6.設置導航條的內(nèi)容

6.1>一個導航控制器只有一個導航條,子控制器共用一個導航條贤旷。

6.2>如何設置導航條的內(nèi)容,導航條的內(nèi)容由棧頂控制器的navigationItem決定砾脑,因此導航控制器必須要有一個根控制器幼驶,本身不具備完整的顯示功能,因為他的導航條他自己不能決定韧衣。

6.3>設置one控制器的導航條標題盅藻,顯示one的時候,one就是棧頂控制

器畅铭,直接拿到navigationItem設置title.或者self.title

6.4設置navigationItem的titleView為UISegmentedControl氏淑,不需要設置位置,只需要設置尺寸硕噩。

6.5設置導航條左右兩邊按鈕假残,按鈕必須是

UIBarButtonItem.leftBarButtonItem,rightBarButtonItem,rightBarButtonItems

6.6導航條上的返回按鈕由上一個控制器決定炉擅。

1>如果上一個控制器沒有設置標題辉懒,默認back

2>如果上一個控制器設置標題,并且沒有超過12個字符谍失,默認返

回標題和上一個控制器一致眶俩,如果超過12個字符,就會變成back快鱼。

3>還可以主動直接設置下一個界面的返回按鈕颠印,設置上一個控制

器的backBarButtonItem屬性

7.驗證導航條的frame和導航控制器的內(nèi)部結(jié)構(gòu),用一個UIView的分類抹竹。

1>導航條的的高度是44

2>利用UIView的分類线罕,生成導航控制器view的內(nèi)部結(jié)構(gòu)的xml,寫入桌面柒莉。

3> ios6和ios7導航控制器的區(qū)別闻坚。

8.導航控制器-利用storyboard創(chuàng)建

8.1>程序一啟動,就加載導航控制器兢孝,設置storyboard箭頭指向?qū)Ш娇刂破?/p>

8.2>設置導航控制器的根控制器為UIViewController

8.3>設置導航條的內(nèi)容窿凤,還有下一個控制器的返回按鈕

8.4>利用storyboard做跳轉(zhuǎn),選中按鈕拖線

8.5>利用按鈕跨蟹,回到上一個控制器雳殊,不能回拖,會新創(chuàng)建一個控制器窗轩,

只能通過代碼夯秃。

UIView的常見屬性:

1. 頭UIView的設定

frame由系統(tǒng)決定- (UIView*) tableView …..viewforHeader…

2. 更改按鈕中內(nèi)部控件的位置

//關鍵:想更改內(nèi)部控件的位置,先更改按鈕水平方向上顯示的方式

self.btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

3. 不能響應交互的幾種情況

3.1? alpha < 0.01的時候,就不可以被點擊了

3.2 hidden屬性 為YES

3.3 自身的 userInterAction被設置為了NO

3.4? 父控件的userInterAction 設置為了NO

一個控件的事件響應,通常是先有它父控件獲取到,如果子控件響應了,就結(jié)束,未響應就會傳遞給它的父控件

3.5 子控件超出父控件的部分,不可被點擊

4. 圖片變形問題

//變形self.btn.imageView.contentMode = UIViewContentModeCenter;

//取消系統(tǒng)默認截取子控件的功能self.btn.imageView.clipsToBounds = NO;

UIImageView.contentMode屬性->拉伸方式分兩種

UIViewContentModeScaleAspectFit,? ? ? 只有有一個條件滿足就不拉伸了

UIViewContentModeScaleAspectFill,? ? 必須兩個條件都滿足

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仓洼,更是在濱河造成了極大的恐慌介陶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件色建,死亡現(xiàn)場離奇詭異哺呜,居然都是意外死亡,警方通過查閱死者的電腦和手機箕戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門某残,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陵吸,你說我怎么就攤上這事玻墅。” “怎么了壮虫?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵澳厢,是天一觀的道長。 經(jīng)常有香客問我旨指,道長赏酥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任谆构,我火速辦了婚禮,結(jié)果婚禮上框都,老公的妹妹穿的比我還像新娘搬素。我一直安慰自己,他們只是感情好魏保,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布熬尺。 她就那樣靜靜地躺著,像睡著了一般谓罗。 火紅的嫁衣襯著肌膚如雪粱哼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天檩咱,我揣著相機與錄音揭措,去河邊找鬼。 笑死刻蚯,一個胖子當著我的面吹牛绊含,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播炊汹,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼躬充,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起充甚,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤以政,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伴找,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙蔗,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年疆瑰,在試婚紗的時候發(fā)現(xiàn)自己被綠了眉反。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡穆役,死狀恐怖寸五,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耿币,我是刑警寧澤梳杏,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站淹接,受9級特大地震影響十性,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塑悼,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一劲适、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厢蒜,春花似錦霞势、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巷屿,卻和暖如春固以,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘱巾。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工憨琳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浓冒。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓栽渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稳懒。 傳聞我的和親對象是個殘疾皇子闲擦,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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