YMSoundShowcaseTeleprompterView.m 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. //
  2. // YMSoundShowcaseTeleprompterView.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/3/8.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMSoundShowcaseTeleprompterView.h"
  9. #import "YMSoundShowcaseViewModel.h"
  10. @interface YMSoundShowcaseTeleprompterView ()
  11. /// 声音展示VM
  12. @property (nonatomic, strong) YMSoundShowcaseViewModel *viewModel;
  13. /// 题词器提示标签
  14. @property (nonatomic, strong) UILabel *teleprompterTipsLb;
  15. /// 题词器基础视图
  16. @property (nonatomic, strong) UIView *teleprompterBaseView;
  17. /// 题词器标题标签
  18. @property (nonatomic, strong) UILabel *teleprompterTitleLb;
  19. /// 题词器内容标签
  20. @property (nonatomic, strong) UILabel *teleprompterContentLb;
  21. /// 题词器刷新视图
  22. @property (nonatomic, strong) UIView *teleprompterRefreshView;
  23. /// 题词器刷新图标
  24. @property (nonatomic, strong) UIImageView *teleprompterRefreshIcon;
  25. /// 题词器刷新图标
  26. @property (nonatomic, strong) UILabel *teleprompterRefreshLb;
  27. @end
  28. @implementation YMSoundShowcaseTeleprompterView
  29. - (void)ym_setupViews{
  30. [self addSubview:self.teleprompterTipsLb];
  31. [self addSubview:self.teleprompterBaseView];
  32. [self.teleprompterBaseView addSubview:self.teleprompterTitleLb];
  33. [self.teleprompterBaseView addSubview:self.teleprompterContentLb];
  34. [self.teleprompterBaseView addSubview:self.teleprompterRefreshView];
  35. [self.teleprompterRefreshView addSubview:self.teleprompterRefreshIcon];
  36. [self.teleprompterRefreshView addSubview:self.teleprompterRefreshLb];
  37. [self setNeedsUpdateConstraints];
  38. [self updateConstraintsIfNeeded];
  39. }
  40. - (void)updateConstraints{
  41. [self.teleprompterTipsLb mas_makeConstraints:^(MASConstraintMaker *make) {
  42. make.top.equalTo(self).offset(adapt(15));
  43. make.left.equalTo(self).offset(adapt(15));
  44. }];
  45. [self.teleprompterBaseView mas_makeConstraints:^(MASConstraintMaker *make) {
  46. make.top.equalTo(self.teleprompterTipsLb.mas_bottom).offset(adapt(5));
  47. make.left.equalTo(self).offset(adapt(15));
  48. make.right.equalTo(self).offset(adapt(-15));
  49. make.bottom.equalTo(self).offset(adapt(-15));
  50. }];
  51. [self.teleprompterTitleLb mas_makeConstraints:^(MASConstraintMaker *make) {
  52. make.top.equalTo(self.teleprompterBaseView).offset(adapt(20));
  53. make.left.equalTo(self.teleprompterBaseView).offset(adapt(10));
  54. }];
  55. [self.teleprompterContentLb mas_makeConstraints:^(MASConstraintMaker *make) {
  56. make.top.equalTo(self.teleprompterTitleLb.mas_bottom).offset(adapt(20));
  57. make.left.equalTo(self.teleprompterBaseView).offset(adapt(10));
  58. make.right.equalTo(self.teleprompterBaseView).offset(adapt(-10));
  59. make.bottom.equalTo(self.teleprompterBaseView).offset(adapt(-20));
  60. }];
  61. [self.teleprompterRefreshView mas_makeConstraints:^(MASConstraintMaker *make) {
  62. make.centerY.equalTo(self.teleprompterTitleLb.mas_centerY);
  63. make.right.equalTo(self.teleprompterBaseView).offset(adapt(-10));
  64. }];
  65. [self.teleprompterRefreshIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  66. make.top.equalTo(self.teleprompterRefreshView).offset(adapt(5));
  67. make.left.equalTo(self.teleprompterRefreshView).offset(adapt(5));
  68. make.bottom.equalTo(self.teleprompterRefreshView).offset(adapt(-5));
  69. make.width.height.mas_equalTo(adapt(15));
  70. }];
  71. [self.teleprompterRefreshLb mas_makeConstraints:^(MASConstraintMaker *make) {
  72. make.centerY.equalTo(self.teleprompterRefreshView.mas_centerY);
  73. make.left.equalTo(self.teleprompterRefreshIcon.mas_right).offset(adapt(5));
  74. make.right.equalTo(self.teleprompterRefreshView).offset(adapt(-5));
  75. }];
  76. [super updateConstraints];
  77. }
  78. - (void)ym_bindViewModel:(YMSoundShowcaseViewModel *)viewModel{
  79. if (!viewModel) {
  80. return;
  81. }
  82. _viewModel = viewModel;
  83. RAC(self.teleprompterContentLb, attributedText) = RACObserve(self.viewModel, voiceTeleprompterContent);
  84. }
  85. - (UILabel *)teleprompterTipsLb{
  86. if (!_teleprompterTipsLb) {
  87. _teleprompterTipsLb = [[UILabel alloc]init];
  88. _teleprompterTipsLb.font = LCFont(12);
  89. _teleprompterTipsLb.textColor = HexColorFromRGB(0x989898);
  90. _teleprompterTipsLb.textAlignment = NSTextAlignmentLeft;
  91. _teleprompterTipsLb.text = @"展示你的声线,更有吸引力";
  92. }
  93. return _teleprompterTipsLb;
  94. }
  95. - (UIView *)teleprompterBaseView{
  96. if (!_teleprompterBaseView) {
  97. _teleprompterBaseView = [[UIView alloc]init];
  98. _teleprompterBaseView.backgroundColor = HexColorFromRGB(0xf6f6f6);
  99. _teleprompterBaseView.layer.cornerRadius = adapt(10);
  100. _teleprompterBaseView.layer.masksToBounds = YES;
  101. }
  102. return _teleprompterBaseView;
  103. }
  104. - (UILabel *)teleprompterTitleLb{
  105. if (!_teleprompterTitleLb) {
  106. _teleprompterTitleLb = [[UILabel alloc]init];
  107. _teleprompterTitleLb.font = LCBoldFont(16);
  108. _teleprompterTitleLb.textColor = HexColorFromRGB(0x333333);
  109. _teleprompterTitleLb.textAlignment = NSTextAlignmentLeft;
  110. _teleprompterTitleLb.text = @"读一段话";
  111. }
  112. return _teleprompterTitleLb;
  113. }
  114. - (UILabel *)teleprompterContentLb{
  115. if (!_teleprompterContentLb) {
  116. _teleprompterContentLb = [[UILabel alloc]init];
  117. _teleprompterContentLb.font = LCFont(14);
  118. _teleprompterContentLb.textColor = HexColorFromRGB(0x262626);
  119. _teleprompterContentLb.textAlignment = NSTextAlignmentLeft;
  120. _teleprompterContentLb.text = @"*******";
  121. _teleprompterContentLb.numberOfLines = 0;
  122. }
  123. return _teleprompterContentLb;
  124. }
  125. - (UIView *)teleprompterRefreshView{
  126. if (!_teleprompterRefreshView) {
  127. _teleprompterRefreshView = [[UIView alloc]init];
  128. _teleprompterRefreshView.userInteractionEnabled = YES;
  129. WS(weakSelf)
  130. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  131. [_teleprompterRefreshView addGestureRecognizer:tap];
  132. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  133. [weakSelf.viewModel refreshVoiceTelepromptertData];
  134. }];
  135. }
  136. return _teleprompterRefreshView;
  137. }
  138. - (UIImageView *)teleprompterRefreshIcon{
  139. if (!_teleprompterRefreshIcon) {
  140. _teleprompterRefreshIcon = [[UIImageView alloc]init];
  141. _teleprompterRefreshIcon.image = ImageByName(@"ym_sound_showcase_refresh_icon");
  142. }
  143. return _teleprompterRefreshIcon;
  144. }
  145. - (UILabel *)teleprompterRefreshLb{
  146. if (!_teleprompterRefreshLb) {
  147. _teleprompterRefreshLb = [[UILabel alloc]init];
  148. _teleprompterRefreshLb.font = LCFont(12);
  149. _teleprompterRefreshLb.textColor = HexColorFromRGB(0x262626);
  150. _teleprompterRefreshLb.textAlignment = NSTextAlignmentCenter;
  151. _teleprompterRefreshLb.text = @"换一句";
  152. }
  153. return _teleprompterRefreshLb;
  154. }
  155. @end