第六章 用戶界面

6.1 視圖控制器

  • 創(chuàng)建視圖控制器基本的最佳實踐如下:

    1.保持VC輕量級肘迎,業(yè)務邏輯抽出

    2.VC中不應編寫動畫邏輯安皱,動畫邏輯放在動畫類中,將需要動畫的view傳入

    3.數(shù)據(jù)源房匆、業(yè)務分離,VC做連接的事情

    4.VC響應視圖的事件报亩,再進行相關的數(shù)據(jù)操作

    5.VC響應來自操作系統(tǒng)的UI相關事件浴鸿,如方向變換、內存警告

    6.當使用xib或者storyboard時弦追,init方法不會調用

    7.view抽離岳链,不要在VC中寫UI

    8.有時候可以抽離基礎VC,但要根據(jù)業(yè)務進行設計

    9.有些時候可以考慮使用category創(chuàng)建可復用代碼骗卜,避免形成過多繼承

6.1.1 視圖加載

  • loadView調用時機:每次訪問vc的view(vc.view宠页、self.view)并且view為nil的時候,就會被調用
  • 默認實現(xiàn)為[super loadView]寇仓,具體策略如下:

    1.如果在初始化UIViewController指定了xib文件名举户,就會根據(jù)傳入的xib文件名加載對應的xib文件
    [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    
    2.如果沒有找到相關聯(lián)的xib文件,就會創(chuàng)建一個空白的UIView遍烦,然后賦值給UIViewController的view屬性俭嘁,大致如下:
    [[ViewController alloc] init]; // 加載ViewController .xib  
    
    3.如果沒有找到相關聯(lián)的xib文件,就會創(chuàng)建一個空白的UIView服猪,然后賦值給UIViewController的view屬性供填,大致如下:
    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]];  
    
  • 在vc的生命周期中l(wèi)oadView在viewDidLoad前面
  • 如果loadView()方法沒有被override,則默認會生成一個白色背景罢猪、大小與屏幕一致的視圖賦值給該view屬性
  • 一般不必override loadView()方法近她;若override,則必須負責為view賦值
  • 若重寫了loadView膳帕,沒必要[super loadView]粘捎,因為[super loadView]默認會創(chuàng)建一個空白的UIView。我們既然要通過代碼來自定義UIView,那么就沒必要事先創(chuàng)建一個空白的UIView攒磨,以節(jié)省不必要的開銷泳桦。

6.1.2 視圖層級

  • 視圖結構和渲染步驟如下:

    1.構造子視圖

    2.計算并提供約束

    3.為子視圖遞歸執(zhí)行步驟1和步驟2

    4.遞歸渲染
  • iOS8.1-iPhone6,從視圖加載(initWithCoder:)到渲染(viewWillAppear:)之間的平均耗時300毫秒
  • viewDidAppear:會因為過渡動畫的原因在約300毫秒后會調用

6.1.3 視圖可見性

  • viewWillAppear:當視圖層級已經(jīng)準備好娩缰,且視圖即將放入視圖窗口時灸撰,此方法會被調用。這時視圖還處于不可見拼坎,不要進行動畫操作
  • viewDidAppear:當視圖出現(xiàn)浮毯,過渡動畫完成后,此方法會被調用
  • 當應用從后臺切入前臺時演痒,不會調用vc的生命周期相關方法亲轨,只會通知UIAppDelegate相關代理方法
  • 沒事盡量不要重寫loadView

6.2 視圖

  • 避免較大的xib趋惨、storyboard鸟顺,xml在真正加載之前會被i/o加載以及解析
  • view盡可能的延時加載,盡可能重用

6.2.1 UILabel

  • 使用字體器虾、字體類型以及要被渲染的文本時讯嫂,計算需要的像素數(shù)目。這是一個耗時操作
  • 檢查要被渲染的寬度
  • 檢查numberOfLines,計算將要展示的行數(shù)
  • sizeOfFit是否被調用兆沙,如果是欧芽,則計算高度
  • 如果sizeOfFit沒有被調用,檢查當前的內容能否在給定的高度下是否展示出來
  • 如果frame不夠葛圃,使用lineBreakMode確定隱藏或截斷的位置
  • 陰影千扔、對齊等配置項改動
  • 最后渲染
  • 尺寸計算需要在主線程完成

6.2.3 UIImageView

  • 盡量圖像尺寸和UIImageView保持一致,調整圖像大小是比較耗時的操作库正,如果包含在UIScrollView中,耗費更大

6.2.4 UITableView

  • 避免漸變、圖像縮放以及離屏渲染(圓角設置)皆看,這些都是相對耗時
  • 可以考慮一些小優(yōu)化入:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint velocity = [tableView.panGestureRecognizer velocityInView:self.view];
    self.velocity = velocity.y;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.velocity > 2000) {
        //預覽cell(內容簡單的)
    } else {
        //真正的cell
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末韭寸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子喷楣,更是在濱河造成了極大的恐慌趟大,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铣焊,死亡現(xiàn)場離奇詭異逊朽,居然都是意外死亡,警方通過查閱死者的電腦和手機曲伊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門叽讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事绽榛∈幔” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵灭美,是天一觀的道長推溃。 經(jīng)常有香客問我,道長届腐,這世上最難降的妖魔是什么铁坎? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮犁苏,結果婚禮上硬萍,老公的妹妹穿的比我還像新娘。我一直安慰自己围详,他們只是感情好朴乖,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著助赞,像睡著了一般买羞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雹食,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天畜普,我揣著相機與錄音,去河邊找鬼群叶。 笑死吃挑,一個胖子當著我的面吹牛,可吹牛的內容都是我干的街立。 我是一名探鬼主播舶衬,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼几晤!你這毒婦竟也來了约炎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蟹瘾,失蹤者是張志新(化名)和其女友劉穎圾浅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憾朴,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡狸捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了众雷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灸拍。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡做祝,死狀恐怖,靈堂內的尸體忽然破棺而出鸡岗,到底是詐尸還是另有隱情混槐,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布轩性,位于F島的核電站声登,受9級特大地震影響,放射性物質發(fā)生泄漏揣苏。R本人自食惡果不足惜悯嗓,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卸察。 院中可真熱鬧脯厨,春花似錦、人聲如沸坑质。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪乍。三九已至眯杏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壳澳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工茫经, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巷波,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓卸伞,卻偏偏與公主長得像抹镊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荤傲,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355