QDThemeManager.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. //
  2. // QDThemeManager.m
  3. // qmuidemo
  4. //
  5. // Created by QMUI Team on 2017/5/9.
  6. // Copyright © 2017年 QMUI Team. All rights reserved.
  7. //
  8. #import "QDThemeManager.h"
  9. @interface QDThemeManager ()
  10. @property(nonatomic, strong) UIColor *qd_backgroundColor;
  11. @property(nonatomic, strong) UIColor *qd_backgroundColorLighten;
  12. @property(nonatomic, strong) UIColor *qd_backgroundColorHighlighted;
  13. @property(nonatomic, strong) UIColor *qd_tintColor;
  14. @property(nonatomic, strong) UIColor *qd_titleTextColor;
  15. @property(nonatomic, strong) UIColor *qd_mainTextColor;
  16. @property(nonatomic, strong) UIColor *qd_descriptionTextColor;
  17. @property(nonatomic, strong) UIColor *qd_placeholderColor;
  18. @property(nonatomic, strong) UIColor *qd_codeColor;
  19. @property(nonatomic, strong) UIColor *qd_separatorColor;
  20. @property(nonatomic, strong) UIColor *qd_gridItemTintColor;
  21. @property(nonatomic, strong) UIImage *qd_navigationBarBackgroundImage;
  22. @property(nonatomic, strong) UIImage *qd_navigationBarBackIndicatorImage;
  23. @property(nonatomic, strong) UIImage *qd_navigationBarCloseImage;
  24. @property(nonatomic, strong) UIImage *qd_navigationBarDisclosureIndicatorImage;
  25. @property(nonatomic, strong) UIImage *qd_tableViewCellDisclosureIndicatorImage;
  26. @property(nonatomic, strong) UIImage *qd_tableViewCellCheckmarkImage;
  27. @property(nonatomic, strong) UIImage *qd_tableViewCellDetailButtonImage;
  28. @property(nonatomic, strong) UIImage *qd_searchBarTextFieldBackgroundImage;
  29. @property(nonatomic, strong) UIImage *qd_searchBarBackgroundImage;
  30. @property(nonatomic, strong) UIVisualEffect *qd_standardBlueEffect;
  31. @property(class, nonatomic, strong, readonly) QDThemeManager *sharedInstance;
  32. @end
  33. @implementation QDThemeManager
  34. + (instancetype)sharedInstance {
  35. static dispatch_once_t onceToken;
  36. static QDThemeManager *instance = nil;
  37. dispatch_once(&onceToken,^{
  38. instance = [[super allocWithZone:NULL] init];
  39. });
  40. return instance;
  41. }
  42. + (id)allocWithZone:(struct _NSZone *)zone{
  43. return [self sharedInstance];
  44. }
  45. - (instancetype)init {
  46. if (self = [super init]) {
  47. self.qd_backgroundColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  48. return theme.themeBackgroundColor;
  49. }];
  50. self.qd_backgroundColorLighten = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, NSString * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  51. return theme.themeBackgroundColorLighten;
  52. }];
  53. self.qd_backgroundColorHighlighted = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  54. return theme.themeBackgroundColorHighlighted;
  55. }];
  56. self.qd_tintColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  57. return theme.themeTintColor;
  58. }];
  59. self.qd_titleTextColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  60. return theme.themeTitleTextColor;
  61. }];
  62. self.qd_mainTextColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  63. return theme.themeMainTextColor;
  64. }];
  65. self.qd_descriptionTextColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  66. return theme.themeDescriptionTextColor;
  67. }];
  68. self.qd_placeholderColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  69. return theme.themePlaceholderColor;
  70. }];
  71. self.qd_codeColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  72. return theme.themeCodeColor;
  73. }];
  74. self.qd_separatorColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> *theme) {
  75. return theme.themeSeparatorColor;
  76. }];
  77. self.qd_gridItemTintColor = [UIColor qmui_colorWithThemeProvider:^UIColor * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, NSString * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  78. return theme.themeGridItemTintColor;
  79. }];
  80. self.qd_navigationBarBackgroundImage = [UIImage qmui_imageWithThemeProvider:^UIImage * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  81. return [UIImage qmui_imageWithColor:theme.themeTintColor];
  82. }];
  83. self.qd_navigationBarBackIndicatorImage = [UIImage qmui_imageWithShape:QMUIImageShapeNavBack size:CGSizeMake(12, 20) tintColor:UIColor.whiteColor];
  84. self.qd_navigationBarCloseImage = [UIImage qmui_imageWithShape:QMUIImageShapeNavClose size:CGSizeMake(16, 16) tintColor:UIColor.whiteColor];
  85. self.qd_navigationBarDisclosureIndicatorImage = [[UIImage qmui_imageWithShape:QMUIImageShapeTriangle size:CGSizeMake(8, 5) tintColor:nil] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  86. self.qd_tableViewCellDisclosureIndicatorImage = [UIImage qmui_imageWithThemeProvider:^UIImage * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, NSString * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  87. return [identifier isEqualToString:QDThemeIdentifierDark] ? [UIImage qmui_imageWithShape:QMUIImageShapeDisclosureIndicator size:CGSizeMake(6, 10) lineWidth:1 tintColor:UIColorMake(98, 100, 104)] : [UIImage qmui_imageWithShape:QMUIImageShapeDisclosureIndicator size:CGSizeMake(6, 10) lineWidth:1 tintColor:UIColorGray7];
  88. }];
  89. self.qd_tableViewCellCheckmarkImage = [UIImage qmui_imageWithThemeProvider:^UIImage * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, NSString * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  90. return [UIImage qmui_imageWithShape:QMUIImageShapeCheckmark size:CGSizeMake(15, 12) tintColor:self.qd_tintColor];
  91. }];
  92. self.qd_tableViewCellDetailButtonImage = [UIImage qmui_imageWithThemeProvider:^UIImage * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, NSString * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  93. return [UIImage qmui_imageWithShape:QMUIImageShapeDetailButtonImage size:CGSizeMake(20, 20) tintColor:self.qd_tintColor];
  94. }];
  95. self.qd_searchBarTextFieldBackgroundImage = [UIImage qmui_imageWithThemeProvider:^UIImage * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, __kindof NSObject<QDThemeProtocol> * _Nullable theme) {
  96. return [UISearchBar qmui_generateTextFieldBackgroundImageWithColor:theme.themeBackgroundColorHighlighted];
  97. }];
  98. self.qd_searchBarBackgroundImage = [UIImage qmui_imageWithThemeProvider:^UIImage * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, __kindof NSObject<NSCopying> * _Nullable identifier, __kindof NSObject<QDThemeProtocol> * _Nullable theme) {
  99. return [UISearchBar qmui_generateBackgroundImageWithColor:theme.themeBackgroundColor borderColor:nil];
  100. }];
  101. self.qd_standardBlueEffect = [UIVisualEffect qmui_effectWithThemeProvider:^UIVisualEffect * _Nonnull(__kindof QMUIThemeManager * _Nonnull manager, NSString * _Nullable identifier, NSObject<QDThemeProtocol> * _Nullable theme) {
  102. return [UIBlurEffect effectWithStyle:[identifier isEqualToString:QDThemeIdentifierDark] ? UIBlurEffectStyleDark : UIBlurEffectStyleLight];
  103. }];
  104. }
  105. return self;
  106. }
  107. + (NSObject<QDThemeProtocol> *)currentTheme {
  108. return QMUIThemeManagerCenter.defaultThemeManager.currentTheme;
  109. }
  110. @end
  111. @implementation UIColor (QDTheme)
  112. + (instancetype)qd_sharedInstance {
  113. static dispatch_once_t onceToken;
  114. static UIColor *instance = nil;
  115. dispatch_once(&onceToken,^{
  116. instance = [[super allocWithZone:NULL] init];
  117. });
  118. return instance;
  119. }
  120. + (UIColor *)qd_backgroundColor {
  121. return QDThemeManager.sharedInstance.qd_backgroundColor;
  122. }
  123. + (UIColor *)qd_backgroundColorLighten {
  124. return QDThemeManager.sharedInstance.qd_backgroundColorLighten;
  125. }
  126. + (UIColor *)qd_backgroundColorHighlighted {
  127. return QDThemeManager.sharedInstance.qd_backgroundColorHighlighted;
  128. }
  129. + (UIColor *)qd_tintColor {
  130. return QDThemeManager.sharedInstance.qd_tintColor;
  131. }
  132. + (UIColor *)qd_titleTextColor {
  133. return QDThemeManager.sharedInstance.qd_titleTextColor;
  134. }
  135. + (UIColor *)qd_mainTextColor {
  136. return QDThemeManager.sharedInstance.qd_mainTextColor;
  137. }
  138. + (UIColor *)qd_descriptionTextColor {
  139. return QDThemeManager.sharedInstance.qd_descriptionTextColor;
  140. }
  141. + (UIColor *)qd_placeholderColor {
  142. return QDThemeManager.sharedInstance.qd_placeholderColor;
  143. }
  144. + (UIColor *)qd_codeColor {
  145. return QDThemeManager.sharedInstance.qd_codeColor;
  146. }
  147. + (UIColor *)qd_separatorColor {
  148. return QDThemeManager.sharedInstance.qd_separatorColor;
  149. }
  150. + (UIColor *)qd_gridItemTintColor {
  151. return QDThemeManager.sharedInstance.qd_gridItemTintColor;
  152. }
  153. @end
  154. @implementation UIImage (QDTheme)
  155. + (UIImage *)qd_navigationBarBackgroundImage {
  156. return QDThemeManager.sharedInstance.qd_navigationBarBackgroundImage;
  157. }
  158. + (UIImage *)qd_navigationBarBackIndicatorImage {
  159. return QDThemeManager.sharedInstance.qd_navigationBarBackIndicatorImage;
  160. }
  161. + (UIImage *)qd_navigationBarCloseImage {
  162. return QDThemeManager.sharedInstance.qd_navigationBarCloseImage;
  163. }
  164. + (UIImage *)qd_navigationBarDisclosureIndicatorImage {
  165. return QDThemeManager.sharedInstance.qd_navigationBarDisclosureIndicatorImage;
  166. }
  167. + (UIImage *)qd_tableViewCellDisclosureIndicatorImage {
  168. return QDThemeManager.sharedInstance.qd_tableViewCellDisclosureIndicatorImage;
  169. }
  170. + (UIImage *)qd_tableViewCellCheckmarkImage {
  171. return QDThemeManager.sharedInstance.qd_tableViewCellCheckmarkImage;
  172. }
  173. + (UIImage *)qd_tableViewCellDetailButtonImage {
  174. return QDThemeManager.sharedInstance.qd_tableViewCellDetailButtonImage;
  175. }
  176. + (UIImage *)qd_searchBarTextFieldBackgroundImage {
  177. return QDThemeManager.sharedInstance.qd_searchBarTextFieldBackgroundImage;
  178. }
  179. + (UIImage *)qd_searchBarBackgroundImage {
  180. return QDThemeManager.sharedInstance.qd_searchBarBackgroundImage;
  181. }
  182. @end
  183. @implementation UIVisualEffect (QDTheme)
  184. + (UIVisualEffect *)qd_standardBlurEffect {
  185. return QDThemeManager.sharedInstance.qd_standardBlueEffect;
  186. }
  187. @end