iOS 圖形動(dòng)畫(huà)

https://developer.apple.com/library/content/navigation/index.html#section=Topics&topic=Graphics%20%26amp%3B%20Animation

  • CoreAnimation
  • CoreGraphic
  • OpenGL
  • Quartz

1. 離屏渲染

離屏渲染,通常是在GPU中處理;
設(shè)置 CALayer.shouldRasterize 屬性將離屏渲染;shouldRasterize =true將layer緩存為bitmap,適合不變的圖像處理扯旷;
出現(xiàn)離屏渲染的情形有:

  1. Core Graphic 的使用 CPU
  2. 使用drawRect CPU
  3. CALayers 的 shouldRasterize 屬性為 YES
  4. CALayers 使用 masksToBounds 和 shadow
  5. Any text including Core Text
  6. UIViewGroupOpacity
    離屏渲染offscreen會(huì)影響動(dòng)畫(huà)的性能,需要謹(jǐn)慎用之霸奕;
    可以使用Instruments在真機(jī)上檢測(cè)UI的哪部分是離屏渲染轴咱,Core Animation監(jiān)測(cè)(設(shè)置 Color Offscreen-Rendered Yellow 選中);

2. 界面流暢技巧

參考:http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/
CPU & GPU

image.png

iOS設(shè)備視頻輸出采用雙緩沖區(qū)+垂直同步( V-Sync信號(hào))剪廉,來(lái)保證畫(huà)面的流暢與完整性娃循;

  • 界面卡頓:
    CPU處理圖像提交給GPU變換、合成和渲染斗蒋,然后提交緩沖顯示捌斧,CPU或GPU任何一個(gè)在一個(gè)vSync信號(hào)道來(lái)前沒(méi)有將完整內(nèi)容提交,都會(huì)造成一幀圖像無(wú)法輸出泉沾,界面還是顯示之前的圖像捞蚂,這就是界面卡頓的原因;
  • CPU消耗:
    對(duì)象的創(chuàng)建跷究,可以對(duì)象可以復(fù)用姓迅,可放在一個(gè)緩存池中進(jìn)行復(fù)用;
    當(dāng)視圖層次調(diào)整時(shí)俊马,UIView與CALayer之間會(huì)出現(xiàn)很多方法調(diào)用與通知丁存,應(yīng)該避免調(diào)整視圖層次、添加和移除視圖柴我;
    大量的對(duì)象釋放解寝,放到后臺(tái)線(xiàn)程去執(zhí)行;
    視圖布局是APP最常見(jiàn)消耗CPU的地方艘儒,可以后臺(tái)線(xiàn)程提前計(jì)算好布局并進(jìn)行緩存聋伦,可極大提高性能夫偶;
    文本計(jì)算及渲染,可放到后臺(tái)線(xiàn)程嘉抓,使用CoreText繪制與緩存索守;
    圖片繪制,放到后臺(tái)線(xiàn)程處理抑片;
  • GPU消耗:
    文理渲染卵佛,短時(shí)間大量圖片顯示會(huì)導(dǎo)致GPU占用非常高而出現(xiàn)掉幀現(xiàn)象,所以要盡量減少短時(shí)間大量圖片的顯示敞斋,盡可能多張照片合成一張截汪;
    視圖混合,減少視圖數(shù)量及層次植捎,在不透明的視圖里面標(biāo)準(zhǔn)opaque以避免無(wú)用的alpha通道合成衙解;
    CALayer 的 border、圓角焰枢、陰影蚓峦、遮罩(mask),CASharpLayer 的矢量圖形顯示济锄,通常會(huì)觸發(fā)離屏渲染(offscreen rendering)暑椰,這些通常發(fā)生在GPU里;添加CALayer.shouldRasterize 屬性荐绝,但這會(huì)把原本離屏渲染的操作轉(zhuǎn)嫁到 CPU 上去一汽;

"ASDK(AsyncDisplayLink) 認(rèn)為,阻塞主線(xiàn)程的任務(wù)低滩,主要分為布局召夹、渲染及創(chuàng)建銷(xiāo)毀對(duì)象這三大類(lèi)。文本和布局的計(jì)算恕沫、渲染监憎、解碼、繪制都可以通過(guò)各種方式異步執(zhí)行婶溯,但 UIKit 和 Core Animation 相關(guān)操作必需在主線(xiàn)程進(jìn)行鲸阔。ASDK 的目標(biāo),就是盡量把這些任務(wù)從主線(xiàn)程挪走爬虱,而挪不走的隶债,就盡量?jī)?yōu)化性能。"

3. 自動(dòng)布局動(dòng)畫(huà)

需要用到 layoutIfNeeded來(lái)立馬刷新約束布局跑筝,不是等到下一個(gè)需要渲染的時(shí)候才刷新死讹;
使用Masonry:
mas_updateConstraints

參考:
https://robots.thoughtbot.com/designing-for-ios-graphics-performance
AsyncDisplayKit - facebook 保持界面流暢的庫(kù)

The End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曲梗,隨后出現(xiàn)的幾起案子赞警,更是在濱河造成了極大的恐慌妓忍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愧旦,死亡現(xiàn)場(chǎng)離奇詭異世剖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笤虫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)旁瘫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人琼蚯,你說(shuō)我怎么就攤上這事酬凳。” “怎么了遭庶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵宁仔,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我峦睡,道長(zhǎng)翎苫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任榨了,我火速辦了婚禮煎谍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阻逮。我一直安慰自己粱快,他們只是感情好秩彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布叔扼。 她就那樣靜靜地躺著,像睡著了一般漫雷。 火紅的嫁衣襯著肌膚如雪瓜富。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天降盹,我揣著相機(jī)與錄音与柑,去河邊找鬼。 笑死蓄坏,一個(gè)胖子當(dāng)著我的面吹牛价捧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涡戳,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼结蟋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了渔彰?” 一聲冷哼從身側(cè)響起嵌屎,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤推正,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宝惰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體植榕,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年尼夺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尊残。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淤堵,死狀恐怖夜郁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粘勒,我是刑警寧澤竞端,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站庙睡,受9級(jí)特大地震影響事富,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乘陪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一统台、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啡邑,春花似錦贱勃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至流部,卻和暖如春戚绕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枝冀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工舞丛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人果漾。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓球切,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绒障。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吨凑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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