// // QXRoomSingerAuthViewController.m // QXLive // // Created by 启星 on 2025/11/12. // #import "QXRoomSingerAuthViewController.h" #import "QXAudioRecorderView.h" #import "QXMineNetwork.h" @interface QXRoomSingerAuthViewController () @property (nonatomic,strong)UIView *contentView; @property (nonatomic,strong)UIImageView *contentImageView; @property (nonatomic,strong)UIImageView *myAuthImageView; @property (nonatomic,strong)UIImageView *authStatusImageView; @property (nonatomic,strong)UILabel *authStatusLabel; @property (nonatomic,strong)QXAudioRecorderView *audioRecorderView; @end @implementation QXRoomSingerAuthViewController - (void)viewDidLoad { self.isNoChangeBgImage = YES; [super viewDidLoad]; // Do any additional setup after loading the view. } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO animated:YES]; self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:RGB16(0xffffff)}; } -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:RGB16(0x000000)}; } -(void)setNavgationItems{ [super setNavgationItems]; self.navigationTintColor = RGB16(0xffffff); self.navigationItem.title = @"歌手认证"; UIButton*recordBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)]; [recordBtn setImage:[UIImage imageNamed:@"nobility_help_icon"] forState:(UIControlStateNormal)]; recordBtn.titleLabel.font = [UIFont systemFontOfSize:16]; [recordBtn addTarget:self action:@selector(helpAction) forControlEvents:(UIControlEventTouchUpInside)]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:recordBtn]; } - (void)initSubViews{ [self updateBgImage:@"singer_auth_bg"]; self.contentView = [[UIView alloc] initWithFrame:CGRectMake(16, ScaleWidth(300), SCREEN_WIDTH-32, ScaleWidth(140))]; [self.view addSubview:self.contentView]; self.contentImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"singer_auth_center_bg"]]; self.contentImageView.contentMode = UIViewContentModeScaleToFill; self.contentImageView.frame = self.contentView.bounds; [self.contentView addSubview:self.contentImageView]; self.myAuthImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"singer_auth_title_image"]]; self.myAuthImageView.frame = CGRectMake((self.contentView.width-ScaleWidth(69))/2, ScaleWidth(10), ScaleWidth(69), ScaleWidth(24)); [self.contentView addSubview:self.myAuthImageView]; self.authStatusImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"singer_auth_status_no"]]; self.authStatusImageView.frame = CGRectMake((self.contentView.width-ScaleWidth(52))/2, self.myAuthImageView.bottom+ScaleWidth(22), ScaleWidth(52), ScaleWidth(52)); [self.contentView addSubview:self.authStatusImageView]; self.authStatusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.authStatusImageView.bottom+4, self.contentView.width, 17)]; self.authStatusLabel.text = @"暂未认证"; self.authStatusLabel.textColor = RGB16A(0x000000, 0.45); self.authStatusLabel.font = [UIFont systemFontOfSize:12]; self.authStatusLabel.textAlignment = NSTextAlignmentCenter; [self.contentView addSubview:self.authStatusLabel]; self.audioRecorderView = [[QXAudioRecorderView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT-kSafeAreaBottom-246, SCREEN_WIDTH, 246+kSafeAreaBottom) maxDuration:300]; self.audioRecorderView.delegate = self; self.audioRecorderView.hidden = YES; [self.view addSubview:self.audioRecorderView]; [self conifgViews]; } -(void)conifgViews{ if ([self.singer_status isEqualToString:@"-1"] || [self.singer_status isEqualToString:@"2"]) { self.audioRecorderView.hidden = NO; }else{ self.audioRecorderView.hidden = YES; } if ([self.singer_status isEqualToString:@"-1"]) { self.authStatusLabel.text = @"暂未认证"; self.authStatusLabel.textColor = RGB16A(0x000000, 0.45); }else if ([self.singer_status isEqualToString:@"0"]) { self.authStatusLabel.text = @"待审核"; self.authStatusLabel.textColor = RGB16(0xFF8832); }else if ([self.singer_status isEqualToString:@"1"]) { self.authStatusLabel.text = @"已认证"; self.authStatusLabel.textColor = QXConfig.themeColor; }else if ([self.singer_status isEqualToString:@"2"]) { self.authStatusLabel.text = @"已拒绝"; self.authStatusLabel.textColor = RGB16(0xFF2424); } } -(void)helpAction{ NSString *urlString = [NSString stringWithFormat:@"%@api/Page/page_show?id=%@",ServerUrl,@"33"]; QXBaseWebViewController *vc = [[QXBaseWebViewController alloc] init]; vc.urlStr = urlString; [self.navigationController pushViewController:vc animated:YES]; } #pragma mark - AudioRecorderViewDelegate - (void)qxAudioRecorderView:(QXAudioRecorderView *)recorderView didChangeState:(AudioRecorderState)state{ NSLog(@"录音状态改变: %ld", (long)state); } - (void)qxAudioRecorderView:(QXAudioRecorderView *)recorderView didFinishRecordingWithMP3File:(NSURL *)mp3FileURL duration:(NSTimeInterval)duration{ NSLog(@"录音完成,MP3文件: %@, 总时长: %.1f秒", mp3FileURL, duration); // 这里可以上传文件或进行其他处理 NSData *audioData = [NSData dataWithContentsOfURL:mp3FileURL]; NSLog(@"MP3文件大小: %.2f KB", audioData.length / 1024.0); } - (void)qxAudioRecorderView:(QXAudioRecorderView *)recorderView didFailWithError:(NSError *)error{ NSLog(@"录音失败: %@", error); } - (void)qxAudioRecorderView:(QXAudioRecorderView *)recorderView didUpdateProgress:(NSTimeInterval)progress totalDuration:(NSTimeInterval)totalDuration{ // 实时更新进度 } -(void)didClickAuthWithFileUrl:(NSURL *)audioFileUrl{ NSData *data = [NSData dataWithContentsOfURL:audioFileUrl]; @weakify(self) showLoadingInView(self.view); [[QXCOSUploadManager shareManager] audioUploadFile:data withObjectKey:audioFileUrl.lastPathComponent complete:^(NSString * _Nonnull fileUrl, QXCOSUploadImageState state) { @strongify(self); dispatch_async(dispatch_get_main_queue(), ^{ hideLoadingInView(self.view); if ([fileUrl isExist]) { [QXMineNetwork singerAuthWithSong:fileUrl successBlock:^(NSDictionary * _Nonnull dict) { showToast(@"上传成功"); self.singer_status = @"0"; [self conifgViews]; } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { showToast(@"上传失败"); }]; }else{ showToast(@"上传失败"); } }); }]; } @end