YMGreetingSettingCell.m 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. //
  2. // YMGreetingSettingCell.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/24.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMGreetingSettingCell.h"
  9. #import "YMGreetingSettingCellViewModel.h"
  10. @interface YMGreetingSettingCell ()<YMAudioPlayerDelegate,YBImageBrowserDelegate>
  11. /// 打招呼设置模板VM
  12. @property (nonatomic, strong) YMGreetingSettingCellViewModel *viewModel;
  13. /// 基础视图
  14. @property (nonatomic, strong) UIView *baseView;
  15. /// 打招呼模板名称标签
  16. @property (nonatomic, strong) UILabel *greetingTemplateNameLb;
  17. /// 操作堆叠视图
  18. @property (nonatomic, strong) UIStackView *operationStackView;
  19. /// 编辑模板名称
  20. @property (nonatomic, strong) UIButton *editTemplateNameBtn;
  21. /// 删除模板按钮
  22. @property (nonatomic, strong) UIButton *deleteTemplateBtn;
  23. /// 默认模板按钮
  24. @property (nonatomic, strong) UIButton *defaultTemplateBtn;
  25. /// 打招呼模板文本标签
  26. @property (nonatomic, strong) UILabel *greetingTemplateTextLb;
  27. /// 内容堆叠视图
  28. @property (nonatomic, strong) UIStackView *contentStackView;
  29. /// 打招呼模板图片
  30. @property (nonatomic, strong) UIImageView *greetingTemplateImage;
  31. /// 打招呼模板语音视图
  32. @property (nonatomic, strong) UIView *greetingTemplateVoiceView;
  33. /// 打招呼模板语音播放图标
  34. @property (nonatomic, strong) UIImageView *greetingTemplateVoicePlayIcon;
  35. /// 打招呼模板语音声波图标
  36. @property (nonatomic, strong) UIImageView *greetingTemplateVoiceSonicIcon;
  37. /// 打招呼模板语音秒数
  38. @property (nonatomic, strong) UILabel *greetingTemplateVoiceSecondsLb;
  39. /// 打招呼模板图片
  40. @property (nonatomic, strong) UIImageView *greetingTemplateReviewStatusIcon;
  41. @end
  42. @implementation YMGreetingSettingCell
  43. - (void)awakeFromNib {
  44. [super awakeFromNib];
  45. // Initialization code
  46. }
  47. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  48. [super setSelected:selected animated:animated];
  49. // Configure the view for the selected state
  50. }
  51. - (void)ym_setupViews{
  52. self.backgroundColor = UIColor.clearColor;
  53. self.contentView.backgroundColor = UIColor.clearColor;
  54. [self.contentView addSubview:self.baseView];
  55. [self.baseView addSubview:self.greetingTemplateNameLb];
  56. [self.baseView addSubview:self.operationStackView];
  57. [self.operationStackView addArrangedSubview:self.editTemplateNameBtn];
  58. [self.operationStackView addArrangedSubview:self.deleteTemplateBtn];
  59. [self.operationStackView addArrangedSubview:self.defaultTemplateBtn];
  60. [self.baseView addSubview:self.greetingTemplateTextLb];
  61. [self.baseView addSubview:self.contentStackView];
  62. [self.contentStackView addArrangedSubview:self.greetingTemplateImage];
  63. [self.contentStackView addArrangedSubview:self.greetingTemplateVoiceView];
  64. [self.greetingTemplateVoiceView addSubview:self.greetingTemplateVoicePlayIcon];
  65. [self.greetingTemplateVoiceView addSubview:self.greetingTemplateVoiceSonicIcon];
  66. [self.greetingTemplateVoiceView addSubview:self.greetingTemplateVoiceSecondsLb];
  67. [self.baseView addSubview:self.greetingTemplateReviewStatusIcon];
  68. [self setNeedsUpdateConstraints];
  69. [self updateConstraintsIfNeeded];
  70. }
  71. - (void)updateConstraints{
  72. [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) {
  73. make.top.equalTo(self.contentView).offset(adapt(10));
  74. make.left.equalTo(self.contentView).offset(adapt(10));
  75. make.right.equalTo(self.contentView).offset(adapt(-10));
  76. make.bottom.equalTo(self.contentView);
  77. }];
  78. [self.greetingTemplateNameLb mas_makeConstraints:^(MASConstraintMaker *make) {
  79. make.top.equalTo(self.baseView).offset(adapt(15));
  80. make.left.equalTo(self.baseView).offset(adapt(15));
  81. make.height.mas_equalTo(adapt(25));
  82. }];
  83. [self.operationStackView mas_makeConstraints:^(MASConstraintMaker *make) {
  84. make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY);
  85. make.right.equalTo(self.baseView).offset(adapt(-15));
  86. make.height.mas_equalTo(adapt(25));
  87. }];
  88. [self.editTemplateNameBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  89. // make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY);
  90. // make.right.equalTo(self.deleteTemplateBtn.mas_left).offset(adapt(-10));
  91. make.width.height.mas_equalTo(adapt(25));
  92. }];
  93. [self.deleteTemplateBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  94. // make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY);
  95. // make.right.equalTo(self.defaultTemplateBtn.mas_left).offset(adapt(-10));
  96. make.width.height.mas_equalTo(adapt(25));
  97. }];
  98. [self.defaultTemplateBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  99. // make.centerY.equalTo(self.greetingTemplateNameLb.mas_centerY);
  100. // make.right.equalTo(self.baseView).offset(adapt(-15));
  101. make.width.mas_equalTo(adapt(100));
  102. make.height.mas_equalTo(adapt(25));
  103. }];
  104. [self.greetingTemplateTextLb mas_makeConstraints:^(MASConstraintMaker *make) {
  105. make.top.equalTo(self.greetingTemplateNameLb.mas_bottom).offset(adapt(15));
  106. make.left.equalTo(self.baseView).offset(adapt(15));
  107. make.right.equalTo(self.baseView).offset(adapt(-15));
  108. }];
  109. [self.contentStackView mas_makeConstraints:^(MASConstraintMaker *make) {
  110. make.top.equalTo(self.greetingTemplateTextLb.mas_bottom).offset(adapt(15));
  111. make.left.equalTo(self.baseView).offset(adapt(15));
  112. make.bottom.equalTo(self.baseView).offset(adapt(-15)).priorityHigh();
  113. make.height.mas_equalTo(adapt(60));
  114. }];
  115. [self.greetingTemplateImage mas_makeConstraints:^(MASConstraintMaker *make) {
  116. make.width.height.mas_equalTo(adapt(60));
  117. }];
  118. // [self.greetingTemplateVoiceView mas_makeConstraints:^(MASConstraintMaker *make) {
  119. // make.bottom.equalTo(self.greetingTemplateImage.mas_bottom);
  120. // make.left.equalTo(self.greetingTemplateImage.mas_right).offset(adapt(10));
  121. // }];
  122. [self.greetingTemplateVoicePlayIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  123. make.top.equalTo(self.greetingTemplateVoiceView).offset(adapt(3));
  124. make.left.equalTo(self.greetingTemplateVoiceView).offset(adapt(3));
  125. make.bottom.equalTo(self.greetingTemplateVoiceView).offset(adapt(-3));
  126. make.width.height.mas_equalTo(adapt(20));
  127. }];
  128. [self.greetingTemplateVoiceSonicIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  129. make.centerY.equalTo(self.greetingTemplateVoiceView.mas_centerY);
  130. make.left.equalTo(self.greetingTemplateVoicePlayIcon.mas_right).offset(adapt(5));
  131. make.width.height.mas_equalTo(adapt(20));
  132. }];
  133. [self.greetingTemplateVoiceSecondsLb mas_makeConstraints:^(MASConstraintMaker *make) {
  134. make.centerY.equalTo(self.greetingTemplateVoiceView.mas_centerY);
  135. make.left.equalTo(self.greetingTemplateVoiceSonicIcon.mas_right).offset(adapt(5));
  136. make.right.equalTo(self.greetingTemplateVoiceView).offset(adapt(-3));
  137. }];
  138. [self.greetingTemplateReviewStatusIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  139. make.bottom.equalTo(self.baseView).offset(adapt(-15));
  140. make.right.equalTo(self.baseView).offset(adapt(-15));
  141. make.width.height.mas_equalTo(adapt(60));
  142. }];
  143. [super updateConstraints];
  144. }
  145. - (void)ym_bindViewModel:(YMGreetingSettingCellViewModel *)viewModel{
  146. if (!viewModel) {
  147. return;
  148. }
  149. _viewModel = viewModel;
  150. [YMAudioPlayer sharedInstance].delegate = self;
  151. self.greetingTemplateNameLb.text = self.viewModel.greetingTemplateName;
  152. self.greetingTemplateTextLb.text = self.viewModel.greetingTemplateText;
  153. if (self.viewModel.isReviewStatus && !self.viewModel.isReviewFailure) {
  154. self.editTemplateNameBtn.hidden = YES;
  155. self.deleteTemplateBtn.hidden = YES;
  156. self.defaultTemplateBtn.hidden = YES;
  157. }else if (!self.viewModel.isReviewStatus && self.viewModel.isReviewFailure) {
  158. self.editTemplateNameBtn.hidden = NO;
  159. self.deleteTemplateBtn.hidden = NO;
  160. self.defaultTemplateBtn.hidden = NO;
  161. }else if (self.viewModel.isReviewStatus && self.viewModel.isReviewFailure) {
  162. self.editTemplateNameBtn.hidden = YES;
  163. self.deleteTemplateBtn.hidden = NO;
  164. self.defaultTemplateBtn.hidden = YES;
  165. }
  166. self.greetingTemplateReviewStatusIcon.image = self.viewModel.greetingTemplateReviewStatusIcon;
  167. self.greetingTemplateReviewStatusIcon.hidden = self.viewModel.isReviewStatus == YES ? NO : YES;
  168. if (self.viewModel.isDefaultGreetingTemplate) {
  169. [self.defaultTemplateBtn setImage:ImageByName(@"ym_greeting_setting_selected_icon") forState:UIControlStateNormal];
  170. } else {
  171. [self.defaultTemplateBtn setImage:ImageByName(@"ym_greeting_setting_normal_icon") forState:UIControlStateNormal];
  172. }
  173. if (OCStringIsEmpty(self.viewModel.greetingTemplateImage)) {
  174. self.greetingTemplateImage.hidden = YES;
  175. }else{
  176. self.greetingTemplateImage.hidden = NO;
  177. [self.greetingTemplateImage sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.greetingTemplateImage]];
  178. }
  179. if (OCStringIsEmpty(self.viewModel.greetingTemplateVoice)) {
  180. self.greetingTemplateVoiceView.hidden = YES;
  181. }else{
  182. self.greetingTemplateVoiceView.hidden = NO;
  183. }
  184. self.greetingTemplateVoiceSecondsLb.text = stringFormat(@"%ld",self.viewModel.greetingTemplateVoiceSeconds);
  185. }
  186. #pragma mark - YMAudioPlayerDelegate
  187. - (void)audioPlayerDidPlayMusicCompleted{
  188. [YMTimer removeAllTimer];
  189. }
  190. - (void)audioPlayer:(YMAudioPlayer *)player stateChangeWithState:(FSAudioStreamState)state{
  191. }
  192. - (void)dealloc{
  193. [[YMAudioPlayer sharedInstance] stop];
  194. [YMTimer removeAllTimer];
  195. }
  196. - (UIView *)baseView{
  197. if (!_baseView) {
  198. _baseView = [[UIView alloc]init];
  199. _baseView.backgroundColor = HexColorFromRGB(0xFFFFFF);
  200. _baseView.layer.cornerRadius = adapt(10);
  201. _baseView.layer.masksToBounds = YES;
  202. }
  203. return _baseView;
  204. }
  205. - (UILabel *)greetingTemplateNameLb{
  206. if (!_greetingTemplateNameLb) {
  207. _greetingTemplateNameLb = [[UILabel alloc]init];
  208. _greetingTemplateNameLb.font = LCFont(14);
  209. _greetingTemplateNameLb.textColor = HexColorFromRGB(0x333333);
  210. _greetingTemplateNameLb.textAlignment = NSTextAlignmentLeft;
  211. _greetingTemplateNameLb.text = @"我的模板";
  212. }
  213. return _greetingTemplateNameLb;
  214. }
  215. - (UIStackView *)operationStackView{
  216. if(!_operationStackView){
  217. _operationStackView = [[UIStackView alloc]init];
  218. _operationStackView.translatesAutoresizingMaskIntoConstraints = NO;
  219. _operationStackView.axis = UILayoutConstraintAxisHorizontal;
  220. _operationStackView.alignment = UIStackViewAlignmentCenter;
  221. _operationStackView.spacing = adapt(10);
  222. }
  223. return _operationStackView;
  224. }
  225. - (UIButton *)editTemplateNameBtn{
  226. if (!_editTemplateNameBtn) {
  227. _editTemplateNameBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  228. [_editTemplateNameBtn setImage:ImageByName(@"ym_greeting_setting_edit_icon") forState:UIControlStateNormal];
  229. WS(weakSelf)
  230. [[[_editTemplateNameBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  231. [weakSelf.viewModel updateGreetingTemplateName];
  232. }];
  233. }
  234. return _editTemplateNameBtn;
  235. }
  236. - (UIButton *)deleteTemplateBtn{
  237. if (!_deleteTemplateBtn) {
  238. _deleteTemplateBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  239. [_deleteTemplateBtn setImage:ImageByName(@"ym_greeting_setting_delete_icon") forState:UIControlStateNormal];
  240. WS(weakSelf)
  241. [[[_deleteTemplateBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  242. [weakSelf.viewModel deleteGreetingTemplate];
  243. }];
  244. }
  245. return _deleteTemplateBtn;
  246. }
  247. - (UIButton *)defaultTemplateBtn{
  248. if (!_defaultTemplateBtn) {
  249. _defaultTemplateBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  250. _defaultTemplateBtn.titleLabel.font = LCFont(14);
  251. [_defaultTemplateBtn setTitle:@"使用此模板" forState:UIControlStateNormal];
  252. [_defaultTemplateBtn setTitleColor:HexColorFromRGB(0x333333) forState:UIControlStateNormal];
  253. [_defaultTemplateBtn setImage:ImageByName(@"ym_greeting_setting_normal_icon") forState:UIControlStateNormal];
  254. _defaultTemplateBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
  255. [_defaultTemplateBtn setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
  256. CGFloat margin = 3;
  257. _defaultTemplateBtn.imageEdgeInsets = UIEdgeInsetsMake(0, -margin, 0, margin);
  258. WS(weakSelf)
  259. [[[_defaultTemplateBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) {
  260. [weakSelf.viewModel defualGreetingTemplate];
  261. }];
  262. }
  263. return _defaultTemplateBtn;
  264. }
  265. - (UILabel *)greetingTemplateTextLb{
  266. if (!_greetingTemplateTextLb) {
  267. _greetingTemplateTextLb = [[UILabel alloc]init];
  268. _greetingTemplateTextLb.font = LCFont(13);
  269. _greetingTemplateTextLb.textColor = HexColorFromRGB(0x333333);
  270. _greetingTemplateTextLb.textAlignment = NSTextAlignmentLeft;
  271. _greetingTemplateTextLb.numberOfLines = 0;
  272. }
  273. return _greetingTemplateTextLb;
  274. }
  275. - (UIStackView *)contentStackView{
  276. if(!_contentStackView){
  277. _contentStackView = [[UIStackView alloc]init];
  278. _contentStackView.translatesAutoresizingMaskIntoConstraints = NO;
  279. _contentStackView.axis = UILayoutConstraintAxisHorizontal;
  280. _contentStackView.alignment = UIStackViewAlignmentBottom;
  281. _contentStackView.spacing = adapt(10);
  282. }
  283. return _contentStackView;
  284. }
  285. - (UIImageView *)greetingTemplateImage{
  286. if (!_greetingTemplateImage) {
  287. _greetingTemplateImage = [[UIImageView alloc]init];
  288. _greetingTemplateImage.contentMode = UIViewContentModeScaleAspectFill;
  289. _greetingTemplateImage.layer.cornerRadius = adapt(8);
  290. _greetingTemplateImage.layer.masksToBounds = YES;
  291. _greetingTemplateImage.userInteractionEnabled = YES;
  292. WS(weakSelf)
  293. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  294. [_greetingTemplateImage addGestureRecognizer:tap];
  295. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  296. NSMutableArray *tempArr = [NSMutableArray array];
  297. YBIBImageData *model = [YBIBImageData new];
  298. model.imageURL = [LCTools getImageUrlWithAddress:weakSelf.viewModel.greetingTemplateImage];
  299. model.projectiveView = weakSelf.greetingTemplateImage;
  300. [tempArr addObject:model];
  301. YBImageBrowser* youpaipbrowser = [YBImageBrowser new];
  302. youpaipbrowser.dataSourceArray = tempArr;
  303. youpaipbrowser.currentPage = 0;
  304. youpaipbrowser.delegate = weakSelf;
  305. [youpaipbrowser show];
  306. }];
  307. }
  308. return _greetingTemplateImage;
  309. }
  310. - (UIView *)greetingTemplateVoiceView{
  311. if (!_greetingTemplateVoiceView) {
  312. _greetingTemplateVoiceView = [[UIView alloc]init];
  313. _greetingTemplateVoiceView.backgroundColor = HexColorFromRGB(0xfd7bc5);
  314. _greetingTemplateVoiceView.layer.cornerRadius = adapt(25)/2;
  315. _greetingTemplateVoiceView.layer.masksToBounds = YES;
  316. _greetingTemplateVoiceView.userInteractionEnabled = YES;
  317. WS(weakSelf)
  318. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  319. [_greetingTemplateVoiceView addGestureRecognizer:tap];
  320. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  321. if (!OCStringIsEmpty(weakSelf.viewModel.greetingTemplateVoice)){
  322. [YMAudioPlayer sharedInstance].playUrlStr = [LCTools getImageUrlWithAddress:weakSelf.viewModel.greetingTemplateVoice].absoluteString;
  323. // [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) {
  324. // FSStreamPosition current = [YMAudioPlayer sharedInstance].audioStream.currentTimePlayed;
  325. // FSStreamPosition end = [YMAudioPlayer sharedInstance].audioStream.duration;
  326. // CGFloat loadTime = current.minute * 60 + current.second;
  327. // CGFloat endTime = end.minute * 60 + end.second;
  328. // CGFloat seconds = endTime - loadTime;
  329. // self.greetingTemplateVoiceSecondsLb.text = stringFormat(@"%0.0f",seconds);
  330. // } finish:^(NSString * _Nonnull identifier) {
  331. // if (identifier == self.viewModel.greetingTemplateVoice) {
  332. // self.greetingTemplateVoiceSecondsLb.text = stringFormat(@"%ld",self.viewModel.greetingTemplateVoiceSeconds);
  333. // }
  334. // } pause:^(NSString * _Nonnull identifier) {
  335. //
  336. // }];
  337. }else{
  338. NSLog(@"路径错误");
  339. }
  340. }];
  341. }
  342. return _greetingTemplateVoiceView;
  343. }
  344. - (UIImageView *)greetingTemplateVoicePlayIcon{
  345. if (!_greetingTemplateVoicePlayIcon) {
  346. _greetingTemplateVoicePlayIcon = [[UIImageView alloc]init];
  347. _greetingTemplateVoicePlayIcon.image = ImageByName(@"ym_greeting_setting_voice_play_icon");
  348. }
  349. return _greetingTemplateVoicePlayIcon;
  350. }
  351. - (UIImageView *)greetingTemplateVoiceSonicIcon{
  352. if (!_greetingTemplateVoiceSonicIcon) {
  353. _greetingTemplateVoiceSonicIcon = [[UIImageView alloc]init];
  354. _greetingTemplateVoiceSonicIcon.image = ImageByName(@"ym_greeting_setting_voice_sonic_icon");
  355. }
  356. return _greetingTemplateVoiceSonicIcon;
  357. }
  358. - (UILabel *)greetingTemplateVoiceSecondsLb{
  359. if (!_greetingTemplateVoiceSecondsLb) {
  360. _greetingTemplateVoiceSecondsLb = [[UILabel alloc]init];
  361. _greetingTemplateVoiceSecondsLb.font = LCFont(12);
  362. _greetingTemplateVoiceSecondsLb.textColor = HexColorFromRGB(0xFFFFFF);
  363. _greetingTemplateVoiceSecondsLb.textAlignment = NSTextAlignmentCenter;
  364. _greetingTemplateVoiceSecondsLb.text = @"**";
  365. }
  366. return _greetingTemplateVoiceSecondsLb;
  367. }
  368. - (UIImageView *)greetingTemplateReviewStatusIcon{
  369. if (!_greetingTemplateReviewStatusIcon) {
  370. _greetingTemplateReviewStatusIcon = [[UIImageView alloc]init];
  371. _greetingTemplateReviewStatusIcon.image = ImageByName(@"ym_greeting_setting_reviewing_icon");
  372. }
  373. return _greetingTemplateReviewStatusIcon;
  374. }
  375. @end