暗黑模式(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自己是支持局部、全局禁用暗黑模式的,骨架屏一样会跟随你的禁用而禁用暗黑系骨架屏。因此对于骨架屏而言,除了配置颜色外,你不须要作任何其余多余的事情。