// // MHBeautyAssembleView.m //美颜 #import "MHBeautyAssembleView.h" #import "MHBeautyFaceView.h" #import "MHFiltersView.h" #import "MHBeautyView.h" #import "WNSegmentControl.h" #import "MHBeautyParams.h" #import "MHCompleteBeautyView.h" #import "MHBeautySlider.h" #import "MHBeautiesModel.h" #import "MHBottomView.h" #import @interface MHBeautyAssembleView() @property (nonatomic, strong) WNSegmentControl *segmentControl; @property (nonatomic, strong) MHBeautyView *beautyView;//美颜 @property (nonatomic, strong) MHBeautyFaceView *faceView;//美型 @property (nonatomic, strong) MHCompleteBeautyView *completeView;//一键美颜 @property (nonatomic, strong) MHFiltersView *filtersView;//滤镜 @property (nonatomic, strong) UIView *lineView; @property (nonatomic, strong) NSMutableArray *viewsArray; @property (nonatomic, strong) UIView *lastView; @property (nonatomic, strong) MHBeautySlider *slider; @property (nonatomic, assign) NSInteger beautyLevel; @property (nonatomic, assign) NSInteger whiteLevel; @property (nonatomic, assign) NSInteger ruddinessLevel; @property (nonatomic, assign) NSInteger brightnessLevel; @property (nonatomic, assign) MHBeautyAssembleType assembleType; @property (nonatomic, assign) MHBeautyType beautyType; @property (nonatomic, assign) MHBeautyFaceType faceType; @property (nonatomic, strong) MHBeautiesModel *quickBeautyModel; @property (nonatomic, strong) MHBottomView * bottomView; @property (nonatomic, strong) UILabel * nameLabel; @property (nonatomic, assign) int sdkLevelTYpe;/// 0) { [self addSubview:_viewsArray[0]]; self.lastView = _viewsArray[0]; } ///修改MHUI if (isNeedBottom) { [self addSubview:self.bottomView]; } [self.beautyView configureBeautyData:self.beautyArr]; [self.faceView configureFaceData:self.facesArr]; // self.slider.maximumValue = 9; NSDictionary *indexDic = [[NSUserDefaults standardUserDefaults] objectForKey:kMHBeautyTitle]; if(IsDictionaryWithAnyKeyValue(indexDic)){ NSNumber *index = indexDic.allValues.firstObject; self.slider.hidden = index.integerValue == 0; self.nameLabel.hidden = index.integerValue == 0; NSString *beautKey = [NSString stringWithFormat:@"beauty_%ld",index.integerValue]; NSString *value = [[NSUserDefaults standardUserDefaults] objectForKey:beautKey]; self.nameLabel.text = YZMsg(indexDic.allKeys.firstObject); [self.slider setValue:value.integerValue animated:YES]; }else{ self.slider.hidden = YES; self.nameLabel.hidden = YES; } if(self.lastView == self.beautyView){ self.slider.maximumValue = 9; }else{ self.slider.maximumValue = 100; } if (self.lastView == self.beautyView) { self.assembleType = 0; }else if (self.lastView == self.faceView){ self.assembleType = 1; }else if (self.lastView == self.completeView){ self.assembleType = 2; } } - (void)configureSlider{ // self.slider.maximumValue = 9; } #pragma mark - Action - (void)switchList:(WNSegmentControl *)segment { UIView *view = [self.viewsArray objectAtIndex:segment.selectedSegmentIndex]; self.slider.hidden = [view isEqual:self.filtersView]; self.nameLabel.hidden = [view isEqual:self.filtersView]; // self.assembleType = segment.selectedSegmentIndex; if ([view isEqual:self.beautyView]) { [self.beautyView configureBeautyData:self.beautyArr]; self.assembleType = 0; self.slider.maximumValue = 9; NSDictionary *indexDic = [[NSUserDefaults standardUserDefaults] objectForKey:kMHBeautyTitle]; if(IsDictionaryWithAnyKeyValue(indexDic)){ NSNumber *index = indexDic.allValues.firstObject; self.slider.hidden = index.integerValue == 0; self.nameLabel.hidden = index.integerValue == 0; NSString *beautKey = [NSString stringWithFormat:@"beauty_%ld",index.integerValue]; NSString *value = [[NSUserDefaults standardUserDefaults] objectForKey:beautKey]; self.nameLabel.text = YZMsg(indexDic.allKeys.firstObject); [self.slider setValue:value.integerValue animated:YES]; }else{ self.slider.hidden = YES; self.nameLabel.hidden = YES; } } else { self.slider.maximumValue = 100; } if ([view isEqual:self.faceView]) { self.assembleType = 1; [self.faceView configureFaceData:self.facesArr]; NSDictionary *indexDic = [[NSUserDefaults standardUserDefaults] objectForKey:kMHFaceTitle]; if(IsDictionaryWithAnyKeyValue(indexDic)){ NSNumber *index = indexDic.allValues.firstObject; self.slider.hidden = index.integerValue == 0; self.nameLabel.hidden = index.integerValue == 0; NSString *beautKey = [NSString stringWithFormat:@"face_%ld",index.integerValue]; NSString *value = [[NSUserDefaults standardUserDefaults] objectForKey:beautKey]; self.nameLabel.text = YZMsg(indexDic.allKeys.firstObject); [self.slider setValue:value.integerValue animated:YES]; }else{ self.slider.hidden = YES; self.nameLabel.hidden = YES; } } if ([view isEqual:self.completeView]) { self.assembleType = 2; if ([[[NSUserDefaults standardUserDefaults] objectForKey:kOneclickBeauty] isKindOfClass:[NSData class]]) { self.slider.hidden = NO; self.nameLabel.hidden = NO; [self configureOneclickDefaultData]; }else{ self.slider.hidden = YES; self.nameLabel.hidden = YES; } } if (![view isEqual:self.lastView]) { self.lastView.hidden = YES; } if ([view isDescendantOfView:self]) { view.hidden = NO; }else{ [self addSubview:view]; } self.lastView = view; if (self.lastView == self.beautyView) { self.assembleType = 0; }else if (self.lastView == self.faceView){ self.assembleType = 1; }else if (self.lastView == self.completeView){ self.assembleType = 2; } ///修改MHUI [self bringSubviewToFront:self.bottomView]; } - (void)configureOneclickDefaultData{ NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kOneclickBeauty]; MHBeautiesModel *lastModel; NSSet *set = [NSSet setWithObjects:[NSString class],[NSNumber class],[MHBeautiesModel class], nil]; if (data && ![data isKindOfClass:[NSString class]]) { if (@available(iOS 11.0,*)) { lastModel = [NSKeyedUnarchiver unarchivedObjectOfClasses:set fromData:data error:nil]; }else{ lastModel = [NSKeyedUnarchiver unarchiveObjectWithData:data]; } [self.slider setSliderValue:lastModel.defaultValue]; [self.slider setValue:lastModel.defaultValue.integerValue animated:YES]; self.nameLabel.text = lastModel.beautyTitle; [self handleCompleteEffect:lastModel defaultSliderValue:lastModel.defaultValue.integerValue]; } } //slider 滑动修改对应的效果 - (void)handleBeautyAssembleEffectWithValue:(NSInteger)value { // NSLog(@"====%ld",self.assembleType); switch (self.assembleType) { case 0:{ if (self.isTXSDK) { [self handleBeautyEffectsOfTXWithSliderValue:value]; } else { [self handleBeautyEffectsWithSliderValue:value]; } } break; case 1: [self handleFaceEffectsWithSliderValue:value]; break; case 2: [self handleQuickBeautyWithSliderValue:value]; break; default: break; } } #pragma mark - 底部按钮响应 - (void)cameraAction:(BOOL)isTakePhoto{ NSLog(@"点击了拍照"); if (isTakePhoto) { if ([self.delegate respondsToSelector:@selector(takePhoto)]) { [self.delegate takePhoto]; } }else{ if ([self.delegate respondsToSelector:@selector(clickPackUp)]) { [self.delegate clickPackUp]; } } } #pragma mark - 美颜-腾讯直播用 - (void)handleBeautyEffectsOfTXWithSliderValue:(NSInteger)value { switch (self.beautyType) { case MHBeautyType_Original:{ self.beautyLevel = 0; self.whiteLevel = 0; self.ruddinessLevel = 0; self.brightnessLevel = 50;//默认 } break; case MHBeautyType_White: self.whiteLevel = value; break; case MHBeautyType_Mopi: self.beautyLevel = value; break; case MHBeautyType_Ruddiess: self.ruddinessLevel = value; break; case MHBeautyType_Brightness: self.brightnessLevel = value*100/9.0; break; default: break; } // if (self.beautyType != MHBeautyType_Brightness) { // self.brightnessLevel = 57; // } if (self.brightnessLevel > 90){ self.brightnessLevel = 90; } if (self.brightnessLevel < 10){ self.brightnessLevel = 10; } if ([self.delegate respondsToSelector:@selector(beautyLevel:whitenessLevel:ruddinessLevel: brightnessLevel:)]) { if(cancelOtherBeauty){ NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:kMHSelectedQuickBeauty]; if ([str isEqualToString:@"YES"]) { //2020-07-04 现在相机有默认美颜效果,取消一键美颜时需要恢复默认的美颜效果 [self.delegate beautyLevel:5 whitenessLevel:5 ruddinessLevel:7 brightnessLevel:57]; [self.completeView cancelQuickBeautyEffect:self.quickBeautyModel]; [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:kMHSelectedQuickBeauty];//保证只执行一次 } } [self.delegate beautyLevel:self.beautyLevel whitenessLevel:self.whiteLevel ruddinessLevel:self.ruddinessLevel brightnessLevel:self.brightnessLevel]; } NSString *beautKey = [NSString stringWithFormat:@"beauty_%ld",(long)self.beautyType]; [[NSUserDefaults standardUserDefaults] setInteger:value forKey:beautKey]; } #pragma mark - 美颜slider - (void)handleBeautyEffectsWithSliderValue:(NSInteger)value { if ([self.delegate respondsToSelector:@selector(handleBeautyWithType:level:)]) { if(cancelOtherBeauty){ NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:kMHSelectedQuickBeauty]; if ([str isEqualToString:@"YES"]) { [self.delegate handleBeautyWithType:0 level:0];//为了取消一键美颜的效果 [self.completeView cancelQuickBeautyEffect:self.quickBeautyModel]; [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:kMHSelectedQuickBeauty];//保证只执行一次 } } if (self.beautyType == MHBeautyType_Brightness) { [self.delegate handleBeautyWithType:self.beautyType level:value*10]; }else{ [self.delegate handleBeautyWithType:self.beautyType level:value/9.0]; } } NSString *beautKey = [NSString stringWithFormat:@"beauty_%ld",(long)self.beautyType]; [[NSUserDefaults standardUserDefaults] setInteger:value forKey:beautKey]; [[NSUserDefaults standardUserDefaults] synchronize]; } #pragma mark - 美型slider - (void)handleFaceEffectsWithSliderValue:(NSInteger)value { if ([self.delegate respondsToSelector:@selector(handleFaceBeautyWithType:sliderValue:)]) { if(cancelOtherBeauty){ NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:kMHSelectedQuickBeauty]; if ([str isEqualToString:@"YES"]) { [self.delegate handleFaceBeautyWithType:0 sliderValue:0];//为了取消一键美颜的效果 [self.completeView cancelQuickBeautyEffect:self.quickBeautyModel];//为了取消一键美颜的效果 [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:kMHSelectedQuickBeauty];//保证只执行一次 } } [self.delegate handleFaceBeautyWithType:self.faceType sliderValue:value]; } NSString *faceKey = [NSString stringWithFormat:@"face_%ld",(long)self.faceType]; [[NSUserDefaults standardUserDefaults] setInteger:value forKey:faceKey]; [[NSUserDefaults standardUserDefaults] synchronize]; } #pragma mark - 一键美颜slider - (void)handleQuickBeautyWithSliderValue:(NSInteger)value { if ([self.delegate respondsToSelector:@selector(handleQuickBeautyWithSliderValue: quickBeautyModel:)]) { [self.delegate handleQuickBeautyWithSliderValue:value quickBeautyModel:self.quickBeautyModel]; } if (isSaveOneclickBeauty) { if (self.quickBeautyModel) { self.quickBeautyModel.defaultValue = [NSString stringWithFormat:@"%ld",(long)value]; if (@available(iOS 11.0,*)) { NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.quickBeautyModel requiringSecureCoding:YES error:nil]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:kOneclickBeauty]; }else{ NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.quickBeautyModel]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:kOneclickBeauty]; } [[NSUserDefaults standardUserDefaults] synchronize]; } } } #pragma mark - delegate //美颜 - (void)handleBeautyEffects:(NSInteger)type sliderValue:(NSInteger)value name:(nonnull NSString *)name{ //点击原图时slider隐藏 if (type == 0){ _slider.hidden = YES; _nameLabel.hidden = YES; }else{ _slider.hidden = NO; _nameLabel.hidden = NO; } self.beautyType = type; [self.slider setSliderValue:[NSString stringWithFormat:@"%ld",(long)value]]; [self.slider setValue:(NSInteger)value animated:YES]; self.nameLabel.text = YZMsg(name); } //美型 - (void)handleFaceEffects:(NSInteger)type sliderValue:(NSInteger)value name:(nonnull NSString *)name{ if (type == 0){ _slider.hidden = YES; _nameLabel.hidden = YES; }else{ _slider.hidden = NO; _nameLabel.hidden = NO; } self.faceType = type; [self.slider setSliderValue:[NSString stringWithFormat:@"%ld",(long)value]]; [self.slider setValue:(NSInteger)value animated:YES]; self.nameLabel.text = YZMsg(name); } //一键美颜 - (void)handleCompleteEffect:(MHBeautiesModel *)model defaultSliderValue:(NSInteger)defaultValue { if ([model.beautyTitle isEqualToString:@"原图"]){ _slider.hidden = YES; _nameLabel.hidden = YES; }else{ _slider.hidden = NO; _nameLabel.hidden = NO; } if ([model.beautyTitle isEqualToString:@"原图"]) { self.quickBeautyModel = nil; } self.quickBeautyModel = model; if ([self.delegate respondsToSelector:@selector(handleQuickBeautyValue:)]) { [self.delegate handleQuickBeautyValue:model]; } if(cancelOtherBeauty){ //取消美颜美型的选中状态 if (self.faceType != -1) { [self.faceView clearAllFaceEffects]; self.faceType = -1; } if (self.beautyType != -1) { [self.beautyView clearAllBeautyEffects]; self.beautyType = -1; } } _nameLabel.text = YZMsg(model.beautyTitle); [self.slider setSliderValue:[NSString stringWithFormat:@"%ld",(long)defaultValue]]; [self.slider setValue:defaultValue animated:YES]; } //滤镜 - (void)handleFiltersEffect:(NSInteger)filterType filterName:(nonnull NSString *)filtetName { if ([self.delegate respondsToSelector:@selector(handleFiltersEffectWithType: withFilterName:)]) { [self.delegate handleFiltersEffectWithType:filterType withFilterName:filtetName]; } } #pragma mark - lazy - (MHBeautyView *)beautyView { if (!_beautyView) { CGFloat bottom = _lineView.frame.origin.y + _lineView.frame.size.height; _beautyView = [[MHBeautyView alloc] initWithFrame:CGRectMake(0, bottom, window_width, MHBeautyAssembleViewHeight -bottom - MHBottomViewHeight)]; _beautyView.delegate = self; } return _beautyView; } ///修改MHUI - (MHBeautyFaceView *)faceView { if (!_faceView) { ///修改MHUI CGFloat bottom = _lineView.frame.origin.y + _lineView.frame.size.height; // CGFloat bottom = _segmentControl.frame.origin.y + _segmentControl.frame.size.height; _faceView = [[MHBeautyFaceView alloc] initWithFrame:CGRectMake(0, bottom, window_width, MHBeautyAssembleViewHeight-bottom-MHBottomViewHeight)]; _faceView.delegate = self; } return _faceView; } - (MHFiltersView *)filtersView { if (!_filtersView) { CGFloat bottom = _lineView.frame.origin.y + _lineView.frame.size.height; _filtersView = [[MHFiltersView alloc] initWithFrame:CGRectMake(0, bottom, window_width, MHBeautyAssembleViewHeight-bottom-MHBottomViewHeight)]; _filtersView.delegate = self; } return _filtersView; } ///修改MHUI - (MHCompleteBeautyView *)completeView { if (!_completeView) { ///修改MHUI CGFloat bottom = _lineView.frame.origin.y + _lineView.frame.size.height; _completeView = [[MHCompleteBeautyView alloc] initWithFrame:CGRectMake(0, bottom , window_width, MHBeautyAssembleViewHeight-bottom-MHBottomViewHeight)]; _completeView.delegate = self; } return _completeView; } - (UIView *)lineView { if (!_lineView) { CGFloat bottom = _segmentControl.frame.origin.y + _segmentControl.frame.size.height; _lineView = [[UIView alloc] initWithFrame:CGRectMake(0, bottom, window_width, 0.5)]; _lineView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:MHBlackAlpha]; UIView * view = [[UIView alloc] initWithFrame:_lineView.bounds]; [_lineView addSubview:view]; view.backgroundColor = LineColor; } return _lineView; } ///修改MHUI - (MHBottomView*)bottomView{ if (!_bottomView) { __weak typeof(self) weakSelf = self; CGFloat bottom = _beautyView.frame.origin.y + _beautyView.frame.size.height; _bottomView = [[MHBottomView alloc] initWithFrame:CGRectMake(0, bottom, window_width, MHBottomViewHeight)]; _bottomView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; _bottomView.clickBtn = ^(BOOL isTakePhoto) { [weakSelf cameraAction:isTakePhoto]; }; } return _bottomView; } - (MHBeautySlider *)slider { if (!_slider) { _slider = [[MHBeautySlider alloc] initWithFrame:CGRectMake(80, MHSliderwTop, self.frame.size.width - 80*2, MHSliderwHeight)]; _slider.minimumValue = 0; _slider.maximumValue = 100; UIImage *minImg = BundleImg(@"wire") [_slider setMinimumTrackImage:minImg forState:UIControlStateNormal]; UIImage *maxImg = BundleImg(@"wire drk"); [_slider setMaximumTrackImage:maxImg forState:UIControlStateNormal]; UIImage *pointImg = BundleImg(@"sliderButton"); [_slider setThumbImage:pointImg forState:UIControlStateNormal]; _slider.continuous = YES; __weak typeof(self) weakSelf = self; _slider.valueChanged = ^(MHBeautySlider * _Nonnull slider) { [weakSelf handleBeautyAssembleEffectWithValue:slider.value]; weakSelf.slider.sliderValue = [NSString stringWithFormat:@"%ld", (long)slider.value]; }; } return _slider; } - (UILabel *)nameLabel{ if (!_nameLabel) { _nameLabel = [[UILabel alloc] init]; _nameLabel.frame = CGRectMake(20, MHSliderwTop, 60, MHSliderwHeight); _nameLabel.textColor = [UIColor whiteColor]; _nameLabel.textAlignment = NSTextAlignmentCenter; } return _nameLabel; } -(int)sdkLevelTYpe{ return [[MHSDK shareInstance] getSDKLevel]; } @end