FUBeautySkinViewModel.m 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. //
  2. // FUBeautySkinViewModel.m
  3. // FUBeautyComponent
  4. //
  5. // Created by 项林平 on 2022/7/27.
  6. //
  7. #import "FUBeautySkinViewModel.h"
  8. #import "FUBeautyDefine.h"
  9. #import <FURenderKit/FURenderKit.h>
  10. @interface FUBeautySkinViewModel ()
  11. @property (nonatomic, copy) NSArray<FUBeautySkinModel *> *beautySkins;
  12. @end
  13. @implementation FUBeautySkinViewModel
  14. #pragma mark - Initializer
  15. - (instancetype)init {
  16. self = [super init];
  17. if (self) {
  18. if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautySkinKey]) {
  19. // 获取本地美肤数据
  20. self.beautySkins = [self localSkins];
  21. } else {
  22. // 获取默认美肤数据
  23. self.beautySkins = [self defaultSkins];
  24. }
  25. self.selectedIndex = -1;
  26. }
  27. return self;
  28. }
  29. #pragma mark - Instance methods
  30. - (void)saveSkinsPersistently {
  31. if (self.beautySkins.count == 0) {
  32. return;
  33. }
  34. NSMutableArray *skins = [[NSMutableArray alloc] init];
  35. for (FUBeautySkinModel *model in self.beautySkins) {
  36. NSDictionary *dictionary = [model dictionaryWithValuesForKeys:@[@"name", @"type", @"currentValue", @"defaultValue", @"defaultValueInMiddle", @"ratio"]];
  37. [skins addObject:dictionary];
  38. }
  39. [[NSUserDefaults standardUserDefaults] setObject:skins forKey:FUPersistentBeautySkinKey];
  40. [[NSUserDefaults standardUserDefaults] synchronize];
  41. }
  42. - (void)setSkinValue:(double)value {
  43. if (self.selectedIndex < 0 || self.selectedIndex >= self.beautySkins.count) {
  44. return;
  45. }
  46. FUBeautySkinModel *model = self.beautySkins[self.selectedIndex];
  47. model.currentValue = value * model.ratio;
  48. [self setValue:model.currentValue forType:model.type];
  49. }
  50. - (void)setAllSkinValues {
  51. for (FUBeautySkinModel *skin in self.beautySkins) {
  52. [self setValue:skin.currentValue forType:skin.type];
  53. }
  54. }
  55. - (void)recoverAllSkinValuesToDefault {
  56. for (FUBeautySkinModel *skin in self.beautySkins) {
  57. skin.currentValue = skin.defaultValue;
  58. [self setValue:skin.currentValue forType:skin.type];
  59. }
  60. }
  61. #pragma mark - Private methods
  62. - (void)setValue:(double)value forType:(FUBeautySkin)type {
  63. switch (type) {
  64. case FUBeautySkinBlurLevel:
  65. [FURenderKit shareRenderKit].beauty.blurLevel = value;
  66. break;
  67. case FUBeautySkinColorLevel:
  68. [FURenderKit shareRenderKit].beauty.colorLevel = value;
  69. break;
  70. case FUBeautySkinRedLevel:
  71. [FURenderKit shareRenderKit].beauty.redLevel = value;
  72. break;
  73. case FUBeautySkinSharpen:
  74. [FURenderKit shareRenderKit].beauty.sharpen = value;
  75. break;
  76. case FUBeautySkinFaceThreed:
  77. [FURenderKit shareRenderKit].beauty.faceThreed = value;
  78. break;
  79. case FUBeautySkinEyeBright:
  80. [FURenderKit shareRenderKit].beauty.eyeBright = value;
  81. break;
  82. case FUBeautySkinToothWhiten:
  83. [FURenderKit shareRenderKit].beauty.toothWhiten = value;
  84. break;
  85. case FUBeautySkinRemovePouchStrength:
  86. [FURenderKit shareRenderKit].beauty.removePouchStrength = value;
  87. break;
  88. case FUBeautySkinRemoveNasolabialFoldsStrength:
  89. [FURenderKit shareRenderKit].beauty.removeNasolabialFoldsStrength = value;
  90. break;
  91. }
  92. }
  93. - (NSArray<FUBeautySkinModel *> *)localSkins {
  94. NSArray *skins = [[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautySkinKey];
  95. NSMutableArray *mutableSkins = [[NSMutableArray alloc] init];
  96. for (NSDictionary *skin in skins) {
  97. FUBeautySkinModel *model = [[FUBeautySkinModel alloc] init];
  98. [model setValuesForKeysWithDictionary:skin];
  99. [mutableSkins addObject:model];
  100. }
  101. return [mutableSkins copy];
  102. }
  103. - (NSArray<FUBeautySkinModel *> *)defaultSkins {
  104. NSBundle *bundle = [NSBundle bundleForClass:[self class]];
  105. NSString *skinPath = [bundle pathForResource:@"beauty_skin" ofType:@"json"];
  106. NSArray<NSDictionary *> *skinData = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:skinPath] options:NSJSONReadingMutableContainers error:nil];
  107. NSMutableArray *skins = [[NSMutableArray alloc] init];
  108. for (NSDictionary *dictionary in skinData) {
  109. FUBeautySkinModel *model = [[FUBeautySkinModel alloc] init];
  110. [model setValuesForKeysWithDictionary:dictionary];
  111. [skins addObject:model];
  112. }
  113. return [skins copy];
  114. }
  115. #pragma mark - Getters
  116. - (BOOL)isDefaultValue {
  117. for (FUBeautySkinModel *skin in self.beautySkins) {
  118. int currentIntValue = skin.defaultValueInMiddle ? (int)(skin.currentValue / skin.ratio * 100 - 50) : (int)(skin.currentValue / skin.ratio * 100);
  119. int defaultIntValue = skin.defaultValueInMiddle ? (int)(skin.defaultValue / skin.ratio * 100 - 50) : (int)(skin.defaultValue / skin.ratio * 100);
  120. if (currentIntValue != defaultIntValue) {
  121. return NO;
  122. }
  123. }
  124. return YES;
  125. }
  126. @end