IIDark :一款强大的深色主题框架

code小生 一个专注大前端领域的技术平台

公众号回复Android加入安卓技术群

作者 | 布多 
来源 | Github,点击阅读原文查看作者更多文章

适用于iOS的强大深色主题框架,快速适配深色模式。
国内用户可以访问这个链接 https://gitee.com/internetWei/llDark

特性

• 集成简单,只需改动少量代码即可完美适配。

• 高性能,仅在需要更新页面时更新指定页面,有相关缓存策略缩短刷新时长。

• 功能强大,所有使用UIColor、UIImage、CGColor的地方均可完美适配。

• 兼容iOS13以下机型。

• 支持从网络上获取深色主题配置。

• 自动适配启动图为APP当前主题模式。

Demo

用法

前提

配置深色资源:在工程任意NSObject分类(建议单独新建一个主题分类)中创建+ (NSDictionary<id, id> *)llDarkTheme类方法,字典的key表示浅色主题下的颜色/图片名称/图片地址,字典的value表示深色主题下的颜色/图片名称/图片地址。可参考样例代码:

+ (NSDictionary<id, id> *)llDarkTheme {
    return @{
             UIColor.whiteColor : kColorRGB(27, 27, 27),
             kColorRGB(240, 238, 245) : kColorRGB(39, 39, 39),
             [UIColor colorWithRed:14.0 / 255.0 green:255.0 / 255.0 blue:0.0 alpha:1.0] : [UIColor colorWithRed:0.0 green:14.0 / 255.0 blue:255.0 / 255.0 alpha:1.0],
             @"background_light" : @"background_dark",
             @"~/path/background_light.png" : @"~/path/background_dark.png",
    };
}

Tips:

1.不必把所有情况下的颜色/图片都填写进去,对于偶尔或少数使用到的深色颜色可以参考高级用法单独适配。
2.图片名称不用考虑倍图关系;如果填写的是图片路径一定要填写完整的图片路径(包含后缀)。

基本用法

UIColor和CGColor只需要追加.themeColor(nil)即可。
UIImage只需要将imageNamed或imageWithContentsOfFile替换为themeImage即可。

// UIColor
UIColor.redColor; // 之前的用法
UIColor.redColor.themeColor(nil); // 现在的用法

// CGColor
UIColor.redColor.CGColor; // 之前的用法
UIColor.redColor.themeCGColor(nil); // 现在的用法

// UIImage
[UIImage imageNamed:@"lightImageName"]; // 之前的用法
[UIImage themeImage:@"lightImageName"]; // 现在的用法

Tips:

1.themeImage适配了imageNamed和imageWithContentsOfFile两个方法,可以传递图片名称,也可以传递图片路径。
2.只有适配过的Color和Image在主题切换时才会刷新。

高级用法

1、themeColor()里面的参数如果是具体的Color对象,深色主题则会使用指定的Color对象刷新,
如果是nil则会返回llDarkTheme中配置的深色颜色刷新,
如果llDarkTheme未配置则会返回浅色主题下的颜色。

2、themeCGColor()参数的作用和themeColor()参数作用一样。

3、themeImage()有2个参数,参数可以是图片名称,也可以是图片地址,

第1个参数表示浅色主题下使用的图片(必填),
第2个参数表示深色主题下使用的图片(可以为空),
第2个参数为空的话和themeColor()为空的处理方式一样。

4、appearanceBindUpdater,所有继承自UIView的对象都拥有这个属性,对象需要刷新时会调用它,可以在这里实现自己的刷新逻辑。仅在需要刷新时会调用,主题更改不一定需要刷新UI。

5、userInterfaceStyle,类似iOS13系统的overrideUserInterfaceStyle方法,但是功能比overrideUserInterfaceStyle更加强大,它支持所有的对象,例如CALayer。它支持iOS13以下的系统使用。

6、themeDidChange,所有对象都拥有这个属性,作用和ThemeDidChangeNotification一样,themeDidChange会在对象释放时被释放掉,可以在多个地方使用,不保证回调顺序,不同于appearanceBindUpdater,只要主题发生改变就会调用themeDidChange。

7、systemThemeDidChange,所有对象都拥有这个属性,作用和SystemThemeDidChangeNotification一样,释放时机和themeDidChange一样,可以在多个地方使用,不保证回调顺序,只要系统主题发生改变就会调用systemThemeDidChange。

8、darkStyle,所有UIImageView对象都拥有这个方法,用于适配没有深色图片的图片对象,例如网络图片。darkStyle有3个参数,第1个参数决定如何适配深色主题,目前有LLDarkStyleSaturation和LLDarkStyleMask两种,
LLDarkStyleMask使用蒙层适配,LLDarkStyleSaturation通过降低原图饱合度适配。第2个参数决定蒙层透明度/饱合度值,具体使用可看源码注释。第3个参数可以为nil,使用LLDarkStyleSaturation时需要传递一个唯一字符串当做标识符,通常是图片的url。

样例代码:

UIImageView *imageView = [[UIImageView alloc] init];
NSString *url = @"图片URL";
imageView.darkStyle(LLDarkStyleSaturation, 0.2, url);
// imageView.darkStyle(LLDarkStyleMask, 0.5, nil);

9、updateDarkTheme:,如果需要运行时修改深色主题配置信息,或者需要从网络上获取深色主题配置信息,可以使用updateDarkTheme:来达到目的。请确保在第1个UI对象加载前配置好深色主题信息,否则会无效。

样例代码:

NSDictionary *darkTheme = @{
    UIColor.whiteColor : kColorRGB(27, 27, 27),
    kColorRGB(240, 238, 245) : kColorRGB(39, 39, 39),
    [UIColor colorWithRed:14.0 / 255.0 green:255.0 / 255.0 blue:0.0 alpha:1.0] : [UIColor colorWithRed:0.0 green:14.0 / 255.0 blue:255.0 /  255.0 alpha:1.0],
    @"background_light" : @"background_dark",
    @"~/path/background_light.png" : @"~/path/background_dark.png",
};
[LLDarkSource updateDarkTheme:darkTheme];

10、thirdControlClassName,如果需要支持第3方控件的刷新方法,可以在appearanceBindUpdater中单独实现刷新逻辑,也可以按照如下方法实现刷新逻辑,更加推荐如下方法。首先需要实现thirdControlClassName这个类方法,并返回一个数组,数组包含第3方控件的类名字符串。然后实现refresh+类名字符串的对象方法,在方法里实现第3方控件的刷新逻辑,可以参考LLThird.m文件中已经实现的YYLabel的刷新逻辑。详情可以下载工程查看Demo了解具体实现。

高级用法中第8条darkStyle方法的样例图(为了突出效果特意将饱合度和透明度调整的很低):

快速适配

仅需要3步即可快速完美适配深色主题模式,经测试大部分工程都能在0.5天内适配完成,少量工程1天内适配完成,极少需要1天以上的工作量进行适配。

1、配置深色主题资源,可参考前提,也可以参考高级方法9从网络中获取资源适配。

2、将需要适配的Color和Image适配为主题Color和主题Image,适配方法可参考基础用法高级用法

3、运行工程,检查完整性。

Tips:
如果您还需要适配WKWebView,可以点击链接参考文章进行适配。

安装

CocoaPods

1、将 cocoapods 更新至最新版本。

2、在 Podfile 中添加 pod 'LLDark'。

3、执行 pod install 或 pod update。

4、导入 。

手动安装

1、下载 LLDark 文件夹内的所有内容。

2、将 LLDark 工程中的LLDark文件夹添加(拖放)到你的工程。

3、导入 "LLDark.h"。

系统要求

该项目最低支持iOS9.0和Xcode10.0,如果想在更低系统上使用请联系作者。

注意点

• 需要自己监听主题模式修改状态栏颜色。

已知问题

• 需要适配深色主题的图片资源请不要放在Assets.xcassets中,否则可能会获取不到。

• 暂时不支持其他主题模式,后续会支持多种主题自由搭配。


推荐阅读
记录瀑布流布局遇到的一个坑

用鸿蒙 2.0 beta 版写了一个物联网应用手机APP

iOS 14 从 Android 中"窃取" 了这 8 个有用的功能


如果你有写博客的好习惯
欢迎投稿

就差您点一下了 ????????????

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值