YMGuestCell.m 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. //
  2. // YMGuestCell.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/17.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMGuestCell.h"
  9. #import "YMGuestCellViewModel.h"
  10. @interface YMGuestCell ()
  11. /// 访客VM
  12. @property (nonatomic, strong) YMGuestCellViewModel *viewModel;
  13. /// 基础视图
  14. @property (nonatomic, strong) UIView *baseView;
  15. /// 提醒视图
  16. @property (nonatomic, strong) UIView *reminderView;
  17. /// 用户头像视图
  18. @property (nonatomic, strong) UIImageView *userAvatarView;
  19. /// 用户昵称标签
  20. @property (nonatomic, strong) UILabel *userNicknameLb;
  21. /// 用户性别和年龄视图
  22. @property (nonatomic, strong) UIView *userGenderAndAgeView;
  23. /// 用户性别图标
  24. @property (nonatomic, strong) UIImageView *userGenderAndAgeIcon;
  25. /// 用户年龄标签
  26. @property (nonatomic, strong) UILabel *userGenderAndAgeLb;
  27. /// 用户访问描述标签
  28. @property (nonatomic, strong) UILabel *userVisitDescLb;
  29. /// 用户访问日期标签
  30. @property (nonatomic, strong) UILabel *userVisitDateLb;
  31. /// 心动或搭讪按钮
  32. @property (nonatomic, strong) UIButton *heartbeatOrAccostBtn;
  33. @end
  34. @implementation YMGuestCell
  35. - (void)awakeFromNib {
  36. [super awakeFromNib];
  37. // Initialization code
  38. }
  39. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  40. [super setSelected:selected animated:animated];
  41. // Configure the view for the selected state
  42. }
  43. - (void)ym_setupViews{
  44. [self.contentView addSubview:self.baseView];
  45. [self.baseView addSubview:self.reminderView];
  46. [self.baseView addSubview:self.userAvatarView];
  47. [self.baseView addSubview:self.userNicknameLb];
  48. [self.baseView addSubview:self.userGenderAndAgeView];
  49. [self.userGenderAndAgeView addSubview:self.userGenderAndAgeIcon];
  50. [self.userGenderAndAgeView addSubview:self.userGenderAndAgeLb];
  51. [self.baseView addSubview:self.userVisitDescLb];
  52. [self.baseView addSubview:self.userVisitDateLb];
  53. [self.baseView addSubview:self.heartbeatOrAccostBtn];
  54. [self setNeedsUpdateConstraints];
  55. [self updateConstraintsIfNeeded];
  56. }
  57. - (void)updateConstraints{
  58. [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) {
  59. make.top.equalTo(self.contentView);
  60. make.left.equalTo(self.contentView);
  61. make.right.equalTo(self.contentView);
  62. make.bottom.equalTo(self.contentView);
  63. }];
  64. [self.reminderView mas_makeConstraints:^(MASConstraintMaker *make) {
  65. make.centerY.equalTo(self.baseView.mas_centerY);
  66. make.left.equalTo(self.baseView).offset(adapt(5));
  67. make.width.height.mas_equalTo(adapt(8));
  68. }];
  69. [self.userAvatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  70. make.centerY.equalTo(self.baseView.mas_centerY);
  71. make.left.equalTo(self.reminderView.mas_right).offset(adapt(10));
  72. make.width.height.mas_equalTo(adapt(50));
  73. }];
  74. [self.userNicknameLb mas_makeConstraints:^(MASConstraintMaker *make) {
  75. make.top.equalTo(self.userAvatarView.mas_top);
  76. make.left.equalTo(self.userAvatarView.mas_right).offset(adapt(16));
  77. }];
  78. [self.userGenderAndAgeView mas_makeConstraints:^(MASConstraintMaker *make) {
  79. make.centerY.equalTo(self.userNicknameLb.mas_centerY);
  80. make.left.equalTo(self.userNicknameLb.mas_right).offset(adapt(5));
  81. make.height.mas_equalTo(adapt(15));
  82. }];
  83. [self.userGenderAndAgeIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  84. make.centerY.equalTo(self.userGenderAndAgeView.mas_centerY);
  85. make.left.equalTo(self.userGenderAndAgeView).offset(adapt(7));
  86. make.width.height.mas_equalTo(adapt(10));
  87. }];
  88. [self.userGenderAndAgeLb mas_makeConstraints:^(MASConstraintMaker *make) {
  89. make.centerY.equalTo(self.userGenderAndAgeView.mas_centerY);
  90. make.left.equalTo(self.userGenderAndAgeIcon.mas_right).offset(adapt(3));
  91. make.right.equalTo(self.userGenderAndAgeView).offset(adapt(-7));
  92. }];
  93. [self.userVisitDescLb mas_makeConstraints:^(MASConstraintMaker *make) {
  94. make.top.equalTo(self.userNicknameLb.mas_bottom).offset(adapt(5));
  95. make.left.equalTo(self.userAvatarView.mas_right).offset(adapt(16));
  96. }];
  97. [self.userVisitDateLb mas_makeConstraints:^(MASConstraintMaker *make) {
  98. make.top.equalTo(self.userVisitDescLb.mas_bottom).offset(adapt(5));
  99. make.left.equalTo(self.userAvatarView.mas_right).offset(adapt(16));
  100. }];
  101. [self.heartbeatOrAccostBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  102. make.centerY.equalTo(self.baseView.mas_centerY);
  103. make.right.equalTo(self.baseView).offset(adapt(-10));
  104. make.width.mas_equalTo(adapt(44));
  105. make.height.mas_equalTo(adapt(44));
  106. }];
  107. [super updateConstraints];
  108. }
  109. - (void)ym_bindViewModel:(YMGuestCellViewModel *)viewModel{
  110. if (!viewModel) {
  111. return;
  112. }
  113. _viewModel = viewModel;
  114. [self.userAvatarView sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.userAvatar]];
  115. self.userNicknameLb.text = self.viewModel.userNickname;
  116. self.userGenderAndAgeIcon.image = self.viewModel.userGenderAndAgeIcon;
  117. self.userGenderAndAgeLb.text = self.viewModel.userGenderAndAgeText;
  118. if ([self.viewModel.userGender isEqualToString:@"女"]) {
  119. self.userGenderAndAgeLb.textColor = HexColorFromRGB(0xFF2682);
  120. } else {
  121. self.userGenderAndAgeLb.textColor = HexColorFromRGB(0x67E589);
  122. }
  123. self.userVisitDescLb.text = self.viewModel.userVisitDesc;
  124. self.userVisitDateLb.text = self.viewModel.userVisitDate;
  125. self.reminderView.hidden = self.viewModel.isHideReminder;
  126. @weakify(self)
  127. [[[[RACObserve(self.viewModel, heartbeatOrAccostButtonImage) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSString * userOnlineStatusText) {
  128. @strongify(self)
  129. [self.heartbeatOrAccostBtn setImage:ImageByName(self.viewModel.heartbeatOrAccostButtonImage) forState:UIControlStateNormal];;
  130. }];
  131. }
  132. - (UIView *)baseView{
  133. if (!_baseView) {
  134. _baseView = [[UIView alloc]init];
  135. }
  136. return _baseView;
  137. }
  138. - (UIView *)reminderView{
  139. if (!_reminderView) {
  140. _reminderView = [[UIView alloc]init];
  141. _reminderView.backgroundColor = MAINGRIDColor2;
  142. _reminderView.layer.cornerRadius = adapt(8)/2;
  143. }
  144. return _reminderView;
  145. }
  146. - (UIImageView *)userAvatarView{
  147. if (!_userAvatarView) {
  148. _userAvatarView = [[UIImageView alloc]init];
  149. _userAvatarView.backgroundColor = UIColor.lightGrayColor;
  150. _userAvatarView.layer.cornerRadius = adapt(50)/2;
  151. _userAvatarView.layer.masksToBounds = YES;
  152. }
  153. return _userAvatarView;
  154. }
  155. - (UILabel *)userNicknameLb{
  156. if (!_userNicknameLb) {
  157. _userNicknameLb = [[UILabel alloc]init];
  158. _userNicknameLb.font = LCBoldFont(15);
  159. _userNicknameLb.textColor = HexColorFromRGB(0x1B2739);
  160. _userNicknameLb.textAlignment = NSTextAlignmentLeft;
  161. _userNicknameLb.text = @"******";
  162. }
  163. return _userNicknameLb;
  164. }
  165. - (UIView *)userGenderAndAgeView{
  166. if (!_userGenderAndAgeView) {
  167. _userGenderAndAgeView = [[UIView alloc]init];
  168. _userGenderAndAgeView.layer.cornerRadius = adapt(15)/2;
  169. _userGenderAndAgeView.backgroundColor = HexColorFromRGB(0xFCF2FD);
  170. }
  171. return _userGenderAndAgeView;
  172. }
  173. - (UIImageView *)userGenderAndAgeIcon{
  174. if (!_userGenderAndAgeIcon) {
  175. _userGenderAndAgeIcon = [[UIImageView alloc]init];
  176. _userGenderAndAgeIcon.image = ImageByName(@"ym_personal_page_female_icon");
  177. }
  178. return _userGenderAndAgeIcon;
  179. }
  180. - (UILabel *)userGenderAndAgeLb{
  181. if (!_userGenderAndAgeLb) {
  182. _userGenderAndAgeLb = [[UILabel alloc]init];
  183. _userGenderAndAgeLb.font = LCFont(11);
  184. _userGenderAndAgeLb.textColor = HexColorFromRGB(0xFFFFFF);
  185. _userGenderAndAgeLb.textAlignment = NSTextAlignmentCenter;
  186. _userGenderAndAgeLb.text = @"***";
  187. }
  188. return _userGenderAndAgeLb;
  189. }
  190. - (UILabel *)userVisitDescLb{
  191. if (!_userVisitDescLb) {
  192. _userVisitDescLb = [[UILabel alloc]init];
  193. _userVisitDescLb.font = LCFont(12);
  194. _userVisitDescLb.textColor = HexColorFromRGB(0x7E848D);
  195. _userVisitDescLb.textAlignment = NSTextAlignmentLeft;
  196. _userVisitDescLb.text = @"******";
  197. }
  198. return _userVisitDescLb;
  199. }
  200. - (UILabel *)userVisitDateLb{
  201. if (!_userVisitDateLb) {
  202. _userVisitDateLb = [[UILabel alloc]init];
  203. _userVisitDateLb.font = LCFont(12);
  204. _userVisitDateLb.textColor = HexColorFromRGB(0x7E848D);
  205. _userVisitDateLb.textAlignment = NSTextAlignmentLeft;
  206. _userVisitDateLb.text = @"******";
  207. }
  208. return _userVisitDateLb;
  209. }
  210. - (UIButton *)heartbeatOrAccostBtn{
  211. if (!_heartbeatOrAccostBtn) {
  212. _heartbeatOrAccostBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  213. [_heartbeatOrAccostBtn setImage:ImageByName(@"ym_common_home_heart") forState:UIControlStateNormal];
  214. WS(weakSelf)
  215. [[[_heartbeatOrAccostBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  216. [weakSelf.viewModel sendAccostRequest];
  217. }];
  218. }
  219. return _heartbeatOrAccostBtn;
  220. }
  221. @end