123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- //
- // FUBeautyShapeViewModel.m
- // FUBeautyComponent
- //
- // Created by 项林平 on 2022/7/27.
- //
- #import "FUBeautyShapeViewModel.h"
- #import "FUBeautyDefine.h"
- #import <FURenderKit/FURenderKit.h>
- @interface FUBeautyShapeViewModel ()
- @property (nonatomic, copy) NSArray<FUBeautyShapeModel *> *beautyShapes;
- @end
- @implementation FUBeautyShapeViewModel
- #pragma mark - Initializer
- - (instancetype)init {
- self = [super init];
- if (self) {
- if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyShapeKey]) {
- // 获取本地美肤数据
- self.beautyShapes = [self localShapes];
- } else {
- // 获取默认美肤数据
- self.beautyShapes = [self defaultShapes];
- }
- self.selectedIndex = -1;
- self.performanceLevel = [FURenderKit devicePerformanceLevel];
- }
- return self;
- }
- #pragma mark - Instance methods
- - (void)saveShapesPersistently {
- if (self.beautyShapes.count == 0) {
- return;
- }
- NSMutableArray *shapes = [[NSMutableArray alloc] init];
- for (FUBeautyShapeModel *model in self.beautyShapes) {
- NSDictionary *dictionary = [model dictionaryWithValuesForKeys:@[@"name", @"type", @"currentValue", @"defaultValue", @"defaultValueInMiddle", @"differentiateDevicePerformance"]];
- [shapes addObject:dictionary];
- }
- [[NSUserDefaults standardUserDefaults] setObject:shapes forKey:FUPersistentBeautyShapeKey];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- - (void)setShapeValue:(double)value {
- if (self.selectedIndex < 0 || self.selectedIndex >= self.beautyShapes.count) {
- return;
- }
- FUBeautyShapeModel *model = self.beautyShapes[self.selectedIndex];
- model.currentValue = value;
- [self setValue:model.currentValue forType:model.type];
- }
- - (void)setAllShapeValues {
- for (FUBeautyShapeModel *shape in self.beautyShapes) {
- [self setValue:shape.currentValue forType:shape.type];
- }
- }
- - (void)recoverAllShapeValuesToDefault {
- for (FUBeautyShapeModel *shape in self.beautyShapes) {
- shape.currentValue = shape.defaultValue;
- [self setValue:shape.currentValue forType:shape.type];
- }
- }
- #pragma mark - Private methods
- - (void)setValue:(double)value forType:(FUBeautyShape)type {
- switch (type) {
- case FUBeautyShapeCheekThinning:
- [FURenderKit shareRenderKit].beauty.cheekThinning = value;
- break;
- case FUBeautyShapeCheekV:
- [FURenderKit shareRenderKit].beauty.cheekV = value;
- break;
- case FUBeautyShapeCheekNarrow:
- [FURenderKit shareRenderKit].beauty.cheekNarrow = value;
- break;
- case FUBeautyShapeCheekShort:
- [FURenderKit shareRenderKit].beauty.cheekShort = value;
- break;
- case FUBeautyShapeCheekSmall:
- [FURenderKit shareRenderKit].beauty.cheekSmall = value;
- break;
- case FUBeautyShapeCheekbones:
- [FURenderKit shareRenderKit].beauty.intensityCheekbones = value;
- break;
- case FUBeautyShapeLowerJaw:
- [FURenderKit shareRenderKit].beauty.intensityLowerJaw = value;
- break;
- case FUBeautyShapeEyeEnlarging:
- [FURenderKit shareRenderKit].beauty.eyeEnlarging = value;
- break;
- case FUBeautyShapeEyeCircle:
- [FURenderKit shareRenderKit].beauty.intensityEyeCircle = value;
- break;
- case FUBeautyShapeChin:
- [FURenderKit shareRenderKit].beauty.intensityChin = value;
- break;
- case FUBeautyShapeForehead:
- [FURenderKit shareRenderKit].beauty.intensityForehead = value;
- break;
- case FUBeautyShapeNose:
- [FURenderKit shareRenderKit].beauty.intensityNose = value;
- break;
- case FUBeautyShapeMouth:
- [FURenderKit shareRenderKit].beauty.intensityMouth = value;
- break;
- case FUBeautyShapeLipThick:
- [FURenderKit shareRenderKit].beauty.intensityLipThick = value;
- break;
- case FUBeautyShapeEyeHeight:
- [FURenderKit shareRenderKit].beauty.intensityEyeHeight = value;
- break;
- case FUBeautyShapeCanthus:
- [FURenderKit shareRenderKit].beauty.intensityCanthus = value;
- break;
- case FUBeautyShapeEyeLid:
- [FURenderKit shareRenderKit].beauty.intensityEyeLid = value;
- break;
- case FUBeautyShapeEyeSpace:
- [FURenderKit shareRenderKit].beauty.intensityEyeSpace = value;
- break;
- case FUBeautyShapeEyeRotate:
- [FURenderKit shareRenderKit].beauty.intensityEyeRotate = value;
- break;
- case FUBeautyShapeLongNose:
- [FURenderKit shareRenderKit].beauty.intensityLongNose = value;
- break;
- case FUBeautyShapePhiltrum:
- [FURenderKit shareRenderKit].beauty.intensityPhiltrum = value;
- break;
- case FUBeautyShapeSmile:
- [FURenderKit shareRenderKit].beauty.intensitySmile = value;
- break;
- case FUBeautyShapeBrowHeight:
- [FURenderKit shareRenderKit].beauty.intensityBrowHeight = value;
- break;
- case FUBeautyShapeBrowSpace:
- [FURenderKit shareRenderKit].beauty.intensityBrowSpace = value;
- break;
- case FUBeautyShapeBrowThick:
- [FURenderKit shareRenderKit].beauty.intensityBrowThick = value;
- break;
- }
- }
- - (NSArray<FUBeautyShapeModel *> *)localShapes {
- NSArray *shapes = [[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyShapeKey];
- NSMutableArray *mutableShapes = [[NSMutableArray alloc] init];
- for (NSDictionary *shape in shapes) {
- FUBeautyShapeModel *model = [[FUBeautyShapeModel alloc] init];
- [model setValuesForKeysWithDictionary:shape];
- [mutableShapes addObject:model];
- }
- return [mutableShapes copy];
- }
- - (NSArray<FUBeautyShapeModel *> *)defaultShapes {
- NSBundle *bundle = [NSBundle bundleForClass:[self class]];
- NSString *shapePath = [bundle pathForResource:@"beauty_shape" ofType:@"json"];
- NSArray<NSDictionary *> *shapeData = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:shapePath] options:NSJSONReadingMutableContainers error:nil];
- NSMutableArray *shapes = [[NSMutableArray alloc] init];
- for (NSDictionary *dictionary in shapeData) {
- FUBeautyShapeModel *model = [[FUBeautyShapeModel alloc] init];
- [model setValuesForKeysWithDictionary:dictionary];
- [shapes addObject:model];
- }
- return [shapes copy];
- }
- #pragma mark - Getters
- - (BOOL)isDefaultValue {
- for (FUBeautyShapeModel *shape in self.beautyShapes) {
- int currentIntValue = shape.defaultValueInMiddle ? (int)(shape.currentValue * 100 - 50) : (int)(shape.currentValue * 100);
- int defaultIntValue = shape.defaultValueInMiddle ? (int)(shape.defaultValue * 100 - 50) : (int)(shape.defaultValue * 100);
- if (currentIntValue != defaultIntValue) {
- return NO;
- }
- }
- return YES;
- }
- @end
|