快来体验你的暗黑模式骨架屏

前言

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

相关文章
相关标签/搜索