Files
peko-ios/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.m
2024-04-11 17:05:27 +08:00

526 lines
21 KiB
Objective-C

//
// XPMineUserInfoRecordedSoundView.m
// xplan-ios
//
// Created by duoban on 2022/12/29.
//
#import "XPMineUserInfoRecordedSoundView.h"
#import "SGYProgressView.h"
#import <SVGA.h>
#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.leading.trailing.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.trailing.equalTo(self.recordBtn.mas_leading).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.leading.equalTo(self.recordBtn.mas_trailing).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.leading.equalTo(self.recordBtn.mas_trailing).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