IIDark :一款強大的 iOS 深色主題框架

Python實戰社羣

Java實戰社羣

長按識別下方二維碼,按需求添加

掃碼關注添加客服

進Python社羣▲

掃碼關注添加客服

進Java社羣

轉自:布多 

適用於iOS的強大深色主題框架,快速適配深色模式。
國內用戶可以訪問這個鏈接 https://gitee.com/internetWei/llDark

特性

• 集成簡單,只需改動少量代碼即可完美適配。

• 高性能,僅在需要更新頁面時更新指定頁面,有相關緩存策略縮短刷新時長。

• 功能強大,所有使用UIColor、UIImage、CGColor的地方均可完美適配。

• 兼容iOS13以下機型。

• 支持從網絡上獲取深色主題配置。

• 自動適配啓動圖爲APP當前主題模式。

Demo

用法

前提

配置深色資源:在工程任意NSObject分類(建議單獨新建一個主題分類)中創建+ (NSDictionary<id, id> *)llDarkTheme類方法,字典的key表示淺色主題下的顏色/圖片名稱/圖片地址,字典的value表示深色主題下的顏色/圖片名稱/圖片地址。可參考樣例代碼:

+ (NSDictionary<id, id> *)llDarkTheme {
    return @{
             UIColor.whiteColor : kColorRGB(27, 27, 27),
             kColorRGB(240, 238, 245) : kColorRGB(39, 39, 39),
             [UIColor colorWithRed:14.0 / 255.0 green:255.0 / 255.0 blue:0.0 alpha:1.0] : [UIColor colorWithRed:0.0 green:14.0 / 255.0 blue:255.0 / 255.0 alpha:1.0],
             @"background_light" : @"background_dark",
             @"~/path/background_light.png" : @"~/path/background_dark.png",
    };
}

Tips:

1.不必把所有情況下的顏色/圖片都填寫進去,對於偶爾或少數使用到的深色顏色可以參考高級用法單獨適配。
2.圖片名稱不用考慮倍圖關係;如果填寫的是圖片路徑一定要填寫完整的圖片路徑(包含後綴)。

基本用法

UIColor和CGColor只需要追加.themeColor(nil)即可。
UIImage只需要將imageNamed或imageWithContentsOfFile替換爲themeImage即可。

// UIColor
UIColor.redColor; // 之前的用法
UIColor.redColor.themeColor(nil); // 現在的用法

// CGColor
UIColor.redColor.CGColor; // 之前的用法
UIColor.redColor.themeCGColor(nil); // 現在的用法

// UIImage
[UIImage imageNamed:@"lightImageName"]; // 之前的用法
[UIImage themeImage:@"lightImageName"]; // 現在的用法

Tips:

1.themeImage適配了imageNamed和imageWithContentsOfFile兩個方法,可以傳遞圖片名稱,也可以傳遞圖片路徑。
2.只有適配過的Color和Image在主題切換時纔會刷新。

高級用法

1、themeColor()裏面的參數如果是具體的Color對象,深色主題則會使用指定的Color對象刷新,
如果是nil則會返回llDarkTheme中配置的深色顏色刷新,
如果llDarkTheme未配置則會返回淺色主題下的顏色。

2、themeCGColor()參數的作用和themeColor()參數作用一樣。

3、themeImage()有2個參數,參數可以是圖片名稱,也可以是圖片地址,

第1個參數表示淺色主題下使用的圖片(必填),
第2個參數表示深色主題下使用的圖片(可以爲空),
第2個參數爲空的話和themeColor()爲空的處理方式一樣。

4、appearanceBindUpdater,所有繼承自UIView的對象都擁有這個屬性,對象需要刷新時會調用它,可以在這裏實現自己的刷新邏輯。僅在需要刷新時會調用,主題更改不一定需要刷新UI。

5、userInterfaceStyle,類似iOS13系統的overrideUserInterfaceStyle方法,但是功能比overrideUserInterfaceStyle更加強大,它支持所有的對象,例如CALayer。它支持iOS13以下的系統使用。

6、themeDidChange,所有對象都擁有這個屬性,作用和ThemeDidChangeNotification一樣,themeDidChange會在對象釋放時被釋放掉,可以在多個地方使用,不保證回調順序,不同於appearanceBindUpdater,只要主題發生改變就會調用themeDidChange。

7、systemThemeDidChange,所有對象都擁有這個屬性,作用和SystemThemeDidChangeNotification一樣,釋放時機和themeDidChange一樣,可以在多個地方使用,不保證回調順序,只要系統主題發生改變就會調用systemThemeDidChange。

8、darkStyle,所有UIImageView對象都擁有這個方法,用於適配沒有深色圖片的圖片對象,例如網絡圖片。darkStyle有3個參數,第1個參數決定如何適配深色主題,目前有LLDarkStyleSaturation和LLDarkStyleMask兩種,
LLDarkStyleMask使用蒙層適配,LLDarkStyleSaturation通過降低原圖飽合度適配。第2個參數決定蒙層透明度/飽合度值,具體使用可看源碼註釋。第3個參數可以爲nil,使用LLDarkStyleSaturation時需要傳遞一個唯一字符串當做標識符,通常是圖片的url。

樣例代碼:

UIImageView *imageView = [[UIImageView alloc] init];
NSString *url = @"圖片URL";
imageView.darkStyle(LLDarkStyleSaturation, 0.2, url);
// imageView.darkStyle(LLDarkStyleMask, 0.5, nil);

9、updateDarkTheme:,如果需要運行時修改深色主題配置信息,或者需要從網絡上獲取深色主題配置信息,可以使用updateDarkTheme:來達到目的。請確保在第1個UI對象加載前配置好深色主題信息,否則會無效。

樣例代碼:

NSDictionary *darkTheme = @{
    UIColor.whiteColor : kColorRGB(27, 27, 27),
    kColorRGB(240, 238, 245) : kColorRGB(39, 39, 39),
    [UIColor colorWithRed:14.0 / 255.0 green:255.0 / 255.0 blue:0.0 alpha:1.0] : [UIColor colorWithRed:0.0 green:14.0 / 255.0 blue:255.0 /  255.0 alpha:1.0],
    @"background_light" : @"background_dark",
    @"~/path/background_light.png" : @"~/path/background_dark.png",
};
[LLDarkSource updateDarkTheme:darkTheme];

10、thirdControlClassName,如果需要支持第3方控件的刷新方法,可以在appearanceBindUpdater中單獨實現刷新邏輯,也可以按照如下方法實現刷新邏輯,更加推薦如下方法。首先需要實現thirdControlClassName這個類方法,並返回一個數組,數組包含第3方控件的類名字符串。然後實現refresh+類名字符串的對象方法,在方法裏實現第3方控件的刷新邏輯,可以參考LLThird.m文件中已經實現的YYLabel的刷新邏輯。詳情可以下載工程查看Demo瞭解具體實現。

高級用法中第8條darkStyle方法的樣例圖(爲了突出效果特意將飽合度和透明度調整的很低):

快速適配

僅需要3步即可快速完美適配深色主題模式,經測試大部分工程都能在0.5天內適配完成,少量工程1天內適配完成,極少需要1天以上的工作量進行適配。

1、配置深色主題資源,可參考前提,也可以參考高級方法9從網絡中獲取資源適配。

2、將需要適配的Color和Image適配爲主題Color和主題Image,適配方法可參考基礎用法高級用法

3、運行工程,檢查完整性。

Tips:
如果您還需要適配WKWebView,可以點擊鏈接參考文章進行適配。

安裝

CocoaPods

1、將 cocoapods 更新至最新版本。

2、在 Podfile 中添加 pod 'LLDark'。

3、執行 pod install 或 pod update。

4、導入 。

手動安裝

1、下載 LLDark 文件夾內的所有內容。

2、將 LLDark 工程中的LLDark文件夾添加(拖放)到你的工程。

3、導入 "LLDark.h"。

系統要求

該項目最低支持iOS9.0和Xcode10.0,如果想在更低系統上使用請聯繫作者。

注意點

• 需要自己監聽主題模式修改狀態欄顏色。

已知問題

• 需要適配深色主題的圖片資源請不要放在Assets.xcassets中,否則可能會獲取不到。

• 暫時不支持其他主題模式,後續會支持多種主題自由搭配。

程序員專欄 掃碼關注填加客服 長按識別下方二維碼進羣


近期精彩內容推薦:  

 幾句話,離職了

 中國男性的私密數據大賞,女生勿入!

 爲什麼很多人用“ji32k7au4a83”作密碼?

 一個月薪 12000 的北京程序員的真實生活 !


在看點這裏好文分享給更多人↓↓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章