前言
暗黑模式适配主要是考虑三个部分
- 图片适配
- 颜色适配
- 封装基础组件用来监听暗黑模式的变化
一、图片适配
使用ImageSet
打开Assets.xcassets
-
新建一个Image set 选择右边栏的Appearances中对应的选项适配深色模式。
使用方法:[UIImage imageNamed:@"circle"];
当模式变化时,UIImage会动态的获取对应模式下的图片资源
二、颜色适配
- 使用ColorSet
- 打开Assets.xcassets
-
新建一个Color set 选择右边栏的Appearances中对应的选项适配深色模式。
- 使用方法:
self.view.backgroundColor = [UIColor colorNamed:@"testColor"]; - 同样当模式发生变化时,UIColor会动态的获取对应模式下的颜色
三、封装基础组件用来监听暗黑模式的变化
监听暗黑模式的变化主要是封装系统监听方法,主要分两种监听,可以根据实际情况进行选择使用。
(一)为NSObject对象添加监听回调
- 利用runtime为需要监听模式变化的obj对象添加一个监听模式变化的block回调,回调参数返回当前的模式标记
- 把该obj对象加入NSHashTable表中弱持有该对象
- 提前用runtime替换系统traitCollectionDidChange:方法,在替换的方法中判断当前暗黑模式是否发生改变以及当前的模式,然后在NSHashTable表中遍历每一个保存的obj对象,并且调用第一步中为之添加的block回调
-
obj对象可以在block带着模式参数回调回来后对obj对象进行适配操作,如下:
(二)新建UIColor的分类监听模式的改变
-
建一个UIColor的分类,在分类中根据系统监听回调colorWithDynamicProvider:方法,进行颜色匹配,如下:
-
使用时: