在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:llDark开源软件地址:https://gitee.com/internetWei/llDark开源软件介绍:LLDark适用于iOS的深色主题框架,快速简单的适配深色模式。 特性
Demo
用法前提配置深色资源:在工程任意NSObject分类(建议单独新建一个主题分类)中创建 + (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: 基本用法UIColor和CGColor只需要追加.themeColor(nil)即可。UIImage只需要将imageNamed或imageWithContentsOfFile替换为themeImage即可。 // UIColorUIColor.redColor; // 之前的用法UIColor.redColor.themeColor(nil); // 现在的用法// CGColorUIColor.redColor.CGColor; // 之前的用法UIColor.redColor.themeCGColor(nil); // 现在的用法// UIImage[UIImage imageNamed:@"lightImageName"]; // 之前的用法[UIImage themeImage:@"lightImageName"]; // 现在的用法 Tips: 高级用法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了解具体实现。11. 如果需要在iOS13以下系统支持适配深色启动图,请将深色图片按照指定规则命名并放置在工程任意目录下。命名规则:launchImage_<屏幕宽度>_<屏幕高度>。例如:launchImage_414_736,此深色启动图将会在iOS13以下系统并且屏幕宽高为414×736的机型切换至深色模式后出现。如果想适配横图只需要将宽高位置互换即可,例如:launchImage_736_414。具体效果可以在iOS13以下系统运行Demo并切换至深色模式查看。具体命名可以参考Demo工程中LaunchImage文件夹下的图片命名方式,它包含了所有iOS13以下机型的深色启动图(包括横屏,不包括iPhone6之前的机型)命名。12. LLLaunchScreen提供了一些类方法,合理的使用这些类方法可以完美替换APP的任意启动图,包含“深色竖屏启动图”、“深色横屏启动图”、“浅色竖屏启动图”、“浅色横屏启动图”。具体方法请查阅LLLaunchScreen.h文件。使用方法可参考Demo。 高级用法中第8条darkStyle方法的样例图(为了突出效果特意将饱合度和透明度调整的很低): 快速适配仅需要3步即可快速完美适配深色主题模式:
Tips:
安装CocoaPods
Carthage
手动安装
系统要求该项目最低支持iOS9.0和Xcode10.0,如果想在更低系统上使用可以联系作者。 注意点
已知问题
联系作者如果你有更好的改进,please pull reqeust me 如果你有任何更好的意见,请创建一个Issue 可以通过此邮箱联系作者 许可证LLDark 使用 MIT 许可证,详情见 LICENSE 文件。 |
请发表评论