LFLDarkModeKit 3.5.0

LFLDarkModeKit 3.5.0

dragonLi维护。



  • DevDragonli

LFLDarkModeKit

Adapter iOS DarkMode

适配支持 iOS 9.0+ 项目

  • 对于iOS 13+,跟随系统暗黑开关

    • 也支持自定义 APP 内开关,设置即可【参考下文说明】
  • 对于iOS 13以下,则默认Light模式

    • 也可以指定自定义模式,设置即可【参考下文说明】
  • 获取状态切换【模式切换检测】

CI Status Version License Platform

LFLDarkModeKit 详细信息

  • CGColor 静态变化解决方案
  • 常规项目的暗黑场景处理

通过 Apple API 适配说明

示例

要运行示例项目,请克隆仓库,然后首先从示例目录运行 pod install

安装

LFLDarkModeKit 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

  pod 'LFLDarkModeKit', '~> 3.2.0'

LFLDarkModeKit 详细信息

  • 布局类
.
├── Core
│   ├── LFLDarkModeManger.h
│   ├── LFLDarkModeManger.m
│   ├── UIColor+LFLDarkMode.h
│   ├── UIColor+LFLDarkMode.m
│   ├── UIView+LFLDarkMode.h
│   └── UIView+LFLDarkMode.m
├── LFLDarkModeKit.h
└── Tool
    ├── NSString+DarkModeKitBlank.h
    └── NSString+DarkModeKitBlank.m
    └── UIWindow+DarkModeKitKeyWondow.h
    └── UIWindow+DarkModeKitKeyWondow.m
  

项目创建源包

各项目自定义色值字符串映射对应颜色

  • 示例:@“PColor0” 在dark和light模式下分别对应不同的真实色值,一一映射,后续可支持新增模式

  • 示例:darkModeAdapterColor.bundle (颜色集合)

    • dark.plist
    • light.plist

配置暗模式颜色包URL

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
	 NSURL *darkModeBundleURL = [[NSBundle mainBundle] URLForResource:@"darkModeAdapterColor" withExtension:@"bundle"];
    [[LFLDarkModeManger sharedInstance] configDarkModeColorBundleURL:darkModeBundleURL];
    return YES;	
}

用户自定义模式 【可不跟随系统开关】

	  // 配置开启用户自定义开关模式
    [LFLDarkModeManger.sharedInstance configUserDarkMode:YES];

     // 获取当前用户自定义是否暗黑模式
    [LFLDarkModeManger.sharedInstance isUserDarkMode];

获取状态切换【模式切换检测】

  
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_darkModeNoti:) name:LFLDarkModeChangeNotification object:nil];
    
- (void)_darkModeNoti:(NSNotification *)noti {
NSDictionary *darkModeDic = noti.object;
NSLog(@"\n通知:暗黑模式切换检测%@",darkModeDic);
}

使用示例

// view
self.exampleLabel.textColor = [UIColor ColorAdpterWithHex:@"DEMO"];
  
// Imageview 
self.adapterImageView.image = [UIImage imageAdapterNamed:@"exampleImage"];

// Layer 
self.customView.layerBorderColorHex = @"DEMO";
	    

Apple API 项目适配器描述

全局关闭暗黑模式:在Info.plist文件中,添加UIUserInterfaceStyle键,命名为用户界面样式,值为String,将UIUserInterfaceStyle键的值设置为Light

图片适配器

  • 如果项目中需要适配暗黑模式的图片,可以在Assets.xcassets中设置,具体需要什么样式根据项目情况自行设置
    • 任意暗黑

UIColor

  • iOS13 API(当系统切换模式时,自动触发这两个方法以动态修改控件颜色)

+ (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchOS);

- (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);

CGColor

设置的CGColor不会动态改变,可以通过以下方案处理

如果适配CGColor,通常需要各自自定义view实现此函数再处理,相对较麻烦。


- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
    
if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
// Config  Color Adapter 
	}
}

  • performAsCurrent

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
 [self.traitCollection performAsCurrentTraitCollection:^{
    layer.backgroundColor = xxColor.CGColor;
}];
}
	

VC配置单样式

if (@available(iOS 13.0, *)) {
    
    [self setOverrideUserInterfaceStyle:UIUserInterfaceStyleDark];
    
} else {
    
}

xib / Story

  • 颜色集
    • 任意暗黑
    • [UIColor colorNamed:@"customBlueColor"]

NSAttributedString

 NSDictionary * attributeDic = @{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor xxColor]};
	

UIActivityIndicatorView

typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) {
	
    UIActivityIndicatorViewStyleMedium,
	
    UIActivityIndicatorViewStyleLarge,
	
    UIActivityIndicatorViewStyleWhiteLarge API_DEPRECATED_WITH_REPLACEMENT("UIActivityIndicatorViewStyleLarge",
	
    UIActivityIndicatorViewStyleWhite API_DEPRECATED_WITH_REPLACEMENT("UIActivityIndicatorViewStyleMedium",
	
    UIActivityIndicatorViewStyleGray API_DEPRECATED_WITH_REPLACEMENT("UIActivityIndicatorViewStyleMedium",
	
};
	

Life Style

  • UIView

    • traitCollectionDidChange(_:)
    • layoutSubviews()
    • draw(_:)
    • updateConstraints()
    • tintColorDidChange()
  • UIViewController

    • traitCollectionDidChange(_:)
    • updateViewConstraints()
    • viewWillLayoutSubviews()
    • viewDidLayoutSubviews()
  • UIPresentationController

    • traitCollectionDidChange(_:)
    • containerViewWillLayoutSubviews()
    • containerViewDidLayoutSubviews()

作者

[email protected]

许可

LFLDarkModeKit 遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。