快來體驗你的暗黑模式骨架屏

前言

暗黑模式(Dark Mode)是iOS13推出的新功能,並將傳統的UIColor升級成dynamicColor。TABAnimated在v2.2.3版本適配了暗黑模式,能夠實現自動轉換暗黑系骨架屏。git

TABAnimated的骨架層是用CALayer實現的,可是CGColorRef並不能成爲動態顏色,因此本文將講解TABAnimated是如何實現動態的CGColorRef,固然目前還有一種狀況沒法適配,後文會講到。github

先睹爲快

包括四種動畫在內,多種應用場景,均以完美適配暗黑模式。 app

工具箱切換.gif

setting設置切換.gif

新增屬性

骨架層相關異步

  • 全局的:darkAnimatedColor、darkAnimatedBackgroundColor
  • 局部的:darkAnimatedColor、darkAnimatedBackgroundColor

動畫屬性相關工具

  • shimmerBackColorInDarkMode
  • shimmerBrightnessInDarkMode
  • dropAnimationDeepColorInDarkMode

開發者須要作什麼?

原則上什麼都不須要,可是背景顏色、內容顏色和各自產品有關,因此開放了對應屬性,其餘什麼都不須要作。動畫

經過gif,你發現了什麼?

以下圖,在已經切換暗黑模式後,進程卡片列表頁面沒有刷新,若是是UIColor系統會自動刷新,CGColorRef暫時沒有找到辦法處理。google

這裏涉及到蘋果自身對進程的處理,筆者查找了文檔,暫時沒有發現解決方案。3d

卡片列表.png

適配方案

基本的動態UIColor集成方案就再也不過多贅述了,請讀者自行google瞭解。code

爲了適配動態顏色,我們先引入一個概念,哨兵視圖(筆者本身命名的)。cdn

咱們知道只有UIView、UIViewController、UIPresentationController才能監聽模式切換事件。

所以,TABAnimated會默認爲啓動視圖單元加入一個透明且隱藏的哨兵視圖,該視圖專門接收traitCollectionDidChange事件,並異步發送給TABCompoentManager - 骨架屏單元管理對象。

TABCompoentManager會處理它管理的動畫組,更換顏色。

這個視圖其餘沒有任何做用。

實現細節不難,再也不不過多贅述,讀者能夠到github上了解更多信息。

模式禁用

apple自己是支持局部、全局禁用暗黑模式的,骨架屏一樣會跟隨你的禁用而禁用暗黑系骨架屏。因此對於骨架屏而言,除了配置顏色外,你不須要作任何其餘多餘的事情。

相關文章
相關標籤/搜索