蘋果公司在iOS13推出了暗黑模式鳖孤,蘋果的建議是讓開發(fā)者盡快適配。前段時(shí)間微信就推出了暗黑模式抡笼。所以我們也需要盡快適應(yīng)苏揣。
這里也提供 禁用暗黑模式 的方法,請(qǐng)查看iOS開發(fā)小技巧第五條
直接看效果 Demo
暗黑模式適配
適配包含兩方面蔫缸,顏色適配和圖片適配腿准。接下來我們就這兩方面開始我們的適配之旅。
顏色適配
iOS13之后蘋果將UIColor改變成了動(dòng)態(tài)顏色拾碌,UIColor會(huì)根據(jù)不同模式來改變不同的顏色。蘋果提供給我們了一些系統(tǒng)顏色街望。這些顏色請(qǐng)參考UIIntercace.h這個(gè)類校翔。然而我們更在意的是我們自定義的顏色。系統(tǒng)給我們提供了兩個(gè)方法
+ (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider;
- (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider;
接下來是我自己對(duì)UIColor進(jìn)行的category灾前,這里提供了一些設(shè)置顏色的方法防症,請(qǐng)查看Demo
/// 十六進(jìn)制字符串獲取顏色
/// @param color 16進(jìn)制色值 支持@“#123456”、 @“0X123456”哎甲、 @“123456”三種格式
+ (UIColor *)colorWithHexString:(NSString *)color;
/// 十六進(jìn)制字符串獲取顏色
/// @param color 16進(jìn)制色值 支持@“#123456”蔫敲、 @“0X123456”、 @“123456”三種格式
/// @param alpha 透明度
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;
/// 適配暗黑模式顏色 傳入的UIColor對(duì)象
/// @param lightColor 普通模式顏色
/// @param darkColor 暗黑模式顏色
+ (UIColor *)colorWithLightColor:(UIColor *)lightColor DarkColor:(UIColor *)darkColor;
/// 適配暗黑模式顏色 顏色傳入的是16進(jìn)制字符串
/// @param lightColor 普通模式顏色
/// @param darkColor 暗黑模式顏色
+ (UIColor *)colorWithLightColorStr:(NSString *)lightColor DarkColor:(NSString *)darkColor;
/// 適配暗黑模式顏色 顏色傳入的是16進(jìn)制字符串 還有顏色的透明度
/// @param lightColor 普通模式顏色
/// @param lightAlpha 普通模式顏色透明度
/// @param darkColor 暗黑模式顏色透明度
/// @param darkAlpha 暗黑模式顏色
+ (UIColor *)colorWithLightColorStr:(NSString *)lightColor WithLightColorAlpha:(CGFloat)lightAlpha DarkColor:(NSString *)darkColor WithDarkColorAlpha:(CGFloat)darkAlpha;
具體用法如下:
//只需在給顏色賦值的時(shí)候指定不同模式下的顏色即可
self.customColorLabel.backgroundColor = [UIColor colorWithLightColorStr:@"226597" DarkColor:@"5ACFB1"] ;
Color Set 的使用
對(duì)于使用xib的童鞋來說炭玫,我們就只能使用color set顏色集了奈嘿。首先創(chuàng)建一個(gè)顏色集合接下來選擇Appearance選項(xiàng)中的Any,Dark模式就會(huì)出現(xiàn)兩個(gè)模式,我們?cè)O(shè)置這兩個(gè)模式的顏色值吞加,使用的時(shí)候直接使用我們自定義的顏色名稱(customBlueColor)就可以了
使用方法:
///用ColorSet 跟UIImage使用是類似的 把自定義的顏色名字寫入就行了
self.colorSetLabel.textColor = [UIColor colorNamed:@"customBlueColor"];
Layer層面上的Color適配
iOS13中UIColor是動(dòng)態(tài)變化的裙犹,但是對(duì)于CGColr,CALayer層面上的Color來說,還是只是單一顏色,我們只能在模式變化的時(shí)候的監(jiān)聽方法中適配衔憨。不過我們可以參考XYColor
/// 模式改變的回調(diào)代理
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{
[super traitCollectionDidChange:previousTraitCollection];
/**
*CGColor適配
*iOS13后叶圃,UIColor能夠表示動(dòng)態(tài)顏色,但是CGColor依然只能表示一種顏色践图。所以對(duì)于CALayer對(duì)象只能在traitCollectionDidChange方法中進(jìn)行改變
*/
if (@available(iOS 13.0, *)) {
if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
//修改label的邊框色
self.layerLabel.layer.borderColor = KTestColor.CGColor;
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
NSLog(@"************* iOS13 暗黑模式");
}else{
NSLog(@"############# iOS13 普通模式");
}
}
}
}
圖片適配
其實(shí)圖片適配跟Color Set設(shè)置是一樣
使用方法:
//圖片適配
self.appleImageView.image = [UIImage imageNamed:@"icon01"];
至此掺冠,我們的適配已經(jīng)結(jié)束。具體使用請(qǐng)查看Demo码党。以上有什么不對(duì)的地方歡迎各位童鞋的指正德崭,我們一起討論悍及。大家加油!=影心赶!