#import <UIKit/UIKit.h>@interface UIColor (DarkColorChange)/*** 十六进制字符串** @param color 16进制色值 支持@“#123456”、 @“0X123456”、 @“123456”三种格式**/+ (UIColor *)colorWithHexString:(NSString *)color;/*** 十六进制字符串 透明度** @param color 16进制色值 支持@“#123456”、 @“0X123456”、 @“123456”三种格式* @param alpha 透明度**/+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;/*** 适配暗黑模式颜色 传入的UIColor对象** @param lightColor 普通模式颜色* @param darkColor 暗黑模式颜色**/+ (UIColor *)colorWithLightColor:(UIColor *)lightColor DarkColor:(UIColor *)darkColor;/*** 适配暗黑模式颜色 颜色传入的是16进制字符串** @param lightColor 普通模式颜色* @param darkColor 暗黑模式颜色**/+ (UIColor *)colorWithLightColorStr:(NSString *)lightColor DarkColor:(NSString *)darkColor;/*** 适配暗黑模式颜色 颜色传入的是16进制字符串 还有颜色的透明度** @param lightColor 普通模式颜色* @param lightAlpha 普通模式颜色透明度* @param darkColor 暗黑模式颜色透明度* @param darkAlpha 暗黑模式颜色**/+ (UIColor *)colorWithLightColorStr:(NSString *)lightColor WithLightColorAlpha:(CGFloat)lightAlpha DarkColor:(NSString *)darkColor WithDarkColorAlpha:(CGFloat)darkAlpha;@end
#import "UIColor+DarkColorChange.h"@implementation UIColor (DarkColorChange)/*** 十六进制字符串**/+ (UIColor *)colorWithHexString:(NSString *)color{return [self colorWithHexString:color alpha:1.0f];}/*** 十六进制字符串 透明度**/+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha{//删除字符串中的空格NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];// String should be 6 or 8 charactersif ([cString length] < 6){return [UIColor clearColor];}// strip 0X if it appears//如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾if ([cString hasPrefix:@"0X"]){cString = [cString substringFromIndex:2];}//如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾if ([cString hasPrefix:@"#"]){cString = [cString substringFromIndex:1];}if ([cString length] != 6){return [UIColor clearColor];}// Separate into r, g, b substringsNSRange range;range.location = 0;range.length = 2;//rNSString *rString = [cString substringWithRange:range];//grange.location = 2;NSString *gString = [cString substringWithRange:range];//brange.location = 4;NSString *bString = [cString substringWithRange:range];// Scan valuesunsigned int r, g, b;[[NSScanner scannerWithString:rString] scanHexInt:&r];[[NSScanner scannerWithString:gString] scanHexInt:&g];[[NSScanner scannerWithString:bString] scanHexInt:&b];return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha];}/*** 适配暗黑模式颜色 传入的UIColor对象**/+ (UIColor *)colorWithLightColor:(UIColor *)lightColor DarkColor:(UIColor *)darkColor{if (@available(iOS 13.0, *)) {return [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {return lightColor;} else {return darkColor;}}];} else {return lightColor ? lightColor : (darkColor ? darkColor : [UIColor clearColor]);}}/*** 适配暗黑模式颜色 颜色传入的是16进制字符串*/+ (UIColor *)colorWithLightColorStr:(NSString *)lightColor DarkColor:(NSString *)darkColor{return [UIColor colorWithLightColor:[UIColor colorWithHexString:lightColor] DarkColor:[UIColor colorWithHexString:darkColor]];}/*** 适配暗黑模式颜色 颜色传入的是16进制字符串 还有颜色的透明度**/+ (UIColor *)colorWithLightColorStr:(NSString *)lightColor WithLightColorAlpha:(CGFloat)lightAlpha DarkColor:(NSString *)darkColor WithDarkColorAlpha:(CGFloat)darkAlpha{return [UIColor colorWithLightColor:[UIColor colorWithHexString:lightColor alpha:lightAlpha] DarkColor:[UIColor colorWithHexString:darkColor alpha:darkAlpha]];}@end