SkinManage.m 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. //
  2. // SkinManage.m
  3. // shiku_im
  4. //
  5. // Created by 1 on 17/10/23.
  6. // Copyright © 2017年 Reese. All rights reserved.
  7. //
  8. #import "SkinManage.h"
  9. #import "UIImage+Tint.h"
  10. //#define skinName @"skinName"
  11. //#define skinColor @"skinColor"
  12. //#define skinIndex @"skinIndex"
  13. SkinDictKey const SkinDictKeyName = @"skinName";
  14. SkinDictKey const SkinDictKeyColor = @"skinColor";
  15. SkinDictKey const SkinDictKeyIndex = @"skinIndex";
  16. static SkinManage * _shareInstance = nil;
  17. @interface SkinManage ()
  18. @property (nonatomic, strong) UIImage *navImage;
  19. @end
  20. @implementation SkinManage
  21. +(instancetype)sharedInstance{
  22. static dispatch_once_t onceToken;
  23. dispatch_once(&onceToken, ^{
  24. _shareInstance = [[SkinManage alloc] init];
  25. });
  26. return _shareInstance;
  27. }
  28. -(instancetype)init{
  29. if (self = [super init]) {
  30. [self makeThemeList];
  31. NSNumber * current = [g_default objectForKey:SkinDictKeyIndex];
  32. if (current == nil) {
  33. [g_default setObject:[NSNumber numberWithUnsignedInteger:SkinType_ComposedRed] forKey:SkinDictKeyIndex];
  34. [g_default synchronize];
  35. current = [NSNumber numberWithUnsignedInteger:SkinType_ComposedRed];
  36. }
  37. NSDictionary * skinDict = [self searchSkinByIndex:[current unsignedIntegerValue]];
  38. if(skinDict){
  39. _themeName = skinDict[SkinDictKeyName];
  40. _themeColor = skinDict[SkinDictKeyColor];
  41. _themeIndex = [skinDict[SkinDictKeyIndex] unsignedIntegerValue];
  42. }
  43. }
  44. return self;
  45. }
  46. -(void)makeThemeList{
  47. NSMutableArray * skinList = [NSMutableArray array];
  48. // 以前的黑色 0x4FC557
  49. // 极简风格
  50. [skinList addObject:[self makeASkin:@"浅豆绿" color:HEXCOLOR(0x61D999) index:SkinType_PeaGreen]];//浅豆绿
  51. [skinList addObject:[self makeASkin:@"清水蓝" color:HEXCOLOR(0x80BFFF) index:SkinType_ClearBlue]];//清水蓝
  52. [skinList addObject:[self makeASkin:@"珊瑚红" color:HEXCOLOR(0xFF8080) index:SkinType_CoralRed]];//珊瑚红
  53. [skinList addObject:[self makeASkin:@"流霞粉" color:HEXCOLOR(0xFFA5C9) index:SkinType_NephelinePowder]];//流霞粉
  54. //普通风格
  55. [skinList addObject:[self makeASkin:Localized(@"JX_Theme_ViridianGreen") color:HEXCOLOR(0x55BEB7) index:SkinType_CobaltPaleGreen]];//淡钴绿 默认
  56. [skinList addObject:[self makeASkin:@"葡萄紫" color:HEXCOLOR(0x6C53AB) index:SkinType_DarkPurple]];//葡萄紫
  57. [skinList addObject:[self makeASkin:@"商务蓝" color:HEXCOLOR(0x3B5699) index:SkinType_BusinessBlue]];//商务蓝
  58. [skinList addObject:[self makeASkin:@"经典红" color:HEXCOLOR(0xfd504e) index:SkinType_ComposedRed]];//经典红
  59. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_LeafGreen") color:HEXCOLOR(0xBAE019) index:SkinType_LeafGreen]];//粉叶绿
  60. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_PowderAzure") color:HEXCOLOR(0x7ED1FB) index:SkinType_PowderAzure]];//粉天蓝
  61. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_BusinessBlue") color:HEXCOLOR(0x3C589B) index:SkinType_BusinessBlue]];//商务蓝
  62. // [skinList addObject:[self makeASkin:Localized(@"JXTheme_Blue") color:HEXCOLOR(0x099fde) index:SkinType_Blue]];//大海蓝
  63. // [skinList addObject:[self makeASkin:Localized(@"JXTheme_Pink") color:HEXCOLOR(0xFA99A0) index:SkinType_Pink]];//感性粉
  64. // [skinList addObject:[self makeASkin:Localized(@"JXTheme_Red") color:HEXCOLOR(0xDE3031) index:SkinType_Red]];//中国红
  65. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_AmberYellow") color:HEXCOLOR(0xFFC400) index:SkinType_AmberYellow]];// 琥珀黄
  66. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_Orange") color:HEXCOLOR(0xFE7B21) index:SkinType_Orange]];//橘黄色
  67. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_LightCoffee") color:HEXCOLOR(0xC17E61) index:SkinType_LightCoffee]];//浅咖色
  68. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_BlueGray") color:HEXCOLOR(0x547A8C) index:SkinType_BlueGray]];//蓝灰色
  69. // [skinList addObject:[self makeASkin:Localized(@"JX_Theme_BurntUmber") color:HEXCOLOR(0x4E2505) index:SkinType_BurntUmber]];//深茶色
  70. // 粉色替换了,这是之前的粉色:0xff9ffe
  71. NSMutableArray * skinNameList = [NSMutableArray array];
  72. for (NSDictionary * skinDict in skinList) {
  73. [skinNameList addObject:skinDict[SkinDictKeyName]];
  74. }
  75. _skinNameList = skinNameList;
  76. _skinList = skinList;
  77. }
  78. -(NSDictionary *)makeASkin:(NSString *)name color:(UIColor *)color index:(SkinType)skinType{
  79. NSMutableDictionary * dict = [NSMutableDictionary dictionary];
  80. [dict setObject:name forKey:SkinDictKeyName];
  81. [dict setObject:color forKey:SkinDictKeyColor];
  82. [dict setObject:[NSNumber numberWithUnsignedInteger:skinType] forKey:SkinDictKeyIndex];
  83. return dict;
  84. }
  85. -(NSDictionary *)searchSkinByIndex:(NSInteger)index{
  86. for (int i = 0; i<_skinList.count; i++) {
  87. NSDictionary * skinDict = _skinList[i];
  88. if ([skinDict[SkinDictKeyIndex] unsignedIntegerValue] == index) {
  89. return skinDict;
  90. }
  91. }
  92. return nil;
  93. }
  94. -(void)switchSkinIndex:(NSUInteger)index{
  95. NSDictionary * skinDict = [self searchSkinByIndex:index];
  96. if(skinDict){
  97. _themeName = skinDict[SkinDictKeyName];
  98. _themeColor = skinDict[SkinDictKeyColor];
  99. _themeIndex = [skinDict[SkinDictKeyIndex] unsignedIntegerValue];
  100. self.navImage = nil;
  101. [g_default setObject:[NSNumber numberWithUnsignedInteger:_themeIndex] forKey:SkinDictKeyIndex];
  102. [g_default synchronize];
  103. }
  104. }
  105. -(UIImage *)themeImage:(NSString *)imageName{
  106. NSString * imageStr = [imageName copy];
  107. if ([imageName rangeOfString:@"@2x"].location != NSNotFound) {
  108. imageStr = [imageName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
  109. }else if ([imageName rangeOfString:@"@3x"].location != NSNotFound){
  110. imageStr = [imageName stringByReplacingOccurrencesOfString:@"@3x" withString:@""];
  111. }
  112. if(_themeIndex != 0){
  113. imageStr = [NSString stringWithFormat:@"%@_%tu",imageStr,_themeIndex];
  114. }
  115. UIImage * img = [UIImage imageNamed:imageStr];
  116. if (img) {
  117. return img;
  118. }else{
  119. return [UIImage imageNamed:imageName];
  120. }
  121. }
  122. -(NSString *)themeImageName:(NSString *)imageName{
  123. NSString * imageStr;
  124. if ([imageName rangeOfString:@"@2x"].location != NSNotFound) {
  125. imageStr = [imageName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
  126. }else if ([imageName rangeOfString:@"@3x"].location != NSNotFound){
  127. imageStr = [imageName stringByReplacingOccurrencesOfString:@"@3x" withString:@""];
  128. }
  129. imageStr = [NSString stringWithFormat:@"%@_%tu",imageStr,_themeIndex];
  130. return imageStr;
  131. }
  132. -(UIImage *)themeTintImage:(NSString *)imageName{
  133. if ([imageName isEqualToString:@"navBarBackground"] && self.navImage) {
  134. return self.navImage;
  135. }else {
  136. UIImage * tintImage = [[UIImage imageNamed:imageName] imageWithTintColor:self.themeColor];
  137. if ([imageName isEqualToString:@"navBarBackground"] && !self.navImage) {
  138. self.navImage = tintImage;
  139. }
  140. return tintImage;
  141. }
  142. }
  143. -(void)resetInstence{
  144. _shareInstance = [self init];
  145. }
  146. @end