// // QXFillUserInfoViewController.m // SoundRiver // // Created by Reyna on 2020/10/27. // #import "QXFillUserInfoViewController.h" #import "BRDatePickerView.h" #import "NSDate+BRPickerView.h" #import #import #import "UIImage+QX.h" #import "NSString+QX.h" #import "QXApi.h" #import "QXOSSManager.h" #import "QXLoginNetwork.h" #import "AppDelegate.h" //#import #import @interface QXFillUserInfoViewController () @property (weak, nonatomic) IBOutlet UITextField *userNameTF; //用户昵称TF @property (weak, nonatomic) IBOutlet UITextField *codeTF; //邀请码TF @property (weak, nonatomic) IBOutlet UIButton *girlBtn; @property (weak, nonatomic) IBOutlet UIButton *boyBtn; @property (weak, nonatomic) IBOutlet UILabel *yearLabel; @property (weak, nonatomic) IBOutlet UILabel *monthLabel; @property (weak, nonatomic) IBOutlet UILabel *dayLabel; @property (weak, nonatomic) IBOutlet UIButton *headerBtn; @property (weak, nonatomic) IBOutlet UIButton *randomBtn; @property (weak, nonatomic) IBOutlet UIButton *comitUserInfoBtn; @property (nonatomic, assign) NSInteger mSex; @property (nonatomic, strong) NSString *birthday; @property (nonatomic, strong) NSString *avartar; @property (weak, nonatomic) IBOutlet UILabel *nickTitleLabel; @property (weak, nonatomic) IBOutlet UILabel *sexTitleLabel; @property (weak, nonatomic) IBOutlet UILabel *birthdayTitleLabel; @property (weak, nonatomic) IBOutlet UILabel *invitTitleLabel; @property (weak, nonatomic) IBOutlet UILabel *yearTitleLabel; @property (weak, nonatomic) IBOutlet UILabel *monthTitleLabel; @property (weak, nonatomic) IBOutlet UILabel *dayTitleLabel; @property (nonatomic, assign) BOOL isPhoto; @property (nonatomic,strong)UIButton *backBtn; @end @implementation QXFillUserInfoViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)initSubViews { self.headerBtn.layer.masksToBounds = YES; self.headerBtn.layer.cornerRadius = 47.5; self.headerBtn.imageView.contentMode = UIViewContentModeScaleAspectFill; self.backBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, kSafeAreaTop+5, 40, 40)]; [self.backBtn setImage:[UIImage imageNamed:@"back"] forState:(UIControlStateNormal)]; [self.backBtn addTarget:self action:@selector(backAction) forControlEvents:(UIControlEventTouchUpInside)]; [self.view addSubview:self.backBtn]; if ([[QXGlobal shareGlobal].getKeyWindow.rootViewController isKindOfClass:[self class]]) { self.backBtn.hidden = YES; } [self getRandomUsername]; [self configLanguage]; } -(void)configLanguage{ [self.comitUserInfoBtn setTitle:QXText(@"进入羽声语音") forState:(UIControlStateNormal)]; [self.comitUserInfoBtn setTitleColor:QXConfig.btnTextColor forState:(UIControlStateNormal)]; self.comitUserInfoBtn.backgroundColor = QXConfig.themeColor; self.nickTitleLabel.text = QXText(@"起个好听的名字"); NSString *noChangeText = [NSString stringWithFormat:@"(%@)",QXText(@"注册成功,不可更改")]; NSString *str = [NSString stringWithFormat:@"%@%@",QXText(@"选择您的性别"),noChangeText]; NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str]; [attr yy_setFont:[UIFont boldSystemFontOfSize:16] range:NSMakeRange(0, str.length)]; [attr yy_setFont:[UIFont systemFontOfSize:16] range:[noChangeText rangeOfString:str]]; [attr yy_setColor:RGB16A(0x000000, 0.45) range:NSMakeRange(0, str.length)]; [attr yy_setColor:RGB16A(0x000000, 0.45) range:[noChangeText rangeOfString:str]]; self.sexTitleLabel.attributedText = attr; self.birthdayTitleLabel.text = QXText(@"您的生日"); NSString *noChangeText1 = [NSString stringWithFormat:@"(%@)",QXText(@"选填")]; NSString *str1 = [NSString stringWithFormat:@"%@%@",QXText(@"邀请码"),noChangeText1]; NSMutableAttributedString *attr1 = [[NSMutableAttributedString alloc] initWithString:str1]; [attr1 yy_setFont:[UIFont boldSystemFontOfSize:16] range:NSMakeRange(0, str1.length)]; [attr1 yy_setFont:[UIFont systemFontOfSize:16] range:[noChangeText1 rangeOfString:str1]]; [attr1 yy_setColor:RGB16A(0x000000, 0.45) range:NSMakeRange(0, str1.length)]; [attr1 yy_setColor:RGB16A(0x000000, 0.45) range:[noChangeText rangeOfString:str1]]; self.invitTitleLabel.attributedText = attr1; [self.randomBtn setTitle:QXText(@"随机") forState:(UIControlStateNormal)]; } -(void)getRandomUsername{ MJWeakSelf [QXLoginNetwork getRandomNickNameSuccessBlock:^(NSString * _Nonnull nickName) { weakSelf.userNameTF.text = nickName; } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { }]; } -(void)getAvartarWithSex:(NSString*)sex{ /// 从相册选中后选择性别不再重新生成头像 if (self.isPhoto) { return; } MJWeakSelf [QXLoginNetwork getHeaderImageWithSex:sex successBlock:^(NSString * _Nonnull imageUrl) { weakSelf.avartar = imageUrl; [weakSelf.headerBtn sd_setBackgroundImageWithURL:[NSURL URLWithString:imageUrl] forState:(UIControlStateNormal)]; } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { }]; } - (IBAction)clearNickName:(id)sender { self.userNameTF.text = @""; } - (IBAction)randomAction:(id)sender { [self getRandomUsername]; } -(void)selectAlbumPhoto { TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:nil]; imagePickerVc.maxImagesCount = 1; imagePickerVc.allowCameraLocation = NO; imagePickerVc.allowPickingOriginalPhoto = NO; imagePickerVc.allowTakeVideo = NO; imagePickerVc.allowPickingVideo = NO; imagePickerVc.showSelectBtn = NO; imagePickerVc.allowCrop = NO; MJWeakSelf [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { if (photos.count) { NSData *imageData = [photos.firstObject qx_compressImageQualityWithToByte:(SCREEN_WIDTH*SCREEN_HEIGHT*2)]; [weakSelf OSSUploadPhotoWithFileData:imageData contentType:[NSString contentTypeWithImageData:imageData]]; } }]; imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen; [imagePickerVc.navigationBar setBackgroundImage:[UIImage qx_imageWithColor:RGB16(0x333333)] forBarMetrics:UIBarMetricsDefault]; [self presentViewController:imagePickerVc animated:YES completion:nil]; } - (void)OSSUploadPhotoWithFileData:(NSData *)fileData contentType:(NSString *)contentType { [self OSSUploadPhotoWithFileData:fileData contentType:contentType isVideoCover:NO]; } - (void)OSSUploadPhotoWithFileData:(NSData *)fileData contentType:(NSString *)contentType isVideoCover:(BOOL)isVideoCover { if (!fileData || !contentType) { showToastInView(QXText(@"资源加载错误"), self.view); return; } if (fileData.length > 1024*1024 && [contentType isEqualToString:IMG_FILE_BASE_PATH]) { showToastInView(QXText(@"请不要上传超过1M的头像"), self.view); return; } NSMutableArray *files = [[NSMutableArray alloc] initWithObjects:fileData, nil]; // NSString *fileBasePath = IMG_FILE_BASE_PATH;// 默认图片上传 // NSString *fileName = [NSString stringWithFormat:@"%@%@/%@.%@",fileBasePath,[[QXOSSManager sharedInstance] currentDate],[NSUUID UUID].UUIDString,contentType]; // NSMutableArray *fileNames = [[NSMutableArray alloc] initWithObjects:fileName, nil]; // __weak typeof(self)weakSelf = self; // showLoadingInView(self.view); // [[QXOSSManager sharedInstance] uploadFile:files withObjectKey:fileNames isAsync:YES complete:^(NSArray *names, UploadImageState state) { // dispatch_async(dispatch_get_main_queue(), ^{ // hideLoadingInView(weakSelf.view); // }); // if (state == UploadImageSuccess) { // NSString *fileName = [names lastObject]; // NSString *fileUrl =[NSString stringWithFormat:@"https://%@.%@/%@",OSS_BUCKET_NAME,OSSEndPoint,fileName]; // weakSelf.avartar = fileUrl; // [weakSelf.headerBtn sd_setImageWithURL:[NSURL URLWithString:fileUrl] forState:(UIControlStateNormal)]; // weakSelf.isPhoto = YES; // }else{ // showToastInView(QXText(@"文件上传失败,请重新尝试"), self.view); // } // }]; __weak typeof(self)weakSelf = self; showLoadingInView(self.view); NSString *fileName = [NSString stringWithFormat:@"%@.%@",[[QXCOSUploadManager shareManager] currentDate],contentType]; [[QXCOSUploadManager shareManager] uploadFile:files withObjectKey:@[fileName] isAsync:YES complete:^(NSArray * _Nonnull names, QXCOSUploadImageState state) { QXLOG(@"uploadstate --- %ld ---url---%@",state,names); dispatch_async(dispatch_get_main_queue(), ^{ hideLoadingInView(weakSelf.view); }); if (state == QXCOSUploadImageSuccess) { weakSelf.avartar = names.firstObject; [weakSelf.headerBtn sd_setImageWithURL:[NSURL URLWithString:weakSelf.avartar] forState:(UIControlStateNormal)]; }else{ showToastInView(QXText(@"文件上传失败,请重新尝试"), weakSelf.view); } }]; } -(void)backAction{ [self.navigationController popViewControllerAnimated:YES]; } #pragma mark - Request - (void)isGoToRoomRequest { // [self.adapter fetchTabBarRandomHotRoomDataWithCompletionHandler:^(int64_t roomId, NSString * _Nullable error) { // if (roomId > 0) { // SRUserManager.shared.isNeedTurnToRoom = YES; // } // }]; if ([[QXGlobal shareGlobal].getKeyWindow.rootViewController isKindOfClass:[self class]]) { } } #pragma mark - UITextFieldDelegate - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSString *nameStr = textField.text; if (string.length == 0 && nameStr.length>0) { [nameStr substringToIndex:nameStr.length - 1]; } nameStr = [nameStr stringByReplacingCharactersInRange:range withString:string]; if (nameStr.length > 10) { showToastInView(QXText(@"昵称过长"), self.view); return NO; } return YES; } #pragma mark - TouchEvent - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [super touchesBegan:touches withEvent:event]; [self.view endEditing:YES]; } #pragma mark - Action - (IBAction)girlAction:(id)sender { self.girlBtn.selected = YES; self.boyBtn.selected = NO; [self getAvartarWithSex:@"2"]; } - (IBAction)birthdatyAction:(id)sender { BRDatePickerView *piker = [[BRDatePickerView alloc] initWithPickerMode:(BRDatePickerModeYMD)]; NSDate *minDate = [NSDate br_setYear:1900 month:1 day:1]; piker.minDate = minDate; piker.maxDate = [NSDate date]; piker.selectDate = [NSDate date]; piker.isAutoSelect = YES; MJWeakSelf piker.resultBlock = ^(NSDate * _Nullable selectDate, NSString * _Nullable selectValue) { weakSelf.yearLabel.text = [NSString stringWithFormat:@"%ld",selectDate.br_year]; weakSelf.monthLabel.text = [NSString stringWithFormat:@"%ld",selectDate.br_month]; weakSelf.dayLabel.text = [NSString stringWithFormat:@"%ld",selectDate.br_day]; weakSelf.birthday = selectValue; }; [piker show]; } - (IBAction)boyAction:(id)sender { self.boyBtn.selected = YES; self.girlBtn.selected = NO; [self getAvartarWithSex:@"1"]; } - (IBAction)headerAction:(id)sender { [self selectAlbumPhoto]; } - (IBAction)comitUserInfoBtnAction:(id)sender { //提交信息 if (_userNameTF.text.length == 0) { showToastInView(QXText(@"请填写昵称"), self.view); return; } if (self.girlBtn.selected == NO && self.boyBtn.selected == NO) { showToastInView(QXText(@"请选择性别"), self.view); return; } if (self.birthday.length == 0) { showToastInView(QXText(@"请选择生日"), self.view); return; } [self beginSoundriver]; } - (void)beginSoundriver { __block NSString* sex; if (self.girlBtn.selected) { sex = @"2"; }else { sex = @"1"; } // [LoginAnalyticsManager analyticsClickWechatLoginWith:[NSString stringWithFormat:@"%ld",sex] nick_name:self.userNameTF.text invitation_code:self.codeTF.text]; // NSDictionary *requestDic = @{@"nickname":_userNameTF.text,@"sex":[NSString stringWithFormat:@"%ld",sex]}; // NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:requestDic]; // if ([self.codeTF.text isNotBlank]) { // [params setObject:self.codeTF.text forKey:@"user_no"]; // } // [params setObject:self.birthday forKey:@"birthday"]; // [params setObject:self.avartar forKey:@"head_picture"]; // [SRToastTool showIndicatorInView:self.view]; // AppDelegate *delegate = [AppDelegate shareAppDelegate]; // SRWeakSelf // [SRLoginAdapter qx_updateUserInfoWithParams:params completion:^(BOOL success, NSString * _Nullable error) { // [SRToastTool hideHUDForView:self.view]; // if (success) { // if (delegate.window.rootViewController && [delegate.window.rootViewController isKindOfClass:[SRTabBarController class]]) { // [weakSelf.navigationController dismissViewControllerAnimated:YES completion:^{ // //用户注册成功后调用 // [[SRTabBarController sharedInstance] registUserGotoHotRoom]; // }]; // }else { // [delegate setupMainViewController]; // //用户注册成功后调用 // [[SRTabBarController sharedInstance] registUserGotoHotRoom]; // } // }else{ // [SRToastTool showError:error toView:weakSelf.view]; // } // }]; MJWeakSelf QXLoginModel *loginModel = [QXGlobal shareGlobal].loginModel; [QXLoginNetwork fillUserInfoWithNickname:_userNameTF.text birthday:self.birthday sex:sex avatar:self.avartar init_code:self.codeTF.text user_id:[QXGlobal shareGlobal].loginModel.user_id successBlock:^(id _Nonnull responseObject) { V2TIMUserFullInfo *info = [[V2TIMUserFullInfo alloc] init]; info.faceURL = weakSelf.avartar; info.nickName = weakSelf.userNameTF.text; [[V2TIMManager sharedInstance] setSelfInfo:info succ:^{ QXLOG(@"腾讯IM同步个人信息成功"); } fail:^(int code, NSString * _Nullable desc) { QXLOG(@"腾讯IM同步个人信息失败-code-%d,desc-%@",code,desc); }]; loginModel.sex = sex; loginModel.avatar = weakSelf.avartar; loginModel.nickname = weakSelf.userNameTF.text; loginModel.birthday = weakSelf.birthday; [[QXGlobal shareGlobal] updateUserInfoWithMolde:loginModel]; if ([[QXGlobal shareGlobal].getKeyWindow.rootViewController isKindOfClass:[self class]]) { AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [delegate changeRootViewControllerIsTabbar]; }else{ [self.navigationController dismissViewControllerAnimated:YES completion:nil]; } } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { showToast(msg); }]; } @end