// // MOFirstInfoSetVC.m // MiMoLive // // Created by SuperC on 2023/10/9. // #import "MOFirstInfoSetVC.h" #import "POLanguageVC.h" #import "MOImagePickerController.h" #import "MOAnchorRecommendVC.h" #import "UIImage+YYAdd.h" #import "MOBacklogTimeSelectView.h" @interface MOFirstInfoSetVC () @property (weak, nonatomic) IBOutlet UILabel *tipOneLab; @property (weak, nonatomic) IBOutlet UILabel *tipTwoLab; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *titleBottom; @property (weak, nonatomic) IBOutlet UIImageView *bgImgView; @property (weak, nonatomic) IBOutlet UIView *centerView; @property (weak, nonatomic) IBOutlet UIImageView *headImgView; @property (weak, nonatomic) IBOutlet UIButton *manBtn; @property (weak, nonatomic) IBOutlet UIButton *womanBtn; @property (weak, nonatomic) IBOutlet UIImageView *nameBgImgView; @property (weak, nonatomic) IBOutlet UITextField *nameTef; @property (weak, nonatomic) IBOutlet UIButton *randomNameButton; @property (weak, nonatomic) IBOutlet UIImageView *birthdayBgImgView; @property (weak, nonatomic) IBOutlet UILabel *birthdayLabel; @property (weak, nonatomic) IBOutlet UIButton *doneBtn; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *doneBtnBottom; /** 头像的Url */ @property (nonatomic, copy) NSString *headImgUrl; /** 头像 */ @property (nonatomic, strong) UIImage *headImg; @property (nonatomic, copy) NSString *birthdayString; @property (nonatomic, copy) NSArray *nicknames; @property (nonatomic, assign) NSInteger lastNicknameIndex; @property (nonatomic, copy) NSArray *avatars; #if !TARGET_IPHONE_SIMULATOR @property (nonatomic, strong) SSDKUser *userData; #endif /** 男生随机对象 */ @property (nonatomic, strong) NSDictionary *maleDict; /** 女生随机对象 */ @property (nonatomic, strong) NSDictionary *femaleDict; @end @implementation MOFirstInfoSetVC - (void)viewDidLoad { [super viewDidLoad]; [self initData]; [self setupUI]; #if !TARGET_IPHONE_SIMULATOR [self loadRandomProfileData]; #endif } - (void)initData { self.headImgUrl = @""; self.birthdayString = @"2000-01-01"; self.lastNicknameIndex = -1; } #if !TARGET_IPHONE_SIMULATOR /// 预输入用户数据,第三方登录的才有 - (void)preFillUpUserData:(SSDKUser *)userData { self.userData = userData; // MOLogV(@"name = %@, icon = %@, bigIcon = %@, gender = %zd, birthday = %@", userData.nickname, userData.icon, userData.bigIcon, userData.gender, userData.birthday); } - (void)loadRandomProfileData { WEAKSELF [kHttpManager toGetTheRandomProfileWithParams:nil andBlock:^(id _Nonnull data, NSError * _Nonnull error) { if(kCode_Success){ NSLog(@"%@",[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]); NSDictionary *theData = (NSDictionary *)data[@"data"]; weakSelf.maleDict = [MODataManager objectOrNilForKey:@"male" fromDictionary:theData]; weakSelf.femaleDict = [MODataManager objectOrNilForKey:@"female" fromDictionary:theData]; [weakSelf toUpdataTheNicknamesAndAvatars]; if (weakSelf.userData.nickname.length > 0) {//第三方登录有昵称 weakSelf.nameTef.text = weakSelf.userData.nickname; } else { if (weakSelf.nicknames.count > 0) {//获取配置昵称随机 weakSelf.nameTef.text = [weakSelf randomNickname]; } } if (self.userData.icon.length > 0) {//第三方登录有头像 [weakSelf.headImgView sd_setImageWithURL:[NSURL URLWithString:self.userData.icon] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { weakSelf.headImg = image; [weakSelf uploadOssS3]; }]; } else { if (weakSelf.avatars.count > 0) {//获取配置头像随机 weakSelf.headImgUrl = [self randomAvatar]; [weakSelf.headImgView sd_setImageWithURL:[NSURL URLWithString:weakSelf.headImgUrl] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]]; } } } else{ MOLogV(@"toGetTheRandomProfileWithParams 接口报错了"); } }]; } #endif - (void)toUpdataTheNicknamesAndAvatars{ if(self.womanBtn.selected){ self.nicknames = [MODataManager objectOrNilForKey:@"nicknames" fromDictionary:self.femaleDict]; self.avatars = [MODataManager objectOrNilForKey:@"avatars" fromDictionary:self.femaleDict]; } else{ self.nicknames = [MODataManager objectOrNilForKey:@"nicknames" fromDictionary:self.maleDict]; self.avatars = [MODataManager objectOrNilForKey:@"avatars" fromDictionary:self.maleDict]; } } - (NSString *)randomAvatar { if (self.avatars.count == 0) return @""; if (self.avatars.count == 1) { return self.avatars.firstObject; } NSUInteger index = arc4random_uniform((uint32_t)self.avatars.count); return self.avatars[index]; } - (NSString *)randomNickname { if (self.nicknames.count == 0) return @""; if (self.nicknames.count == 1) { self.lastNicknameIndex = 0; return self.nicknames.firstObject; } NSInteger newIndex = self.lastNicknameIndex; while (self.nicknames.count > 1 && newIndex == self.lastNicknameIndex) { newIndex = arc4random_uniform((uint32_t)self.nicknames.count); } self.lastNicknameIndex = newIndex; return self.nicknames[newIndex]; } - (void)randomNameButtonAction { [self toUpdateTheAvatars];//更改头像 //更改昵称 NSString *nickname = [self randomNickname]; self.nameTef.text = nickname; [self updateDoneButtonState]; } - (void)setupUI{ self.centerView.backgroundColor = [UIColor clearColor]; self.titleBottom.constant = kScaleWidth(80); self.tipOneLab.font = [MOTextTools poppinsExtraBoldFont:36]; self.tipOneLab.textColor = [MOTools colorWithHexString:@"#FFFFFF"]; self.tipOneLab.text = NSLocalString(@"mimo_2_live_welcome"); self.tipOneLab.numberOfLines = 1; self.tipOneLab.adjustsFontSizeToFitWidth = YES; self.tipTwoLab.font = [MOTextTools poppinsSemiBoldFont:28]; self.tipTwoLab.textColor = [MOTools colorWithHexString:@"#FFFFFF"]; self.tipTwoLab.text = NSLocalString(@"mimo_login_set_info"); self.tipOneLab.numberOfLines = 1; self.tipOneLab.adjustsFontSizeToFitWidth = YES; [self.centerView sendSubviewToBack:self.headImgView]; self.headImgView.userInteractionEnabled = YES; self.headImgView.layer.cornerRadius = 60; self.headImgView.layer.masksToBounds = YES; [self.headImgView setImage:[UIImage imageNamed:@"icon_mine_placeHolder"]]; self.headImgView.contentMode = UIViewContentModeScaleAspectFill; UITapGestureRecognizer *headTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(headImgClick)]; [self.headImgView addGestureRecognizer:headTap]; [self.manBtn setTitle:NSLocalString(@"mimo_login_gender_man") forState:UIControlStateNormal]; [self.manBtn setImage:[UIImage imageNamed:@"icon_wel_male"] forState:UIControlStateNormal]; [self.manBtn setImage:[UIImage imageNamed:@"icon_wel_male"] forState:UIControlStateSelected]; [self.manBtn setBackgroundImage:[UIImage imageNamed:@"img_selected_gender_bg"] forState:UIControlStateSelected]; [self.manBtn setFont:[MOTextTools poppinsBoldFont:16]]; [self.manBtn setTitleColor:[MOTools colorWithHexString:@"#33C9FF"] forState:UIControlStateNormal]; self.manBtn.titleEdgeInsets = UIEdgeInsetsMake(0.0, 4.0, 0.0, 0.0); self.manBtn.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 4.0); self.manBtn.backgroundColor = [MOTools colorWithHexString:@"#17171A" alpha:0.2]; self.manBtn.layer.masksToBounds = YES; self.manBtn.layer.cornerRadius = 12; #if !TARGET_IPHONE_SIMULATOR if (self.userData && self.userData.gender == 0) { self.manBtn.selected = YES; } #endif [self.womanBtn setTitle:NSLocalString(@"mimo_login_gender_woman") forState:UIControlStateNormal]; [self.womanBtn setImage:[UIImage imageNamed:@"icon_wel_female"] forState:UIControlStateNormal]; [self.womanBtn setImage:[UIImage imageNamed:@"icon_wel_female"] forState:UIControlStateSelected]; [self.womanBtn setBackgroundImage:[UIImage imageNamed:@"img_selected_gender_bg"] forState:UIControlStateSelected]; [self.womanBtn setFont:[MOTextTools poppinsBoldFont:16]]; [self.womanBtn setTitleColor:[MOTools colorWithHexString:@"#FF4DA6"] forState:UIControlStateNormal]; self.womanBtn.titleEdgeInsets = UIEdgeInsetsMake(0.0, 4.0, 0.0, 0.0); self.womanBtn.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 4.0); self.womanBtn.backgroundColor = [MOTools colorWithHexString:@"#17171A" alpha:0.2]; self.womanBtn.layer.masksToBounds = YES; self.womanBtn.layer.cornerRadius = 12; #if !TARGET_IPHONE_SIMULATOR if (self.userData && self.userData.gender == 1) { self.womanBtn.selected = YES; } #endif self.nameBgImgView.image = [[UIImage imageNamed:@"img_info_border_bg"] imageByResizeToSize:CGSizeMake(SCREENWIDTH - 48, 52)]; [self.nameTef setFont:[MOTextTools poppinsRegularFont:16]]; self.nameTef.textColor = kBaseTextColor_1; self.nameTef.backgroundColor = [UIColor clearColor]; self.nameTef.delegate = self; [self.nameTef addTarget:self action:@selector(nameTextFieldChanged:) forControlEvents:UIControlEventEditingChanged]; self.nameTef.placeholder = NSLocalString(@"mimo_login_nick_name_placeholder"); self.birthdayBgImgView.image = [[UIImage imageNamed:@"img_info_border_bg"] imageByResizeToSize:CGSizeMake(SCREENWIDTH - 48, 52)]; self.birthdayBgImgView.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(birthdayBgImgViewTapAction)]; [self.birthdayBgImgView addGestureRecognizer:tap]; self.birthdayLabel.font = [MOTextTools poppinsRegularFont:16]; self.birthdayLabel.textColor = kBaseTextColor_1; self.birthdayLabel.text = [NSString stringWithFormat:@"%@", self.birthdayString]; [self.doneBtn setFont:[MOTextTools poppinsSemiBoldFont:16]]; [self.doneBtn setTitleColor:[MOTools colorWithHexString:@"#FFFFFF"] forState:UIControlStateNormal]; [self.doneBtn setTitle:NSLocalString(@"mimo_login_next_text") forState:UIControlStateNormal]; self.doneBtn.layer.masksToBounds = YES; self.doneBtn.layer.cornerRadius = 12; NSArray *colorArr = @[kBaseColorLeft,kBaseColorRight]; UIImage *image = [MOTools createGradientRectImageWithBounds:CGRectMake(0, 0, (SCREENWIDTH - 24.0 * 2), 48.0) Colors:colorArr GradientType:0]; [self.doneBtn setBackgroundImage:image forState:UIControlStateNormal]; self.doneBtnBottom.constant = kBottomSafeAreaInset + 16; self.doneBtn.alpha = 0.5; self.randomNameButton.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft; [self.randomNameButton setTitle:NSLocalString(@"mimo_login_name_random") forState:UIControlStateNormal]; [self.randomNameButton setTitleColor:kBaseTextColor_3 forState:UIControlStateNormal]; self.randomNameButton.titleLabel.font = [MOTextTools poppinsRegularFont:14]; [self.randomNameButton addTarget:self action:@selector(randomNameButtonAction) forControlEvents:UIControlEventTouchUpInside]; [self updateDoneButtonState]; } #pragma mark - UITextFieldDelegate - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField == self.nameTef) { NSString *toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; return toBeString.length <= 16; } return YES; } - (void)nameTextFieldChanged:(UITextField *)textField { [self updateDoneButtonState]; } - (void)updateDoneButtonState { BOOL hasGender = self.manBtn.selected || self.womanBtn.selected; BOOL hasName = self.nameTef.text.length >= 2; BOOL hasAvatar = self.headImg || self.headImgUrl.length > 0; // self.doneBtn.enabled = hasGender && hasName && hasAvatar; self.doneBtn.alpha = (hasGender && hasName && hasAvatar) ? 1.0 : 0.5; } - (void)birthdayBgImgViewTapAction { WEAKSELF MOBacklogTimeSelectView *setRemindTimeView = [[MOBacklogTimeSelectView alloc] initForOperateSuccessWithFrame:CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT)]; setRemindTimeView.doneBtnBlock = ^(NSDate * _Nonnull endDate) { NSDateFormatter *dateFormatter = [NSDateFormatter getSingletonDateFormatterWithFormat:@"yyyy-MM-dd"]; self.birthdayString = [dateFormatter stringFromDate:endDate]; weakSelf.birthdayLabel.text = self.birthdayString; }; [setRemindTimeView show]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 不允许右滑返回 [self.navigationController.interactivePopGestureRecognizer setEnabled:NO]; } ///头像点击 - (void)headImgClick { MOImagePickerController *imagePickerController = [[MOImagePickerController alloc] initWithMaxImagesCount:1 columnNumber:4 delegate:self pushPhotoPickerVc:YES]; imagePickerController.cropRect = CGRectMake(0, 200.0, SCREENWIDTH, SCREENWIDTH); imagePickerController.allowCrop = YES; [self presentViewController:imagePickerController animated:YES completion:nil]; } - (IBAction)manBtnClick:(id)sender { if(self.manBtn.selected){ return; } self.manBtn.selected = YES; self.womanBtn.selected = NO; [self toUpdataTheNicknamesAndAvatars];//更新头像和昵称源 [self randomNameButtonAction];//更新昵称 } - (IBAction)womanBtnClick:(id)sender { if(self.womanBtn.selected){ return; } self.manBtn.selected = NO; self.womanBtn.selected = YES; [self toUpdataTheNicknamesAndAvatars]; [self randomNameButtonAction];//更新昵称 } - (void)toUpdateTheAvatars{ #if !TARGET_IPHONE_SIMULATOR if (self.userData.icon.length > 0) {//第三方登录有头像 //不做处理 } else { if (self.avatars.count > 0) {//获取配置头像随机 self.headImgUrl = [self randomAvatar]; [self.headImgView sd_setImageWithURL:[NSURL URLWithString:self.headImgUrl] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]]; } } #endif } ///下一步按钮点击 - (IBAction)nextStepClick:(id)sender { if(self.headImg == nil && self.headImgUrl.length == 0){ [MBProgressHUD showTipMessageInView:NSLocalString(@"mimo_family_apply_avatar_empty_tip")]; return; } if (!self.manBtn.isSelected && !self.womanBtn.isSelected) { [MBProgressHUD showTipMessageInView:NSLocalString(@"mimo_user_edit_select_gender_title")]; return; } NSInteger gender = 1; if(self.manBtn.selected == YES){ gender = 1; } else { gender = 2; } if(self.nameTef.text.length == 0){ [MBProgressHUD showTipMessageInView:NSLocalString(@"mimo_common_enter_nickname")]; return; } if(self.nameTef.text.length == 1){//昵称过短 [MBProgressHUD showTipMessageInView:NSLocalString(@"mimo_login_nick_name_short_tips")]; return; } NSDictionary *dict = @{@"avatar":self.headImgUrl, @"gender":@(gender), @"nickname":self.nameTef.text, @"birthday":self.birthdayString}; WEAKSELF [kHttpManager toSettingInfoWithParams:dict andBlock:^(id _Nonnull data, NSError * _Nonnull error) { if(kCode_Success){ // [MBProgressHUD showTipMessageInWindow:NSLocalString(@"mimo_common_success")]; NSDictionary *baseDict = data[@"data"]; //更新头像 NSString *avatarString = [MODataManager objectOrNilForKey:@"avatar" fromDictionary:baseDict]; if(avatarString.length > 0){ [[NSUserDefaults standardUserDefaults] setObject:avatarString forKey:kAvatar]; } //更新性别信息 NSInteger gender = [[MODataManager objectOrNilForKey:@"gender" fromDictionary:baseDict] integerValue]; [[NSUserDefaults standardUserDefaults] setObject:@(gender) forKey:kGender]; //更新昵称信息 NSString *nickNameString = [MODataManager objectOrNilForKey:@"nickname" fromDictionary:baseDict]; if(nickNameString.length > 0){ [[NSUserDefaults standardUserDefaults] setObject:nickNameString forKey:kNickName]; } [[NSUserDefaults standardUserDefaults] synchronize]; [weakSelf toMainVC]; } else{ kShowNetError(data) } }]; } - (void)toMainVC { if (self.navigationController.presentingViewController) {//如果是present出来的要dismiss [self.navigationController dismissViewControllerAnimated:YES completion:nil]; } MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; [mainTabbar toResetSetupTabbar]; [UIApplication sharedApplication].keyWindow.rootViewController = mainTabbar; } - (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto infos:(NSArray *)infos{ self.headImg = photos.firstObject; [self.headImgView setImage:self.headImg]; [self uploadOssS3]; } - (void)uploadOssS3 { NSDictionary *dict = @{@"type":@(1), @"suffix":@"jpg"}; WEAKSELF [kHttpManager getBaseOssS3WithParams:dict andBlock:^(id _Nonnull data, NSError * _Nonnull error) { if(kCode_Success){ NSDictionary *tempDict = data[@"data"]; NSString *baseUrl = [MODataManager objectOrNilForKey:@"preSignUrl" fromDictionary:tempDict]; weakSelf.headImgUrl = [MODataManager objectOrNilForKey:@"fileUrl" fromDictionary:tempDict]; [weakSelf updateDoneButtonState]; NSData *imageData = UIImageJPEGRepresentation(weakSelf.headImg, 1); [kHttpManager sendSingleChatImage:imageData params:nil type:@"image/jpg" andBaseUrl:baseUrl withUploadProgressHandler:^(NSProgress * uploadProgress) { float progress = 1.0*uploadProgress.completedUnitCount/uploadProgress.totalUnitCount; MOLogV(@"Image upload Progress: %.2f%%", progress * 100); } andCompletionBlock:^(id _Nonnull data, NSError * _Nonnull error) { if(error == nil){ MOLogV(@"图片上传成功~"); } }]; } else{ kShowNetError(data) } }]; } @end