iOS適配深色模式

iOS13出來已經(jīng)挺久了蛋勺,今天才認(rèn)真的看了看深色模式的魅力凹髓,老工程適配深色模式的確會(huì)是個(gè)龐大的工程,這篇文章記錄一下奶陈,今天下午簡單做了些適配深色模式的功課易阳。

1. 顏色適配

在iOS13中系統(tǒng)提供了動(dòng)態(tài)顏色的方法:

+ (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);

我們可以直接封裝一個(gè)UIColor的類別來獲取不同模式下的顏色:

+(UIColor *)colorWithDarkModeColor:(UIColor *)darkColor normalColor:(UIColor *)color
{
    if (@available(iOS 13.0,*)) {
        UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trainCollection) {
            if ([trainCollection userInterfaceStyle] == UIUserInterfaceStyleDark) {
                return darkColor;
            }
            else {
                return color;
            }
        }];
        return dyColor;
    }
    return color;
}

這樣,我們在使用的時(shí)候就可以方便的調(diào)用吃粒,當(dāng)模式改變后潦俺,系統(tǒng)會(huì)自己根據(jù)是否是深色模式更改不同的顏色:

UIColor *color = [UIColor colorWithDarkModeColor:[UIColor blackColor] normalColor:[UIColor whiteColor]];
[self.view setBackgroundColor:color];

如果遇到一些比較特殊的情況,比如隱藏一些空間或者改變漸變顏色之類的需求徐勃,那我們就需要監(jiān)聽用戶模式的改變事示,這個(gè)方法在UIViewController和UIView中都可以直接調(diào)用:

- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection API_AVAILABLE(ios(8.0));

///Example
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
     [super traitCollectionDidChange:previousTraitCollection];
    NSLog(@"-----current-%ld\n=====previous=%ld",self.traitCollection.userInterfaceStyle,previousTraitCollection.userInterfaceStyle);
     // trait發(fā)生了改變
     if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
         
     }
}
2. 圖片適配

在Asset里面,Xcode在Appearance里可以選擇不同的模式僻肖,一般情況下我們只用適配深色模式和非深色模式肖爵,如圖:



然后代碼里就直接寫:

imgView.image=[UIImage imageNamed:@"iconImage"];

這點(diǎn),很符合蘋果的個(gè)性檐涝,就是這么隨意遏匆,改變模式后自動(dòng)更改圖片,開發(fā)者不用再做其他的事情谁榜。

也許很多開發(fā)者會(huì)發(fā)現(xiàn)幅聘,大廠的應(yīng)用,所有的圖標(biāo)都很簡單窃植,線性帝蒿,單色等特點(diǎn),有抖音的可以看下抖音的圖標(biāo)(點(diǎn)贊巷怜、評論葛超、分享、查找...)延塑,看過后相信有人會(huì)直接想到iconfont這個(gè)東西绣张,沒錯(cuò),如果你們的應(yīng)用之前考慮過瘦身关带,應(yīng)該看到過使用iconfont來瘦身的文章侥涵。舉個(gè)例子下面這些圖標(biāo):

iconfont.png

如果是png格式的話,最起碼需要50kb空間宋雏,再加上適配深色模式double一下就是100kb!那么如果用iconfont的話芜飘,大小之后2kb,而且可以隨便改尺寸磨总。整整50倍嗦明,什么概念。用了iconfont的話在適配深色模式的時(shí)候也會(huì)比較簡單蚪燕,就像顏色適配一樣的容易娶牌,最后動(dòng)圖中的下面3個(gè)圖標(biāo)都是用的iconfont奔浅。

label.font = [UIFont imageFontWithSize:34.0];
label.text = @"\U0000e668";
label.textColor=[UIColor colorWithDarkModeColor:[UIColor lightGrayColor] normalColor:[UIColor redColor]];

里面用到了一個(gè)UIFont的類別方便加載iconfont:

+(UIFont *)imageFontWithSize:(CGFloat)fontSize
{
   return [UIFont fontWithName:@"iconFont" size: fontSize];
}

簡單做了個(gè)小小Demo放在了GitHub-iOS深色模式
上,效果圖如下:

darkmode.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裙戏,一起剝皮案震驚了整個(gè)濱河市乘凸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌累榜,老刑警劉巖营勤,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壹罚,居然都是意外死亡葛作,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門猖凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赂蠢,“玉大人,你說我怎么就攤上這事辨泳∈瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵菠红,是天一觀的道長第岖。 經(jīng)常有香客問我,道長试溯,這世上最難降的妖魔是什么蔑滓? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮遇绞,結(jié)果婚禮上键袱,老公的妹妹穿的比我還像新娘。我一直安慰自己摹闽,他們只是感情好蹄咖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著付鹿,像睡著了一般比藻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倘屹,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音慢叨,去河邊找鬼纽匙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拍谐,可吹牛的內(nèi)容都是我干的烛缔。 我是一名探鬼主播馏段,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼践瓷!你這毒婦竟也來了院喜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晕翠,失蹤者是張志新(化名)和其女友劉穎喷舀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淋肾,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫麻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了樊卓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拿愧。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碌尔,靈堂內(nèi)的尸體忽然破棺而出浇辜,到底是詐尸還是另有隱情,我是刑警寧澤唾戚,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布柳洋,位于F島的核電站,受9級特大地震影響颈走,放射性物質(zhì)發(fā)生泄漏膳灶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一立由、第九天 我趴在偏房一處隱蔽的房頂上張望轧钓。 院中可真熱鬧,春花似錦锐膜、人聲如沸毕箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吱瘩,卻和暖如春荷逞,著一層夾襖步出監(jiān)牢的瞬間媒咳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工种远, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涩澡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓坠敷,卻偏偏與公主長得像妙同,于是被迫代替她去往敵國和親射富。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354