iOS13暗黑模式適配(項目開發版)

蘋果公司在iOS13推出了暗黑模式,蘋果的建議是讓開發者儘快適配。前段時間微信就推出了暗黑模式。所以我們也需要儘快適應。

直接看效果 Demo效果圖

暗黑模式適配

適配包含兩方面,顏色適配和圖片適配。接下來我們就這兩方面開始我們的適配之旅。

顏色適配

iOS13之後蘋果將UIColor改變成了動態顏色,UIColor會根據不同模式來改變不同的顏色。蘋果提供給我們了一些系統顏色。這些顏色請參考UIIntercace.h這個類。然而我們更在意的是我們自定義的顏色。系統給我們提供了兩個方法

+ (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider;
- (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider;

接下來是我自己對UIColor進行的category,這裏提供了一些設置顏色的方法,請查看Demo

/// 十六進制字符串獲取顏色
/// @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;

具體用法如下:

//只需在給顏色賦值的時候指定不同模式下的顏色即可
self.customColorLabel.backgroundColor = [UIColor colorWithLightColorStr:@"226597" DarkColor:@"5ACFB1"] ;

Color Set 的使用

對於使用xib的童鞋來說,我們就只能使用color set顏色集了。首先創建一個顏色集合
在這裏插入圖片描述
接下來選擇Appearance選項中的Any,Dark模式就會出現兩個模式,我們設置這兩個模式的顏色值,使用的時候直接使用我們自定義的顏色名稱(customBlueColor)就可以了
在這裏插入圖片描述
使用方法:

///用ColorSet 跟UIImage使用是類似的  把自定義的顏色名字寫入就行了
self.colorSetLabel.textColor = [UIColor colorNamed:@"customBlueColor"];

Layer層面上的Color適配

iOS13中UIColor是動態變化的,但是對於CGColr,CALayer層面上的Color來說,還是隻是單一顏色,我們只能在模式變化的時候的監聽方法中適配。不過我們可以參考XYColor

/// 模式改變的回調代理
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{
    [super traitCollectionDidChange:previousTraitCollection];
    /**
     *CGColor適配
     *iOS13後,UIColor能夠表示動態顏色,但是CGColor依然只能表示一種顏色。所以對於CALayer對象只能在traitCollectionDidChange方法中進行改變
    */
    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 普通模式");
            }
        }
    }
}

圖片適配

其實圖片適配跟Color Set設置是一樣
在這裏插入圖片描述
使用方法:

//圖片適配
self.appleImageView.image = [UIImage imageNamed:@"icon01"];

禁用暗黑模式

全局禁用
方法一:在info.plist中

<key>UIUserInterfaceStyle</key>
<string>Light</string>

方法二:
讓window的模式設爲一般模式

if (@available(iOS 13.0, *)) {
	[UIApplication sharedApplication].keyWindow.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}

單個界面禁用 (這個會影響他的子視圖)

self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;

至此,我們的適配已經結束。具體使用請查看Demo。以上有什麼不對的地方歡迎各位童鞋的指正,我們一起討論。大家加油!!!

發佈了14 篇原創文章 · 獲贊 13 · 訪問量 2066
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章