// // LPBeautySetVC.m // zhimi // // Created by 张灿 on 2019/1/17. // Copyright © 2019年 caiPro. All rights reserved. // #import "LPBeautySetVC.h" #import "FUOpenGLView.h" #import "FUCamera.h" #import "FUManager.h" #import "FULiveModel.h" #import "FUAPIDemoBar.h" @interface LPBeautySetVC() { dispatch_semaphore_t signal; dispatch_semaphore_t semaphore; } @property (nonatomic, strong) FUCamera *mCamera ; @property (strong, nonatomic) FUOpenGLView *renderView; @property (strong, nonatomic) FUAPIDemoBar *demoBar; @property (nonatomic,assign) BOOL needSave; //是否需要保存 @property (nonatomic,strong) UIView* botView; @property (nonatomic,strong) UIButton* btnSwitch; @property (nonatomic,assign) BOOL beautyOpen;//美颜是否开启 @end @implementation LPBeautySetVC - (BOOL)prefersStatusBarHidden { return YES; } - (FUAPIDemoBar*)demoBar{ if (!_demoBar) { _demoBar = [[FUAPIDemoBar alloc] initWithFrame:CGRectMake(0, KScreenHeight-182, KScreenWidth, 182)]; if (Is_iPhoneX) { _demoBar.frame = CGRectMake(0, KScreenHeight-182-30, KScreenWidth, 182); } _demoBar.mDelegate = self ; } return _demoBar ; } -(FUCamera *)mCamera { if (!_mCamera) { _mCamera = [[FUCamera alloc] init]; _mCamera.delegate = self ; // _mCamera.dataSource = self; } return _mCamera ; } -(FUOpenGLView *)renderView { if (!_renderView) { _renderView = [[FUOpenGLView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; } return _renderView ; } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [UIApplication sharedApplication].idleTimerDisabled = YES; // if (self.model.type == FULiveModelTypeBeautifyFace) { // [self demoBarSetBeautyDefultParams]; // } [self.mCamera startCapture]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [UIApplication sharedApplication].idleTimerDisabled = YES; [self.mCamera resetFocusAndExposureModes]; [self.mCamera stopCapture]; } -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; // 适配 iPhone X } -(void)dealloc{ NSLog(@"dealloc---"); } -(void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; self.beautyOpen = [LCSaveModel getBeautyModel].beautyOpen; [self.view addSubview:self.renderView]; [self setupUI]; [self.view addSubview:self.demoBar]; self.demoBar.hidden = YES; [self.demoBar mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.offset(-SafeHeight); make.left.right.offset(0.0f); make.height.offset(182.0f); }]; // NSMutableArray *arr = [FUManager shareManager].dataSource; // NSLog(@"%@",arr); // self.model = [FUManager shareManager].dataSource[0][0]; //设置默认曝光度 [self.mCamera setExposureValue:0]; [self.mCamera startCapture]; signal = dispatch_semaphore_create(1); [self addObserver]; [self demoBarSetBeautyDefultParams]; [[FUManager shareManager] loadFilter]; [[FUManager shareManager] setAsyncTrackFaceEnable:NO]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touchScreenAction:)]; [self.renderView addGestureRecognizer:tap]; //v1.1.2 增加相机权限判断 [UCAuthorityManager cameraAuthority:^{ } denied:^{ UIAlertController *systemAlert = [UIAlertController alertControllerWithTitle:@"请在iphone的“设置-隐私-相机”选项中,允许APP访问您的相机。" message:nil preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"现在去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){ if ([[UIDevice currentDevice].systemVersion floatValue] < 10.0) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; } else { // 去系统设置页面 if (@available(iOS 10.0, *)) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil]; } else { // Fallback on earlier versions } } }]; UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]; [systemAlert addAction:cancelAction]; [systemAlert addAction:action]; dispatch_async(dispatch_get_main_queue(), ^{ [self presentViewController: systemAlert animated: YES completion: nil]; }); }]; } - (void)setupUI{ UIButton* backAction = [[UIButton alloc]initWithFrame:CGRectMake(14, StatusBarHeight + 10.0f, 24, 24)]; // if (Is_iPhoneX) { // backAction.frame = CGRectMake(15, 45, 40, 40); // } [backAction setImage:[UIImage imageNamed:@"vqu_images_return_white"] forState:(UIControlStateNormal)]; [backAction setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; backAction.adjustsImageWhenHighlighted = NO; [backAction addTarget:self action:@selector(backClick) forControlEvents:(UIControlEventTouchUpInside)]; [self.view addSubview:backAction]; UIButton* beautSwiBtn = [[UIButton alloc]initWithFrame:CGRectMake(KScreenWidth-62-14, StatusBarHeight + 12.0f, 62, 20)]; if (Is_iPhoneX) { // backAction.frame = CGRectMake(KScreenWidth-68-15, 45, 68, 32); } [beautSwiBtn setImage:[UIImage imageNamed:@"vqu_images_beauty_open"] forState:(UIControlStateSelected)]; [beautSwiBtn setImage:[UIImage imageNamed:@"vqu_images_beauty_off"] forState:(UIControlStateNormal)]; beautSwiBtn.adjustsImageWhenHighlighted = NO; [beautSwiBtn addTarget:self action:@selector(beautSwiClick:) forControlEvents:(UIControlEventTouchUpInside)]; beautSwiBtn.selected = self.beautyOpen; self.btnSwitch = beautSwiBtn; [self.view addSubview:beautSwiBtn]; // UIButton* beauDefBtn = [[UIButton alloc]initWithFrame:CGRectMake(KScreenWidth-62-14, CGRectGetMaxY(beautSwiBtn.frame)+20, 62, 20)]; // beauDefBtn.backgroundColor = HexColorFromRGBA(0x000000, 0.4); // beauDefBtn.layer.cornerRadius = 10; // beauDefBtn.layer.masksToBounds = YES; // beauDefBtn.titleLabel.font = LCFont12; // [beauDefBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; // [beauDefBtn setTitle:@"恢复默认" forState:UIControlStateNormal]; // [beauDefBtn addTarget:self action:@selector(beauDefClick) forControlEvents:(UIControlEventTouchUpInside)]; // [self.view addSubview:beauDefBtn]; UIView* botView = [[UIView alloc]initWithFrame:CGRectMake(0, KScreenHeight-120, KScreenWidth, 70)]; self.botView = botView; [self.view addSubview:botView]; UIButton* beautSaveBtn = [[UIButton alloc]initWithFrame:CGRectMake(KScreenWidth/2-35, 0, 70, 70)]; [beautSaveBtn setImage:[UIImage imageNamed:@"vqu_images_beauty_save"] forState:(UIControlStateNormal)]; beautSaveBtn.adjustsImageWhenHighlighted = NO; [beautSaveBtn addTarget:self action:@selector(beautSave) forControlEvents:(UIControlEventTouchUpInside)]; [self.botView addSubview:beautSaveBtn]; UIButton* beautSetBtn = [[UIButton alloc]initWithFrame:CGRectMake(KScreenWidth/4-45, 8, 54, 54)]; [beautSetBtn setImage:[UIImage imageNamed:@"vqu_images_beauty_be"] forState:(UIControlStateNormal)]; beautSetBtn.adjustsImageWhenHighlighted = NO; [beautSetBtn addTarget:self action:@selector(beautSetClick) forControlEvents:(UIControlEventTouchUpInside)]; [self.botView addSubview:beautSetBtn]; UIButton* beautChangeBtn= [[UIButton alloc]initWithFrame:CGRectMake(KScreenWidth*3/4-10, 8, 54, 54)]; [beautChangeBtn setImage:[UIImage imageNamed:@"vqu_images_beauty_switch"] forState:(UIControlStateNormal)]; beautChangeBtn.adjustsImageWhenHighlighted = NO; [beautChangeBtn addTarget:self action:@selector(changeCamera:) forControlEvents:(UIControlEventTouchUpInside)]; [self.botView addSubview:beautChangeBtn]; } - (void)beautSetClick{ self.botView.hidden = YES; self.demoBar.hidden = NO; } - (void)beauDefClick{ [LCSaveModel saveBeautyModel:[[LZDefaultBeautyModel alloc]init]]; [[FUManager shareManager] resetAllBeautyParams]; [[FUManager shareManager] setBeautyDefaultParameters:FUBeautyModuleTypeSkin]; [[FUManager shareManager] setBeautyDefaultParameters:FUBeautyModuleTypeShape]; int handle = [[FUManager shareManager] getHandleAboutType:FUNamaHandleTypeBeauty]; [FURenderer itemSetParam:handle withName:@"filter_name" value:[[FUManager shareManager].seletedFliter.mParam lowercaseString]]; [FURenderer itemSetParam:handle withName:@"filter_level" value:@([FUManager shareManager].seletedFliter.mValue)]; //滤镜程度 [self demoBarSetBeautyDefultParams]; [self.demoBar restBeautyDefaultValue]; [self.demoBar setDefaultFilter:[FUManager shareManager].seletedFliter]; [ZCHUDHelper showTitle:@"已恢复默认美颜设置"]; self.btnSwitch.selected = YES; self.needSave = YES; } - (void)beautSwiClick:(UIButton *)sender { sender.selected = !sender.selected; self.beautyOpen = sender.selected; if (sender.selected) { [self demoBarSetBeautyDefultParams]; self.needSave = YES; }else{ [self demoBarSetBeautyDefultParams]; self.needSave = YES; } } - (void)changeCamera:(UIButton *)sender { sender.userInteractionEnabled = NO ; dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC); dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){ sender.userInteractionEnabled = YES ; }); [self.mCamera changeCameraInputDeviceisFront:sender.selected]; /**切换摄像头要调用此函数*/ [[FUManager shareManager] onCameraChange]; sender.selected = !sender.selected ; } - (void)beautSave{ //保存然后退出 if (self.beautyOpen) { LZDefaultBeautyModel* model = [LCSaveModel getBeautyModel]; model.beautyOpen = self.beautyOpen; FUBeautyParam *seletedFliter = [FUManager shareManager].seletedFliter; model.selectedFilter = seletedFliter.mParam; model.selectedFilterLevel = seletedFliter.mValue; /* 美肤参数 */ for (FUBeautyParam *param in [FUManager shareManager].skinParams) { [self setBeautyModel:model param:param]; } /* 美型参数 */ for (FUBeautyParam *param in [FUManager shareManager].shapeParams) { [self setBeautyModel:model param:param]; } [LCSaveModel saveBeautyModel:model]; [ZCHUDHelper showTitle:@"保存成功"]; [self back]; }else{ LZDefaultBeautyModel* model = [LCSaveModel getBeautyModel]; model.beautyOpen = self.beautyOpen; [LCSaveModel saveBeautyModel:model]; [self back]; } } - (void)setBeautyModel:(LZDefaultBeautyModel *)model param:(FUBeautyParam *)param{ NSArray *properties = [self getDefaultBeautyModelAllProperties]; if ([properties containsObject:param.mParam]) { [model setValue:@(param.mValue) forKey:param.mParam]; } } //获取对象的所有属性 - (NSArray *)getDefaultBeautyModelAllProperties { u_int count; objc_property_t *properties =class_copyPropertyList([LZDefaultBeautyModel class], &count); NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count]; for (int i = 0; i