// // YMGreetingSettingCell.m // MSYOUPAI // // Created by YoMi on 2024/2/24. // Copyright © 2024 MS. All rights reserved. // #import "YMGreetingSettingCell.h" #import "YMGreetingSettingCellViewModel.h" @interface YMGreetingSettingCell () /// 打招呼设置模板VM @property (nonatomic, strong) YMGreetingSettingCellViewModel *viewModel; /// 基础视图 @property (nonatomic, strong) UIView *baseView; /// 打招呼模板名称标签 @property (nonatomic, strong) UILabel *greetingTemplateNameLb; /// 操作堆叠视图 @property (nonatomic, strong) UIStackView *operationStackView; /// 编辑模板名称 @property (nonatomic, strong) UIButton *editTemplateNameBtn; /// 删除模板按钮 @property (nonatomic, strong) UIButton *deleteTemplateBtn; /// 默认模板按钮 @property (nonatomic, strong) UIButton *defaultTemplateBtn; /// 打招呼模板文本标签 @property (nonatomic, strong) UILabel *greetingTemplateTextLb; /// 内容堆叠视图 @property (nonatomic, strong) UIStackView *contentStackView; /// 打招呼模板图片 @property (nonatomic, strong) UIImageView *greetingTemplateImage; /// 打招呼模板语音视图 @property (nonatomic, strong) UIView *greetingTemplateVoiceView; /// 打招呼模板语音播放图标 @property (nonatomic, strong) UIImageView *greetingTemplateVoicePlayIcon; /// 打招呼模板语音声波图标 @property (nonatomic, strong) UIImageView *greetingTemplateVoiceSonicIcon; /// 打招呼模板语音秒数 @property (nonatomic, strong) UILabel *greetingTemplateVoiceSecondsLb; /// 打招呼模板图片 @property (nonatomic, strong) UIImageView *greetingTemplateReviewStatusIcon; @end @implementation YMGreetingSettingCell - (void)awakeFromNib { [super awakeFromNib]; // Initialization code } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } - (void)ym_setupViews{ self.backgroundColor = UIColor.clearColor; self.contentView.backgroundColor = UIColor.clearColor; [self.contentView addSubview:self.baseView]; [self.baseView addSubview:self.greetingTemplateNameLb]; [self.baseView addSubview:self.operationStackView]; [self.operationStackView addArrangedSubview:self.editTemplateNameBtn]; [self.operationStackView addArrangedSubview:self.deleteTemplateBtn]; [self.operationStackView addArrangedSubview:self.defaultTemplateBtn]; [self.baseView addSubview:self.greetingTemplateTextLb]; [self.baseView addSubview:self.contentStackView]; [self.contentStackView addArrangedSubview:self.greetingTemplateImage]; [self.contentStackView addArrangedSubview:self.greetingTemplateVoiceView]; [self.greetingTemplateVoiceView addSubview:self.greetingTemplateVoicePlayIcon]; [self.greetingTemplateVoiceView addSubview:self.greetingTemplateVoiceSonicIcon]; [self.greetingTemplateVoiceView addSubview:self.greetingTemplateVoiceSecondsLb]; [self.baseView addSubview:self.greetingTemplateReviewStatusIcon]; [self setNeedsUpdateConstraints]; [self updateConstraintsIfNeeded]; } - (void)updateConstraints{ [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView).offset(adapt(10)); make.left.equalTo(self.contentView).offset(adapt(10)); make.right.equalTo(self.contentView).offset(adapt(-10)); make.bottom.equalTo(self.contentView); }]; [self.greetingTemplateNameLb mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.baseView).offset(adapt(15)); make.left.equalTo(self.baseView).offset(adapt(15)); make.height.mas_equalTo(adapt(25)); }]; [self.operationStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY); make.right.equalTo(self.baseView).offset(adapt(-15)); make.height.mas_equalTo(adapt(25)); }]; [self.editTemplateNameBtn mas_makeConstraints:^(MASConstraintMaker *make) { // make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY); // make.right.equalTo(self.deleteTemplateBtn.mas_left).offset(adapt(-10)); make.width.height.mas_equalTo(adapt(25)); }]; [self.deleteTemplateBtn mas_makeConstraints:^(MASConstraintMaker *make) { // make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY); // make.right.equalTo(self.defaultTemplateBtn.mas_left).offset(adapt(-10)); make.width.height.mas_equalTo(adapt(25)); }]; [self.defaultTemplateBtn mas_makeConstraints:^(MASConstraintMaker *make) { // make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY); // make.right.equalTo(self.baseView).offset(adapt(-15)); make.width.mas_equalTo(adapt(100)); make.height.mas_equalTo(adapt(25)); }]; [self.greetingTemplateTextLb mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.greetingTemplateNameLb.mas_bottom).offset(adapt(15)); make.left.equalTo(self.baseView).offset(adapt(15)); make.right.equalTo(self.baseView).offset(adapt(-15)); }]; [self.contentStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.greetingTemplateTextLb.mas_bottom).offset(adapt(15)); make.left.equalTo(self.baseView).offset(adapt(15)); make.bottom.equalTo(self.baseView).offset(adapt(-15)).priorityHigh(); make.height.mas_equalTo(adapt(60)); }]; [self.greetingTemplateImage mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(adapt(60)); }]; // [self.greetingTemplateVoiceView mas_makeConstraints:^(MASConstraintMaker *make) { // make.bottom.equalTo(self.greetingTemplateImage.mas_bottom); // make.left.equalTo(self.greetingTemplateImage.mas_right).offset(adapt(10)); // }]; [self.greetingTemplateVoicePlayIcon mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.greetingTemplateVoiceView).offset(adapt(3)); make.left.equalTo(self.greetingTemplateVoiceView).offset(adapt(3)); make.bottom.equalTo(self.greetingTemplateVoiceView).offset(adapt(-3)); make.width.height.mas_equalTo(adapt(20)); }]; [self.greetingTemplateVoiceSonicIcon mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.greetingTemplateVoiceView.mas_centerY); make.left.equalTo(self.greetingTemplateVoicePlayIcon.mas_right).offset(adapt(5)); make.width.height.mas_equalTo(adapt(20)); }]; [self.greetingTemplateVoiceSecondsLb mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.greetingTemplateVoiceView.mas_centerY); make.left.equalTo(self.greetingTemplateVoiceSonicIcon.mas_right).offset(adapt(5)); make.right.equalTo(self.greetingTemplateVoiceView).offset(adapt(-3)); }]; [self.greetingTemplateReviewStatusIcon mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.baseView).offset(adapt(-15)); make.right.equalTo(self.baseView).offset(adapt(-15)); make.width.height.mas_equalTo(adapt(60)); }]; [super updateConstraints]; } - (void)ym_bindViewModel:(YMGreetingSettingCellViewModel *)viewModel{ if (!viewModel) { return; } _viewModel = viewModel; [YMAudioPlayer sharedInstance].delegate = self; self.greetingTemplateNameLb.text = self.viewModel.greetingTemplateName; self.greetingTemplateTextLb.text = self.viewModel.greetingTemplateText; if (self.viewModel.isReviewStatus && !self.viewModel.isReviewFailure) { self.editTemplateNameBtn.hidden = YES; self.deleteTemplateBtn.hidden = YES; self.defaultTemplateBtn.hidden = YES; }else if (!self.viewModel.isReviewStatus && self.viewModel.isReviewFailure) { self.editTemplateNameBtn.hidden = NO; self.deleteTemplateBtn.hidden = NO; self.defaultTemplateBtn.hidden = NO; }else if (self.viewModel.isReviewStatus && self.viewModel.isReviewFailure) { self.editTemplateNameBtn.hidden = YES; self.deleteTemplateBtn.hidden = NO; self.defaultTemplateBtn.hidden = YES; } self.greetingTemplateReviewStatusIcon.image = self.viewModel.greetingTemplateReviewStatusIcon; self.greetingTemplateReviewStatusIcon.hidden = self.viewModel.isReviewStatus == YES ? NO : YES; if (self.viewModel.isDefaultGreetingTemplate) { [self.defaultTemplateBtn setImage:ImageByName(@"ym_greeting_setting_selected_icon") forState:UIControlStateNormal]; } else { [self.defaultTemplateBtn setImage:ImageByName(@"ym_greeting_setting_normal_icon") forState:UIControlStateNormal]; } if (OCStringIsEmpty(self.viewModel.greetingTemplateImage)) { self.greetingTemplateImage.hidden = YES; }else{ self.greetingTemplateImage.hidden = NO; [self.greetingTemplateImage sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.greetingTemplateImage]]; } if (OCStringIsEmpty(self.viewModel.greetingTemplateVoice)) { self.greetingTemplateVoiceView.hidden = YES; }else{ self.greetingTemplateVoiceView.hidden = NO; } self.greetingTemplateVoiceSecondsLb.text = stringFormat(@"%ld",self.viewModel.greetingTemplateVoiceSeconds); } #pragma mark - YMAudioPlayerDelegate - (void)audioPlayerDidPlayMusicCompleted{ [YMTimer removeAllTimer]; } - (void)audioPlayer:(YMAudioPlayer *)player stateChangeWithState:(FSAudioStreamState)state{ } - (void)dealloc{ [[YMAudioPlayer sharedInstance] stop]; [YMTimer removeAllTimer]; } - (UIView *)baseView{ if (!_baseView) { _baseView = [[UIView alloc]init]; _baseView.backgroundColor = HexColorFromRGB(0xFFFFFF); _baseView.layer.cornerRadius = adapt(10); _baseView.layer.masksToBounds = YES; } return _baseView; } - (UILabel *)greetingTemplateNameLb{ if (!_greetingTemplateNameLb) { _greetingTemplateNameLb = [[UILabel alloc]init]; _greetingTemplateNameLb.font = LCFont(14); _greetingTemplateNameLb.textColor = HexColorFromRGB(0x333333); _greetingTemplateNameLb.textAlignment = NSTextAlignmentLeft; _greetingTemplateNameLb.text = @"我的模板"; } return _greetingTemplateNameLb; } - (UIStackView *)operationStackView{ if(!_operationStackView){ _operationStackView = [[UIStackView alloc]init]; _operationStackView.translatesAutoresizingMaskIntoConstraints = NO; _operationStackView.axis = UILayoutConstraintAxisHorizontal; _operationStackView.alignment = UIStackViewAlignmentCenter; _operationStackView.spacing = adapt(10); } return _operationStackView; } - (UIButton *)editTemplateNameBtn{ if (!_editTemplateNameBtn) { _editTemplateNameBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_editTemplateNameBtn setImage:ImageByName(@"ym_greeting_setting_edit_icon") forState:UIControlStateNormal]; WS(weakSelf) [[[_editTemplateNameBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel updateGreetingTemplateName]; }]; } return _editTemplateNameBtn; } - (UIButton *)deleteTemplateBtn{ if (!_deleteTemplateBtn) { _deleteTemplateBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_deleteTemplateBtn setImage:ImageByName(@"ym_greeting_setting_delete_icon") forState:UIControlStateNormal]; WS(weakSelf) [[[_deleteTemplateBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel deleteGreetingTemplate]; }]; } return _deleteTemplateBtn; } - (UIButton *)defaultTemplateBtn{ if (!_defaultTemplateBtn) { _defaultTemplateBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _defaultTemplateBtn.titleLabel.font = LCFont(14); [_defaultTemplateBtn setTitle:@"使用此模板" forState:UIControlStateNormal]; [_defaultTemplateBtn setTitleColor:HexColorFromRGB(0x333333) forState:UIControlStateNormal]; [_defaultTemplateBtn setImage:ImageByName(@"ym_greeting_setting_normal_icon") forState:UIControlStateNormal]; _defaultTemplateBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight; [_defaultTemplateBtn setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight]; CGFloat margin = 3; _defaultTemplateBtn.imageEdgeInsets = UIEdgeInsetsMake(0, -margin, 0, margin); WS(weakSelf) [[[_defaultTemplateBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) { [weakSelf.viewModel defualGreetingTemplate]; }]; } return _defaultTemplateBtn; } - (UILabel *)greetingTemplateTextLb{ if (!_greetingTemplateTextLb) { _greetingTemplateTextLb = [[UILabel alloc]init]; _greetingTemplateTextLb.font = LCFont(13); _greetingTemplateTextLb.textColor = HexColorFromRGB(0x333333); _greetingTemplateTextLb.textAlignment = NSTextAlignmentLeft; _greetingTemplateTextLb.numberOfLines = 0; } return _greetingTemplateTextLb; } - (UIStackView *)contentStackView{ if(!_contentStackView){ _contentStackView = [[UIStackView alloc]init]; _contentStackView.translatesAutoresizingMaskIntoConstraints = NO; _contentStackView.axis = UILayoutConstraintAxisHorizontal; _contentStackView.alignment = UIStackViewAlignmentBottom; _contentStackView.spacing = adapt(10); } return _contentStackView; } - (UIImageView *)greetingTemplateImage{ if (!_greetingTemplateImage) { _greetingTemplateImage = [[UIImageView alloc]init]; _greetingTemplateImage.contentMode = UIViewContentModeScaleAspectFill; _greetingTemplateImage.layer.cornerRadius = adapt(8); _greetingTemplateImage.layer.masksToBounds = YES; _greetingTemplateImage.userInteractionEnabled = YES; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_greetingTemplateImage addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { NSMutableArray *tempArr = [NSMutableArray array]; YBIBImageData *model = [YBIBImageData new]; model.imageURL = [LCTools getImageUrlWithAddress:weakSelf.viewModel.greetingTemplateImage]; model.projectiveView = weakSelf.greetingTemplateImage; [tempArr addObject:model]; YBImageBrowser* youpaipbrowser = [YBImageBrowser new]; youpaipbrowser.dataSourceArray = tempArr; youpaipbrowser.currentPage = 0; youpaipbrowser.delegate = weakSelf; [youpaipbrowser show]; }]; } return _greetingTemplateImage; } - (UIView *)greetingTemplateVoiceView{ if (!_greetingTemplateVoiceView) { _greetingTemplateVoiceView = [[UIView alloc]init]; _greetingTemplateVoiceView.backgroundColor = HexColorFromRGB(0xfd7bc5); _greetingTemplateVoiceView.layer.cornerRadius = adapt(25)/2; _greetingTemplateVoiceView.layer.masksToBounds = YES; _greetingTemplateVoiceView.userInteractionEnabled = YES; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_greetingTemplateVoiceView addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { if (!OCStringIsEmpty(weakSelf.viewModel.greetingTemplateVoice)){ [YMAudioPlayer sharedInstance].playUrlStr = [LCTools getImageUrlWithAddress:weakSelf.viewModel.greetingTemplateVoice].absoluteString; // [YMTimer addDiskTimerForTime:self.viewModel.greetingTemplateVoiceSeconds identifier:self.viewModel.greetingTemplateVoice handle:^(NSString * _Nonnull day, NSString * _Nonnull hour, NSString * _Nonnull minute, NSString * _Nonnull second, NSString * _Nonnull ms) { // FSStreamPosition current = [YMAudioPlayer sharedInstance].audioStream.currentTimePlayed; // FSStreamPosition end = [YMAudioPlayer sharedInstance].audioStream.duration; // CGFloat loadTime = current.minute * 60 + current.second; // CGFloat endTime = end.minute * 60 + end.second; // CGFloat seconds = endTime - loadTime; // self.greetingTemplateVoiceSecondsLb.text = stringFormat(@"%0.0f",seconds); // } finish:^(NSString * _Nonnull identifier) { // if (identifier == self.viewModel.greetingTemplateVoice) { // self.greetingTemplateVoiceSecondsLb.text = stringFormat(@"%ld",self.viewModel.greetingTemplateVoiceSeconds); // } // } pause:^(NSString * _Nonnull identifier) { // // }]; }else{ NSLog(@"路径错误"); } }]; } return _greetingTemplateVoiceView; } - (UIImageView *)greetingTemplateVoicePlayIcon{ if (!_greetingTemplateVoicePlayIcon) { _greetingTemplateVoicePlayIcon = [[UIImageView alloc]init]; _greetingTemplateVoicePlayIcon.image = ImageByName(@"ym_greeting_setting_voice_play_icon"); } return _greetingTemplateVoicePlayIcon; } - (UIImageView *)greetingTemplateVoiceSonicIcon{ if (!_greetingTemplateVoiceSonicIcon) { _greetingTemplateVoiceSonicIcon = [[UIImageView alloc]init]; _greetingTemplateVoiceSonicIcon.image = ImageByName(@"ym_greeting_setting_voice_sonic_icon"); } return _greetingTemplateVoiceSonicIcon; } - (UILabel *)greetingTemplateVoiceSecondsLb{ if (!_greetingTemplateVoiceSecondsLb) { _greetingTemplateVoiceSecondsLb = [[UILabel alloc]init]; _greetingTemplateVoiceSecondsLb.font = LCFont(12); _greetingTemplateVoiceSecondsLb.textColor = HexColorFromRGB(0xFFFFFF); _greetingTemplateVoiceSecondsLb.textAlignment = NSTextAlignmentCenter; _greetingTemplateVoiceSecondsLb.text = @"**"; } return _greetingTemplateVoiceSecondsLb; } - (UIImageView *)greetingTemplateReviewStatusIcon{ if (!_greetingTemplateReviewStatusIcon) { _greetingTemplateReviewStatusIcon = [[UIImageView alloc]init]; _greetingTemplateReviewStatusIcon.image = ImageByName(@"ym_greeting_setting_reviewing_icon"); } return _greetingTemplateReviewStatusIcon; } @end