CoreAnimation在渲染中充當?shù)慕巧?/h1>

CoreAnimation蚌斩,提供了高幀率和平滑的動畫,使CPU沒有負擔也沒有減慢你的應用程序范嘱。能夠完成繪制動畫的每一幀所需的大部分工作送膳。可以配置動畫參數(shù)丑蛤,比如開始點和結(jié)束點叠聋,然后Core animation完成其余的工作,將大部分工作交給專用的圖形硬件來加速渲染(GPU)

Core Animation位于AppKit和UIKit之下受裹,緊密集成到Cocoa和Cocoa Touch的視圖工作流中碌补。當然,Core Animation也有接口棉饶,可以擴展應用程序視圖所暴露的功能厦章,讓你對應用程序的動畫有更細粒度的控制

CoreAnimation位置

Core Animation,它本質(zhì)上可以理理解為一個復合引擎照藻,主要職責包含:渲染袜啃、構(gòu)建和實現(xiàn)動畫。

iOS渲染框架

從上圖可知App使用CoreGraphics,CoreAnimation,CoreImage來繪制可視化內(nèi)容幸缕,然后通過OpenGL ES/Metal啟動GPUDriver群发,進而啟動GPU,然后通過GPU渲染提交到屏幕展示

CoreAnimation,是一個復合引擎发乔,其職責是?盡可能快地組合屏幕上不同的可視內(nèi)容也物,這些可視內(nèi)容可被分解成獨立的圖層(即 CALayer),這些圖層會被存儲在一個叫做圖層樹的體系之中列疗。從本質(zhì)上而言,CALayer?是用戶所能在屏幕上看見的一切的基礎

CoreGraphics,?基于 Quartz 高級繪圖引擎浪蹂,主要用于運行時繪制圖像抵栈。開發(fā)者可以使用此框架來處理基于路徑的繪圖告材,轉(zhuǎn)換,顏色管理古劲,離屏渲染斥赋,圖案,漸變和陰影产艾,圖像數(shù)據(jù)管理疤剑,圖像創(chuàng)建和圖像遮罩以及 PDF 文檔創(chuàng)建,顯示和分析闷堡。當開發(fā)者需要在?運行時創(chuàng)建圖像?時隘膘,可以使用?Core Graphics?去繪制。與之相對的是?運行前創(chuàng)建圖像杠览,例如用 Photoshop 提前做好圖片素材直接導入應用弯菊。相比之下,我們更需要?Core Graphics?去在運行時實時計算踱阿、繪制一系列圖像幀來實現(xiàn)動畫

CoreImage,Core Image?與?Core Graphics?恰恰相反管钳,Core Graphics?用于在?運行時創(chuàng)建圖像,而?Core Image?是用來處理?運行前創(chuàng)建的圖像?的软舌。Core Image?框架擁有一系列現(xiàn)成的圖像過濾器才漆,能對已存在的圖像進行高效的處理。大部分情況下佛点,Core Image?會在 GPU 中完成工作醇滥,但如果 GPU 忙,會使用 CPU 進行處理


CoreAnimation渲染流水線

App本身并不負責渲染恋脚,渲染由獨立進程Render Server負責

首先腺办,App處理事件(HandleEvents:事件處理)

其次,App通過CPU完成對顯示內(nèi)容的計算(如:視圖創(chuàng)建糟描、布局怀喉、圖片解碼、文本繪制)

在完成以上兩步之后船响,App對圖層進行打包躬拢,在下一個Runloop到來時,將打包數(shù)據(jù)發(fā)送給Render Server(即:完成一次Commit Transaction)

Render Server主要執(zhí)行OpenGL见间、CoreGraphice程序聊闯,OpenGL調(diào)度GPU

GPU在物理層上完成渲染流程(頂點數(shù)組,頂點著色器米诉,片元著色器)

最后:等到下一個Runloop菱蔬,進行顯示


在實際開發(fā)過程中,通常會對界面渲染進行優(yōu)化(防止卡頓出現(xiàn)),卡頓的出現(xiàn)其實與渲染是息息相關(guān)的:

CPU完成對顯示內(nèi)容的計算(如:視圖創(chuàng)建拴泌、布局魏身、圖片解碼、文本繪制)后蚪腐,提交數(shù)據(jù)到GPU箭昵,GPU渲染完成后,將渲染結(jié)果放入到幀緩存區(qū)回季,視頻控制器讀取幀緩存區(qū)信息進行數(shù)模轉(zhuǎn)換(數(shù)字信號轉(zhuǎn)化為模擬信號)家制,逐行掃描視圖控制器從幀緩存區(qū)讀取數(shù)據(jù),然后顯示到屏幕

在這個過程通常會伴隨兩種情況泡一,圖片的撕裂與掉幀

撕裂產(chǎn)生原因

1颤殴、關(guān)于撕裂的理解,撕裂出現(xiàn)的是由于CPU和GPU在計算時瘾杭,有時間等待的诅病;幀緩沖區(qū)顯示的上半部分內(nèi)容是內(nèi)容,下半部分內(nèi)容是新內(nèi)容粥烁;為了解決撕裂贤笆,引入了垂直同步Vsync(相當于給幀緩存區(qū)加鎖,只有信號VSync信號到來時讨阻,圖片掃描完成)以及雙緩沖區(qū)

雙緩沖區(qū)

2芥永、關(guān)于掉幀的理解,掉幀實際上是重復渲染同一幀數(shù)據(jù)钝吮,啟用了垂直同步Vsync+雙緩存區(qū)解決撕裂問題埋涧,接受到垂直信號時,CPU/GPU還未準備好圖片數(shù)據(jù)奇瘦,視頻控制器拿不到FrameBuffer的數(shù)據(jù)棘催,導致掉幀

掉幀

推薦閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耳标,隨后出現(xiàn)的幾起案子醇坝,更是在濱河造成了極大的恐慌,老刑警劉巖次坡,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呼猪,死亡現(xiàn)場離奇詭異,居然都是意外死亡砸琅,警方通過查閱死者的電腦和手機宋距,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來症脂,“玉大人谚赎,你說我怎么就攤上這事淫僻。” “怎么了沸版?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵嘁傀,是天一觀的道長。 經(jīng)常有香客問我视粮,道長,這世上最難降的妖魔是什么橙凳? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任蕾殴,我火速辦了婚禮,結(jié)果婚禮上岛啸,老公的妹妹穿的比我還像新娘钓觉。我一直安慰自己,他們只是感情好坚踩,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布荡灾。 她就那樣靜靜地躺著,像睡著了一般瞬铸。 火紅的嫁衣襯著肌膚如雪批幌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天嗓节,我揣著相機與錄音荧缘,去河邊找鬼。 笑死拦宣,一個胖子當著我的面吹牛截粗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸵隧,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼绸罗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豆瘫?” 一聲冷哼從身側(cè)響起珊蟀,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靡羡,沒想到半個月后系洛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡略步,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年描扯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趟薄。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡绽诚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恩够,我是刑警寧澤卒落,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蜂桶,受9級特大地震影響儡毕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扑媚,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一腰湾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疆股,春花似錦费坊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至两残,卻和暖如春永毅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磕昼。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工卷雕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人票从。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓漫雕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親峰鄙。 傳聞我的和親對象是個殘疾皇子浸间,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360