// // XPMineUserInfoRecordedSoundView.m // xplan-ios // // Created by duoban on 2022/12/29. // #import "XPMineUserInfoRecordedSoundView.h" #import "SGYProgressView.h" #import #import "XPSkillCardPlayerManager.h" @interface XPMineUserInfoRecordedSoundView() @property (nonatomic,strong) UIScrollView *scrollView; ///背景 @property (nonatomic,strong) UIImageView *bgImageView; ///记录背景 @property (nonatomic,strong) UIImageView *recordView; ///录制圆环进度条 @property (nonatomic,strong) SGYProgressView *progressView; ///录制麦图标 @property (nonatomic,strong) UIImageView *maiView; ///声音动效 @property (nonatomic,strong) SVGAImageView *soundSVGAView; ///录制时间 @property (nonatomic,strong) UILabel *timeView; ///提示 @property (nonatomic,strong) UILabel *promptView; ///录制背景 @property (nonatomic,strong) UIView *bgRecordView; ///录制 @property (nonatomic,strong) UIButton *recordBtn; ///完成录制 @property (nonatomic,strong) UIButton *completedBtn; ///录制下面提示 @property (nonatomic,strong) UILabel *recordTitleView; ///重新录制背景 @property (nonatomic,strong) UIView *bgRerecordView; ///重新录制 @property (nonatomic,strong) UIButton *rerecordBtn; ///重新录制下面提示 @property (nonatomic,strong) UILabel *rerecordTitleView; ///保存声音 @property (nonatomic,strong) UIButton *saveBtn; ///保存声音下面提示 @property (nonatomic,strong) UILabel *saveTitleView; ///删除背景 @property (nonatomic,strong) UIView *bgDeleteView; ///删除 @property (nonatomic,strong) UIButton *deleteBtn; ///结果提示 @property (nonatomic,strong) UILabel *resultView; @end @implementation XPMineUserInfoRecordedSoundView -(instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if(self){ [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.scrollView]; [self.scrollView addSubview:self.bgImageView]; [self.scrollView addSubview:self.recordView]; [self.recordView addSubview:self.progressView]; [self.recordView addSubview:self.maiView]; [self.recordView addSubview:self.soundSVGAView]; [self.scrollView addSubview:self.timeView]; [self.scrollView addSubview:self.promptView]; [self.scrollView addSubview:self.bgRecordView]; [self.bgRecordView addSubview:self.recordBtn]; [self.bgRecordView addSubview:self.completedBtn]; [self.scrollView addSubview:self.recordTitleView]; [self.scrollView addSubview:self.bgRerecordView]; [self.bgRerecordView addSubview:self.rerecordBtn]; [self.scrollView addSubview:self.rerecordTitleView]; [self.scrollView addSubview:self.bgDeleteView]; [self.bgDeleteView addSubview:self.deleteBtn]; [self.scrollView addSubview:self.saveBtn]; [self.scrollView addSubview:self.saveTitleView]; [self.scrollView addSubview:self.resultView]; self.bgRerecordView.hidden = YES; self.rerecordTitleView.hidden = YES; self.bgDeleteView.hidden = YES; self.saveBtn.hidden = YES; self.saveTitleView.hidden = YES; self.resultView.hidden = YES; SVGAParser *soundParser = [SVGAParser new]; @kWeakify(self) [soundParser parseWithNamed:@"mine_info_sound_record" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { @kStrongify(self); self.soundSVGAView.loops = 0; self.soundSVGAView.clearsAfterStop = NO; self.soundSVGAView.videoItem = videoItem; [self.soundSVGAView startAnimation]; } failureBlock:^(NSError * _Nonnull error) { }]; } - (void)initSubViewConstraints { [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self); }]; [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.equalTo(self); make.height.mas_equalTo(kGetScaleWidth(216)); }]; [self.recordView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(kGetScaleWidth(168)); make.width.height.mas_equalTo(kGetScaleWidth(180)); make.centerX.equalTo(self); }]; [self.maiView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(110)); make.center.equalTo(self.recordView); }]; [self.soundSVGAView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(110)); make.center.equalTo(self.recordView); }]; [self.timeView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.recordView.mas_bottom).mas_offset(kGetScaleWidth(30)); make.centerX.equalTo(self); }]; [self.promptView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.timeView.mas_bottom).mas_offset(kGetScaleWidth(15)); make.centerX.equalTo(self); }]; [self.bgRecordView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.promptView.mas_bottom).mas_offset(kGetScaleWidth(116)); make.width.height.mas_equalTo(kGetScaleWidth(64)); make.centerX.equalTo(self); }]; [self.completedBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(28)); make.center.equalTo(self.bgRecordView); }]; [self.recordBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(28)); make.center.equalTo(self.bgRecordView); }]; [self.recordTitleView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.bgRecordView.mas_bottom).mas_offset(kGetScaleWidth(15)); make.centerX.equalTo(self); }]; [self.bgRerecordView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(42)); make.centerY.equalTo(self.recordBtn); make.right.equalTo(self.recordBtn.mas_left).mas_offset(-kGetScaleWidth(56)); }]; [self.rerecordBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(18)); make.center.equalTo(self.bgRerecordView); }]; [self.rerecordTitleView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.bgRerecordView.mas_bottom).mas_offset(kGetScaleWidth(10)); make.centerX.equalTo(self.rerecordBtn); }]; [self.bgDeleteView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(42)); make.centerY.equalTo(self.recordBtn); make.left.equalTo(self.recordBtn.mas_right).mas_offset(kGetScaleWidth(56)); }]; [self.deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(18)); make.center.equalTo(self.bgDeleteView); }]; [self.saveBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(42)); make.centerY.equalTo(self.recordBtn); make.left.equalTo(self.recordBtn.mas_right).mas_offset(kGetScaleWidth(56)); }]; [self.saveTitleView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.rerecordTitleView); make.centerX.equalTo(self.saveBtn); }]; [self.resultView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.recordTitleView.mas_bottom).mas_offset(kGetScaleWidth(54)); make.centerX.equalTo(self); }]; [self.resultView.superview layoutIfNeeded]; self.scrollView.contentSize = CGSizeMake(0, self.resultView.frame.origin.y + self.resultView.frame.size.height ); } -(void)recordingWithTime:(NSString *)time progress:(CGFloat)progress animated:(BOOL)animated{ self.timeView.text = time; [self.progressView setProgress:progress animated:animated startAngle:-M_PI_2 clockwise:YES]; } -(void)uploadRecordSuccess:(BOOL)isAudit{ self.bgDeleteView.hidden = NO; self.resultView.hidden = NO; self.bgRerecordView.hidden = NO; self.rerecordTitleView.hidden = NO; self.saveBtn.hidden = YES; self.soundSVGAView.hidden = YES; self.maiView.hidden = NO; self.recordBtn.hidden = YES; self.completedBtn.hidden = NO; self.saveTitleView.hidden = NO; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView6"); self.saveTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView8"); self.resultView.text = isAudit == YES ? YMLocalizedString(@"XPMineUserInfoRecordedSoundView9") : YMLocalizedString(@"XPMineUserInfoRecordedSoundView4"); } -(void)recordCompleted{ self.resultView.hidden = YES; self.bgDeleteView.hidden = YES; self.bgRerecordView.hidden = NO; self.rerecordTitleView.hidden = NO; self.saveBtn.hidden = NO; self.soundSVGAView.hidden = YES; self.maiView.hidden = NO; self.recordBtn.hidden = YES; self.completedBtn.hidden = NO; self.saveTitleView.hidden = NO; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView6"); self.saveTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView3"); } - (void)startRecord{ self.recordBtn.selected = YES; self.soundSVGAView.hidden = NO; self.maiView.hidden = YES; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView5"); } -(void)stopRecord{ self.recordBtn.selected = NO; self.soundSVGAView.hidden = YES; self.maiView.hidden = NO; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView1"); } -(void)resetRecord{ self.recordBtn.selected = NO; self.soundSVGAView.hidden = YES; self.maiView.hidden = NO; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView1"); self.bgRerecordView.hidden = YES; self.rerecordTitleView.hidden = YES; self.saveBtn.hidden = YES; self.soundSVGAView.hidden = YES; self.maiView.hidden = NO; self.recordBtn.hidden = NO; self.completedBtn.hidden = YES; self.saveTitleView.hidden = YES; self.bgDeleteView.hidden = YES; self.resultView.hidden = YES; self.completedBtn.selected = NO; } -(void)playRecord{ self.maiView.hidden = YES; self.soundSVGAView.hidden = NO; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView7"); } -(void)stopPlayRecord{ self.maiView.hidden = NO; self.soundSVGAView.hidden = YES; self.completedBtn.selected = NO; self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView6"); } -(void)saveRecordAction{ if(self.delegate && [self.delegate respondsToSelector:@selector(saveRecordAudio)]){ [self.delegate saveRecordAudio]; } } #pragma mark - buttonAction -(void)recordAction{ if([XPSkillCardPlayerManager shareInstance].isMineInMic == YES){ [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPMineUserInfoRecordedSoundView10")]; return; } self.recordBtn.selected = !self.recordBtn.selected; if(!self.recordBtn.selected){ self.recordBtn.userInteractionEnabled = NO; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ self.recordBtn.userInteractionEnabled = YES; }); } if(self.recordBtn.selected){ if(self.delegate && [self.delegate respondsToSelector:@selector(startRecordAudio)]){ [self.delegate startRecordAudio]; } return; } if(self.delegate && [self.delegate respondsToSelector:@selector(stopRecordAudio)]){ [self.delegate stopRecordAudio]; } } -(void)playSoundAction{ self.completedBtn.selected = !self.completedBtn.selected; if(self.completedBtn.selected){ if(self.delegate && [self.delegate respondsToSelector:@selector(playRecordAudio)]){ [self.delegate playRecordAudio]; } return; } if(self.delegate && [self.delegate respondsToSelector:@selector(stopPlayRecordAudio)]){ [self.delegate stopPlayRecordAudio]; } } -(void)resetRecordAction{ if(self.delegate && [self.delegate respondsToSelector:@selector(resetRecordAudio)]){ [self.delegate resetRecordAudio]; } } -(void)deleteRecordingAction{ if(self.delegate && [self.delegate respondsToSelector:@selector(deleteRecordingAudio)]){ [self.delegate deleteRecordingAudio]; } } #pragma mark -懒加载 - (UIImageView *)bgImageView{ if (!_bgImageView){ _bgImageView = [UIImageView new]; UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xDBE3FC),UIColorFromRGB(0xF2F1FF),[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1]] gradientType:GradientTypeTopToBottom imgSize:CGSizeMake(KScreenWidth, kGetScaleWidth(216))]; _bgImageView.image = image; } return _bgImageView; } - (UIImageView *)recordView{ if (!_recordView){ _recordView = [UIImageView new]; _recordView.image = kImage(@"mine_recorded_sound_bg"); } return _recordView; } - (SGYProgressView *)progressView{ if (!_progressView){ _progressView = [[SGYProgressView alloc]initWithFrame:CGRectMake(0, 0, kGetScaleWidth(180), kGetScaleWidth(180)) trackWidth:kGetScaleWidth(8)]; UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(kGetScaleWidth(180), kGetScaleWidth(180))]; _progressView.progressColor = [UIColor colorWithPatternImage:image]; _progressView.progressBgColor = [UIColor clearColor]; } return _progressView; } - (UIImageView *)maiView{ if (!_maiView){ _maiView = [UIImageView new]; _maiView.image = kImage(@"mine_recorded_sound_mic"); } return _maiView; } - (SVGAImageView *)soundSVGAView { if (_soundSVGAView == nil) { _soundSVGAView = [[SVGAImageView alloc]init]; _soundSVGAView.contentMode = UIViewContentModeScaleToFill; _soundSVGAView.userInteractionEnabled = NO; _soundSVGAView.hidden = YES; _soundSVGAView.backgroundColor = [UIColor clearColor]; } return _soundSVGAView; } - (UILabel *)timeView{ if (!_timeView){ _timeView = [UILabel labelInitWithText:@"0s/60s" font:kFontSemibold(14) textColor:[DJDKMIMOMColor inputTextColor]]; } return _timeView; } - (UILabel *)promptView{ if (!_promptView){ _promptView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView0") font:kFontRegular(14) textColor:[DJDKMIMOMColor disableButtonTextColor]]; } return _promptView; } - (UIView *)bgRecordView{ if (!_bgRecordView){ _bgRecordView = [[UIView alloc] init]; _bgRecordView.frame = CGRectMake(0,0,kGetScaleWidth(64),kGetScaleWidth(64)); _bgRecordView.layer.backgroundColor = [UIColor clearColor].CGColor; _bgRecordView.layer.shadowColor = [UIColor colorWithRed:225/255.0 green:232/255.0 blue:246/255.0 alpha:1.0].CGColor; _bgRecordView.layer.shadowOffset = CGSizeMake(0,kGetScaleWidth(1)); _bgRecordView.layer.shadowOpacity = kGetScaleWidth(1); _bgRecordView.layer.shadowRadius = kGetScaleWidth(11); UIView *bgView = [UIView new]; bgView.frame = CGRectMake(0,0,kGetScaleWidth(64),kGetScaleWidth(64)); bgView.backgroundColor = [UIColor whiteColor]; bgView.layer.cornerRadius = kGetScaleWidth(32); bgView.layer.masksToBounds = YES; [_bgRecordView addSubview:bgView]; } return _bgRecordView; } -(UIButton *)completedBtn{ if (!_completedBtn){ _completedBtn = [UIButton new]; _completedBtn.hidden = YES; [_completedBtn setImage:kImage(@"mine_recorded_sound_completed") forState:UIControlStateNormal]; [_completedBtn setImage:kImage(@"mine_recorded_sound_completeding") forState:UIControlStateSelected]; [_completedBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; [_completedBtn addTarget:self action:@selector(playSoundAction) forControlEvents:UIControlEventTouchUpInside]; } return _completedBtn; } -(UIButton *)recordBtn{ if (!_recordBtn){ _recordBtn = [UIButton new]; [_recordBtn setBackgroundImage:kImage(@"mine_recorded_sound_start_record") forState:UIControlStateNormal]; [_recordBtn setBackgroundImage:kImage(@"mine_recorded_sound_recording") forState:UIControlStateSelected]; [_recordBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; [_recordBtn addTarget:self action:@selector(recordAction) forControlEvents:UIControlEventTouchUpInside]; } return _recordBtn; } -(UILabel *)recordTitleView{ if (!_recordTitleView){ _recordTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView1") font:kFontRegular(14) textColor:UIColorFromRGB(0x6D6B89)]; } return _recordTitleView; } - (UIView *)bgRerecordView{ if (!_bgRerecordView){ _bgRerecordView = [[UIView alloc] init]; _bgRerecordView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); _bgRerecordView.layer.backgroundColor = [UIColor clearColor].CGColor; _bgRerecordView.layer.shadowColor = [UIColor colorWithRed:225/255.0 green:232/255.0 blue:246/255.0 alpha:1.0].CGColor; _bgRerecordView.layer.shadowOffset = CGSizeMake(0,kGetScaleWidth(1)); _bgRerecordView.layer.shadowOpacity = kGetScaleWidth(1); _bgRerecordView.layer.shadowRadius = kGetScaleWidth(11); UIView *bgView = [UIView new]; bgView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); bgView.backgroundColor = [UIColor whiteColor]; bgView.layer.cornerRadius = kGetScaleWidth(21); bgView.layer.masksToBounds = YES; [_bgRerecordView addSubview:bgView]; } return _bgRerecordView; } -(UIButton *)rerecordBtn{ if (!_rerecordBtn){ _rerecordBtn = [UIButton new]; [_rerecordBtn setImage:kImage(@"mine_recorded_sound_rerecord") forState:UIControlStateNormal]; [_rerecordBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; [_rerecordBtn addTarget:self action:@selector(resetRecordAction) forControlEvents:UIControlEventTouchUpInside]; } return _rerecordBtn; } -(UILabel *)rerecordTitleView{ if (!_rerecordTitleView){ _rerecordTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView2") font:kFontRegular(12) textColor:UIColorFromRGB(0x6D6B89)]; } return _rerecordTitleView; } -(UIView *)bgDeleteView{ if (!_bgDeleteView){ _bgDeleteView = [[UIView alloc] init]; _bgDeleteView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); _bgDeleteView.layer.backgroundColor = [UIColor clearColor].CGColor; _bgDeleteView.layer.shadowColor = [UIColor colorWithRed:225/255.0 green:232/255.0 blue:246/255.0 alpha:1.0].CGColor; _bgDeleteView.layer.shadowOffset = CGSizeMake(0,kGetScaleWidth(1)); _bgDeleteView.layer.shadowOpacity = kGetScaleWidth(1); _bgDeleteView.layer.shadowRadius = kGetScaleWidth(11); UIView *bgView = [UIView new]; bgView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); bgView.backgroundColor = [UIColor whiteColor]; bgView.layer.cornerRadius = kGetScaleWidth(21); bgView.layer.masksToBounds = YES; [_bgDeleteView addSubview:bgView]; } return _bgDeleteView; } -(UIButton *)deleteBtn{ if (!_deleteBtn){ _deleteBtn = [UIButton new]; [_deleteBtn setImage:kImage(@"mine_recorded_sound_del") forState:UIControlStateNormal]; [_deleteBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; [_deleteBtn addTarget:self action:@selector(deleteRecordingAction) forControlEvents:UIControlEventTouchUpInside]; } return _deleteBtn; } -(UIButton *)saveBtn{ if (!_saveBtn){ _saveBtn = [UIButton new]; [_saveBtn setImage:kImage(@"mine_recorded_sound_save") forState:UIControlStateNormal]; [_saveBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; [_saveBtn addTarget:self action:@selector(saveRecordAction) forControlEvents:UIControlEventTouchUpInside]; } return _saveBtn; } -(UILabel *)saveTitleView{ if (!_saveTitleView){ _saveTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView3") font:kFontRegular(12) textColor:UIColorFromRGB(0x6D6B89)]; } return _saveTitleView; } -(UILabel *)resultView{ if (!_resultView){ _resultView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView4") font:kFontRegular(14) textColor:UIColorFromRGB(0x6D6B89)]; } return _resultView; } -(UIScrollView *)scrollView{ if (!_scrollView){ _scrollView = [UIScrollView new]; } return _scrollView; } @end