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

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

這里也提供 禁用暗黑模式 的方法,請查看iOS開發(fā)小技巧第五條

直接看效果 Demo

效果圖

暗黑模式適配

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

顏色適配

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

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

接下來是我自己對UIColor進(jìn)行的category,這里提供了一些設(shè)置顏色的方法,請查看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對象
/// @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;

具體用法如下:

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

Color Set 的使用

對于使用xib的童鞋來說,我們就只能使用color set顏色集了。首先創(chuàng)建一個顏色集合
color set

接下來選擇Appearance選項中的Any,Dark模式就會出現(xiàn)兩個模式,我們設(shè)置這兩個模式的顏色值,使用的時候直接使用我們自定義的顏色名稱(customBlueColor)就可以了

Snipaste_2020-01-01_19-55-43.png

使用方法:

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

Layer層面上的Color適配

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

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

圖片適配

其實圖片適配跟Color Set設(shè)置是一樣

圖片適配

使用方法:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.環(huán)境 Xcode11 正式版iOS13 beta版本Mac系統(tǒng): 10.15 beta版本 2.原理 將同一個...
    329fd8af610c閱讀 11,748評論 0 17
  • 蘋果全球開發(fā)者大會 (英文全稱是“Worldwide Developers Conference”),簡稱為“WW...
    Coder_JMicheal閱讀 3,386評論 4 11
  • 2019-9-20,apple公司向全球移動設(shè)備進(jìn)行了iOS13系統(tǒng)正式版的推送。早上來到公司,之前在apple ...
    運琴的簡書閱讀 628評論 1 1
  • 眼睛渾濁的日子里 不容易看清來路 我描繪不出遠(yuǎn)方的時候 一面笨拙地點亮 年代已久的礦燈 它在墳?zāi)估锼讲亓硕嗌偬叟c愛...
    老師我暈課閱讀 341評論 0 9
  • 我們是擁有感知的生物,聰明的人類又將種種感覺細(xì)細(xì)分類,就有了我們長提在嘴邊的喜、怒、哀、懼、愛、惡、欲。我們常常跟...
    功一閱讀 492評論 0 0

友情鏈接更多精彩內(nèi)容