暗黑模式(Dark Mode)是iOS13推出的新功能,並將傳統的UIColor升級成dynamicColor。TABAnimated在v2.2.3版本適配了暗黑模式,能夠實現自動轉換暗黑系骨架屏。git
TABAnimated的骨架層是用CALayer實現的,可是CGColorRef並不能成爲動態顏色,因此本文將講解TABAnimated是如何實現動態的CGColorRef,固然目前還有一種狀況沒法適配,後文會講到。github
包括四種動畫在內,多種應用場景,均以完美適配暗黑模式。 app
骨架層相關異步
動畫屬性相關工具
原則上什麼都不須要,可是背景顏色、內容顏色和各自產品有關,因此開放了對應屬性,其餘什麼都不須要作。動畫
以下圖,在已經切換暗黑模式後,進程卡片列表頁面沒有刷新,若是是UIColor系統會自動刷新,CGColorRef暫時沒有找到辦法處理。google
這裏涉及到蘋果自身對進程的處理,筆者查找了文檔,暫時沒有發現解決方案。3d
基本的動態UIColor集成方案就再也不過多贅述了,請讀者自行google瞭解。code
爲了適配動態顏色,我們先引入一個概念,哨兵視圖(筆者本身命名的)。cdn
咱們知道只有UIView、UIViewController、UIPresentationController才能監聽模式切換事件。
所以,TABAnimated會默認爲啓動視圖單元加入一個透明且隱藏的哨兵視圖,該視圖專門接收traitCollectionDidChange
事件,並異步發送給TABCompoentManager
- 骨架屏單元管理對象。
TABCompoentManager
會處理它管理的動畫組,更換顏色。
這個視圖其餘沒有任何做用。
實現細節不難,再也不不過多贅述,讀者能夠到github上了解更多信息。
apple自己是支持局部、全局禁用暗黑模式的,骨架屏一樣會跟隨你的禁用而禁用暗黑系骨架屏。因此對於骨架屏而言,除了配置顏色外,你不須要作任何其餘多餘的事情。