YMHomePageListCell.m 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. //
  2. // YMHomePageListCell.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/12.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMHomePageListCell.h"
  9. #import "YMHomePageListCellViewModel.h"
  10. @interface YMHomePageListCell()
  11. /// ViewModel
  12. @property (nonatomic, strong) YMHomePageListCellViewModel *viewModel;
  13. /// 基础视图
  14. @property (nonatomic, strong) UIView *baseView;
  15. /// 用户头像视图
  16. @property (nonatomic, strong) UIImageView *userAvatarView;
  17. /// 遮罩 View
  18. @property (nonatomic, strong) UIImageView *avatarMaskView;
  19. /// 用户在线状态视图
  20. @property (nonatomic, strong) UIImageView *userOnlineStatusImgv;
  21. /// 用户在线状态视图
  22. @property (nonatomic, strong) UIView *userOnlineStatusView;
  23. /// 用户在线状态点
  24. @property (nonatomic, strong) UIView *userOnlineStatusPoint;
  25. /// 用户在线状态标签
  26. @property (nonatomic, strong) UILabel *userOnlineStatusLb;
  27. /// 渐变视图
  28. @property (nonatomic, strong) UIView *gradientView;
  29. /// 用户昵称标签
  30. @property (nonatomic, strong) UILabel *userNicknameLb;
  31. /// 用户昵称标签
  32. @property (nonatomic, strong) UIImageView *vipImgv;
  33. /// 用户视频费用金额按钮
  34. @property (nonatomic, strong) UIButton *userVideoFeesAmountBtn;
  35. /// 心动或搭讪按钮
  36. @property (nonatomic, strong) UIButton *heartbeatOrAccostBtn;
  37. /// 心动或搭讪按钮
  38. @property (nonatomic, strong) UIImageView *heartbeatOrAccostImgv;
  39. @end
  40. @implementation YMHomePageListCell
  41. - (void)ym_setupViews{
  42. [self.contentView addSubview:self.baseView];
  43. [self.baseView addSubview:self.userAvatarView];
  44. [self.userAvatarView addSubview:self.avatarMaskView];
  45. [self.userAvatarView addSubview:self.gradientView];
  46. [self.userAvatarView addSubview:self.userNicknameLb];
  47. [self.userAvatarView addSubview:self.vipImgv];
  48. [self.userAvatarView addSubview:self.userVideoFeesAmountBtn];
  49. [self.contentView addSubview:self.heartbeatOrAccostBtn];
  50. [self.heartbeatOrAccostBtn addSubview:self.heartbeatOrAccostImgv];
  51. [self.userAvatarView addSubview:self.userOnlineStatusImgv];
  52. [self.userAvatarView addSubview:self.userOnlineStatusView];
  53. [self.userOnlineStatusView addSubview:self.userOnlineStatusPoint];
  54. [self.userOnlineStatusView addSubview:self.userOnlineStatusLb];
  55. [self setNeedsUpdateConstraints];
  56. [self updateConstraintsIfNeeded];
  57. }
  58. - (void)updateConstraints {
  59. [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) {
  60. make.top.equalTo(self.contentView);
  61. make.left.equalTo(self.contentView);
  62. make.right.equalTo(self.contentView);
  63. make.bottom.equalTo(self.contentView);
  64. }];
  65. [self.userAvatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  66. make.top.equalTo(self.baseView);
  67. make.left.equalTo(self.baseView);
  68. make.right.equalTo(self.baseView);
  69. make.bottom.equalTo(self.baseView);
  70. }];
  71. [self.avatarMaskView mas_makeConstraints:^(MASConstraintMaker *make) {
  72. make.top.equalTo(self.userAvatarView);
  73. make.left.equalTo(self.userAvatarView);
  74. make.right.equalTo(self.userAvatarView);
  75. make.bottom.equalTo(self.userAvatarView);
  76. }];
  77. [self.userOnlineStatusImgv mas_makeConstraints:^(MASConstraintMaker *make) {
  78. make.top.equalTo(self.userAvatarView).offset(adapt(10));
  79. make.right.equalTo(self.userAvatarView.mas_right).offset(adapt(-8));
  80. }];
  81. [self.userOnlineStatusView mas_makeConstraints:^(MASConstraintMaker *make) {
  82. make.top.equalTo(self.userAvatarView).offset(adapt(10));
  83. make.left.equalTo(self.userAvatarView).offset(adapt(10));
  84. make.height.mas_equalTo(adapt(22));
  85. }];
  86. [self.userOnlineStatusPoint mas_makeConstraints:^(MASConstraintMaker *make) {
  87. make.centerY.equalTo(self.userOnlineStatusView.mas_centerY);
  88. make.left.equalTo(self.userOnlineStatusView).offset(adapt(10));
  89. make.width.height.mas_equalTo(adapt(6));
  90. }];
  91. [self.userOnlineStatusLb mas_makeConstraints:^(MASConstraintMaker *make) {
  92. make.centerY.equalTo(self.userOnlineStatusView.mas_centerY);
  93. make.left.equalTo(self.userOnlineStatusPoint.mas_right).offset(adapt(5));
  94. make.right.equalTo(self.userOnlineStatusView).offset(adapt(-10));
  95. }];
  96. [self.gradientView mas_makeConstraints:^(MASConstraintMaker *make) {
  97. make.top.equalTo(self.baseView);
  98. make.left.equalTo(self.userAvatarView);
  99. make.right.equalTo(self.userAvatarView);
  100. make.bottom.equalTo(self.userAvatarView);
  101. make.height.mas_equalTo(adapt(87));
  102. }];
  103. [self.userNicknameLb mas_makeConstraints:^(MASConstraintMaker *make) {
  104. make.left.equalTo(self.userAvatarView).offset(adapt(10));
  105. make.right.equalTo(self.userAvatarView).offset(adapt(-50));
  106. make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-10));
  107. make.height.mas_greaterThanOrEqualTo(adapt(22));
  108. }];
  109. [self.vipImgv mas_makeConstraints:^(MASConstraintMaker *make) {
  110. make.left.equalTo(self.userNicknameLb.mas_right).offset(adapt(2));
  111. make.centerY.equalTo(self.userNicknameLb.mas_centerY).offset(adapt(0));
  112. make.width.height.mas_equalTo(adapt(11));
  113. }];
  114. [self.userVideoFeesAmountBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  115. make.left.equalTo(self.userAvatarView).offset(adapt(10));
  116. make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-9));
  117. make.width.mas_equalTo(adapt(100));
  118. make.height.mas_equalTo(adapt(22));
  119. }];
  120. [self.heartbeatOrAccostBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  121. make.right.equalTo(self.contentView.mas_right).offset(adapt(-0));
  122. make.bottom.equalTo(self.contentView.mas_bottom).offset(adapt(-0));
  123. make.width.height.mas_equalTo(adapt(44));
  124. }];
  125. [self.heartbeatOrAccostImgv mas_makeConstraints:^(MASConstraintMaker *make) {
  126. make.edges.equalTo(self.heartbeatOrAccostBtn).insets(UIEdgeInsetsMake(0, 0, 0, 0));
  127. //make.edges.equalTo(self.heartbeatOrAccostBtn).insets(UIEdgeInsetsMake(-7, -7, -7, -7));
  128. }];
  129. [super updateConstraints];
  130. }
  131. - (void)ym_bindViewModel:(YMHomePageListCellViewModel*)viewModel{
  132. if (!viewModel) {
  133. return;
  134. }
  135. _viewModel = viewModel;
  136. NSLog(@"输出🍀\n%@",[LCTools getImageUrlWithAddress:self.viewModel.userAvatar]);
  137. //[self.userAvatarView sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.userAvatar]];
  138. [self.userAvatarView sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.userAvatar] placeholderImage:ImageByName(@"")];
  139. @weakify(self)
  140. // [[[[RACObserve(self.viewModel, userOnlineStatusColor) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(UIColor * userOnlineStatusColor) {
  141. // @strongify(self)
  142. // self.userOnlineStatusPoint.backgroundColor = userOnlineStatusColor;
  143. // }];
  144. // [[[[RACObserve(self.viewModel, userOnlineStatusText) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSString * userOnlineStatusText) {
  145. // @strongify(self)
  146. // self.userOnlineStatusLb.text = userOnlineStatusText;
  147. // if ([userOnlineStatusText containsString:@"空闲"]) {
  148. // //self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_kongxian");
  149. //
  150. // //self.userOnlineStatusView.backgroundColor = HexColorFromRGBA(0xFFE6F1, 0.8);
  151. // self.userOnlineStatusPoint.backgroundColor = HexColorFromRGB(0xEE538F);
  152. // self.userOnlineStatusLb.textColor = HexColorFromRGB(0xEE538F);
  153. // [self.userOnlineStatusView ym_setGradientBackgroundWithColors:@[HexColorFromRGB(0xFFE6F1), HexColorFromRGB(0xFFE6F1)] locations:@[@0,@1] startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)];
  154. // } else if ([userOnlineStatusText containsString:@"在聊"]) {
  155. // //self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_zailiao");
  156. //
  157. // self.userOnlineStatusPoint.backgroundColor = HexColorFromRGB(0xFFFFFF);
  158. // self.userOnlineStatusLb.textColor = HexColorFromRGB(0xFFFFFF);
  159. // [self.userOnlineStatusView ym_setGradientBackgroundWithColors:@[HexColorFromRGB(0x85DAFD), HexColorFromRGB(0x3C7FFE)] locations:@[@0,@1] startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)];
  160. // }
  161. // }];
  162. [[[[RACObserve(self.viewModel, userOnlineStatusText) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSString * userOnlineStatusText) {
  163. @strongify(self)
  164. self.userOnlineStatusLb.text = userOnlineStatusText;
  165. if ([userOnlineStatusText containsString:@"空闲"]) {
  166. self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_kongxian");
  167. } else if ([userOnlineStatusText containsString:@"在聊"]) {
  168. self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_zailiao");
  169. } else if ([userOnlineStatusText containsString:@"离线"]) {
  170. self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_lixian");
  171. }
  172. }];
  173. self.userNicknameLb.text = self.viewModel.userNickname;
  174. NSString *title = [NSString stringWithFormat:@" %@",self.viewModel.userVideoFeesAmount];
  175. [self.userVideoFeesAmountBtn setTitle:title forState:UIControlStateNormal];
  176. //self.userVideoFeesAmountBtn.hidden = self.viewModel.isHideUserFeesAmount;
  177. self.userVideoFeesAmountBtn.hidden = YES;
  178. if (self.viewModel.isHideUserFeesAmount) {
  179. [self.userNicknameLb mas_makeConstraints:^(MASConstraintMaker *make) {
  180. make.left.equalTo(self.userAvatarView).offset(adapt(10));
  181. make.right.equalTo(self.userAvatarView).offset(adapt(-50));
  182. make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-10));
  183. make.height.mas_greaterThanOrEqualTo(adapt(22));
  184. }];
  185. [self.userVideoFeesAmountBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
  186. }];
  187. } else {
  188. [self.userNicknameLb mas_makeConstraints:^(MASConstraintMaker *make) {
  189. make.left.equalTo(self.userAvatarView).offset(adapt(10));
  190. make.right.equalTo(self.userAvatarView).offset(adapt(-50));
  191. make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-10));
  192. make.height.mas_greaterThanOrEqualTo(adapt(22));
  193. }];
  194. [self.userVideoFeesAmountBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
  195. }];
  196. // [self.userVideoFeesAmountBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
  197. // make.left.equalTo(self.userAvatarView).offset(adapt(10));
  198. // make.right.lessThanOrEqualTo(self.heartbeatOrAccostBtn.mas_left).offset(adapt(-3));
  199. // make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-9));
  200. // make.width.mas_equalTo(adapt(100));
  201. // make.height.mas_equalTo(adapt(22));
  202. // }];
  203. }
  204. //[self.heartbeatOrAccostBtn setTitle:self.viewModel.heartbeatOrAccostButtonTitle forState:UIControlStateNormal];
  205. //[self.heartbeatOrAccostBtn setImage:ImageByName(self.viewModel.heartbeatOrAccostButtonImage) forState:UIControlStateNormal];
  206. self.heartbeatOrAccostImgv.image = ImageByName(self.viewModel.heartbeatOrAccostButtonImage);
  207. //[self.heartbeatOrAccostBtn setTitleColor:self.viewModel.heartbeatOrAccostButtonTitleColor forState:UIControlStateNormal];
  208. //self.heartbeatOrAccostBtn.backgroundColor = self.viewModel.heartbeatOrAccostButtonBackgroundColor;
  209. }
  210. - (UIView *)baseView{
  211. if (!_baseView) {
  212. _baseView = [[UIView alloc]init];
  213. _baseView.layer.cornerRadius = adapt(10);
  214. _baseView.layer.masksToBounds = YES;
  215. }
  216. return _baseView;
  217. }
  218. - (UIImageView *)userAvatarView{
  219. if (!_userAvatarView) {
  220. _userAvatarView = [[UIImageView alloc]init];
  221. _userAvatarView.contentMode = UIViewContentModeScaleAspectFill;
  222. _userAvatarView.clipsToBounds = YES;
  223. _userAvatarView.userInteractionEnabled = YES;
  224. }
  225. return _userAvatarView;
  226. }
  227. - (UIImageView *)avatarMaskView{
  228. if (!_avatarMaskView) {
  229. _avatarMaskView = [[UIImageView alloc]init];
  230. _avatarMaskView.image = ImageByName(@"ym_common_home_avatar_mask");
  231. _avatarMaskView.contentMode = UIViewContentModeScaleAspectFill;
  232. _avatarMaskView.clipsToBounds = YES;
  233. _avatarMaskView.userInteractionEnabled = YES;
  234. _avatarMaskView.alpha = 0.6;
  235. }
  236. return _avatarMaskView;
  237. }
  238. - (UIImageView *)userOnlineStatusImgv {
  239. if (!_userOnlineStatusImgv) {
  240. _userOnlineStatusImgv = [[UIImageView alloc] init];
  241. _userOnlineStatusImgv.hidden = NO;
  242. //_userOnlineStatusImgv.backgroundColor = HexColorFromRGBA(0x000000, 0.4);
  243. //_userOnlineStatusImgv.layer.cornerRadius = adapt(18)/2;
  244. //_userOnlineStatusImgv.layer.masksToBounds = YES;
  245. }
  246. return _userOnlineStatusImgv;
  247. }
  248. - (UIView *)userOnlineStatusView{
  249. if (!_userOnlineStatusView) {
  250. _userOnlineStatusView = [[UIView alloc]init];
  251. _userOnlineStatusView.hidden = YES;
  252. _userOnlineStatusView.backgroundColor = HexColorFromRGBA(0xFFE6F1, 0.8);
  253. _userOnlineStatusView.layer.cornerRadius = adapt(22)/2;
  254. _userOnlineStatusView.layer.masksToBounds = YES;
  255. }
  256. return _userOnlineStatusView;
  257. }
  258. - (UIView *)userOnlineStatusPoint{
  259. if (!_userOnlineStatusPoint) {
  260. _userOnlineStatusPoint = [[UIView alloc]init];
  261. _userOnlineStatusPoint.backgroundColor = HexColorFromRGB(0xEE538F);
  262. _userOnlineStatusPoint.layer.cornerRadius = adapt(6)/2;
  263. _userOnlineStatusPoint.layer.masksToBounds = YES;
  264. }
  265. return _userOnlineStatusPoint;
  266. }
  267. - (UILabel *)userOnlineStatusLb{
  268. if (!_userOnlineStatusLb) {
  269. _userOnlineStatusLb = [[UILabel alloc]init];
  270. _userOnlineStatusLb.font = LCFont(12);
  271. _userOnlineStatusLb.textColor = HexColorFromRGB(0xEE538F);
  272. _userOnlineStatusLb.textAlignment = NSTextAlignmentCenter;
  273. _userOnlineStatusLb.text = @"空闲";
  274. }
  275. return _userOnlineStatusLb;
  276. }
  277. - (UIView *)gradientView{
  278. if (!_gradientView) {
  279. _gradientView = [[UIView alloc]init];
  280. _gradientView.hidden = YES;
  281. //[_gradientView ym_setGradientBackgroundWithColors:@[HexColorFromRGBA(0x0E0913,0.45),HexColorFromRGBA(0x0E0913,0.45)] locations:kMainGradLocation startPoint:CGPointMake(0, 0) endPoint:CGPointMake(0, 1)];
  282. //[_gradientView ym_setGradientBackgroundWithColors:@[UIColor.clearColor,HexColorFromRGBA(0x0E0913,0.75)] locations:kMainGradLocation startPoint:CGPointMake(0.5, 0) endPoint:CGPointMake(0.5, 1)];
  283. }
  284. return _gradientView;
  285. }
  286. - (UILabel *)userNicknameLb{
  287. if (!_userNicknameLb) {
  288. _userNicknameLb = [[UILabel alloc]init];
  289. _userNicknameLb.font = LCBoldFont(16);
  290. _userNicknameLb.textColor = HexColorFromRGB(0xFFFFFF);
  291. _userNicknameLb.textAlignment = NSTextAlignmentLeft;
  292. _userNicknameLb.text = @"******";
  293. }
  294. return _userNicknameLb;
  295. }
  296. - (UIImageView *)vipImgv {
  297. if (!_vipImgv) {
  298. _vipImgv = [[UIImageView alloc] initWithImage:ImageByName(@"ym_home_page_cell_vip")];
  299. _vipImgv.hidden = YES;
  300. }
  301. return _vipImgv;
  302. }
  303. //- (UILabel *)userNicknameLb{
  304. // if (!_userNicknameLb) {
  305. // _userNicknameLb = [[UILabel alloc]init];
  306. // _userNicknameLb.font = LCBoldFont(16);
  307. // _userNicknameLb.textColor = HexColorFromRGB(0xFFFFFF);
  308. // _userNicknameLb.textAlignment = NSTextAlignmentLeft;
  309. // _userNicknameLb.text = @"******";
  310. // }
  311. // return _userNicknameLb;
  312. //}
  313. - (UIButton *)userVideoFeesAmountBtn{
  314. if (!_userVideoFeesAmountBtn) {
  315. _userVideoFeesAmountBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  316. _userVideoFeesAmountBtn.titleLabel.font = LCFont(10);
  317. [_userVideoFeesAmountBtn setTitleColor:HexColorFromRGB(0xFFFFFF) forState:UIControlStateNormal];
  318. [_userVideoFeesAmountBtn setTitle:@" ****钻石/分钟" forState:UIControlStateNormal];
  319. [_userVideoFeesAmountBtn setImage:ImageByName(@"ym_home_page_diamond_icon") forState:UIControlStateNormal];
  320. _userVideoFeesAmountBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
  321. [_userVideoFeesAmountBtn setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
  322. CGFloat margin = adapt(0);
  323. _userVideoFeesAmountBtn.imageEdgeInsets = UIEdgeInsetsMake(0, -margin, 0, margin);
  324. _userVideoFeesAmountBtn.backgroundColor = UIColor.clearColor;
  325. _userVideoFeesAmountBtn.layer.cornerRadius = adapt(22) / 2.0;
  326. _userVideoFeesAmountBtn.layer.masksToBounds = YES;
  327. _userVideoFeesAmountBtn.hidden = YES;
  328. }
  329. return _userVideoFeesAmountBtn;
  330. }
  331. - (UIButton *)heartbeatOrAccostBtn{
  332. if (!_heartbeatOrAccostBtn) {
  333. _heartbeatOrAccostBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  334. //_heartbeatOrAccostBtn.backgroundColor = HexColorFromRGB(0xFF70C5);
  335. _heartbeatOrAccostBtn.titleLabel.font = LCFont(13);
  336. _heartbeatOrAccostBtn.imageView.contentMode = UIViewContentModeScaleToFill;
  337. [_heartbeatOrAccostBtn setTitleColor:HexColorFromRGB(0xFFFFFF) forState:UIControlStateNormal];
  338. //[_heartbeatOrAccostBtn setTitle:@"心动或搭讪" forState:UIControlStateNormal];
  339. //[_heartbeatOrAccostBtn setImage:ImageByName(@"ym_common_heartbeat_or_accost_icon") forState:UIControlStateNormal];
  340. _heartbeatOrAccostBtn.layer.cornerRadius = adapt(32) / 2;
  341. _heartbeatOrAccostBtn.layer.borderWidth = adapt(0);
  342. _heartbeatOrAccostBtn.layer.borderColor = HexColorFromRGB(0xFF70C5).CGColor;
  343. _heartbeatOrAccostBtn.layer.masksToBounds = YES;
  344. WS(weakSelf)
  345. [[[_heartbeatOrAccostBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  346. [weakSelf.viewModel sendAccostRequest];
  347. }];
  348. }
  349. return _heartbeatOrAccostBtn;
  350. }
  351. - (UIImageView *)heartbeatOrAccostImgv {
  352. if (!_heartbeatOrAccostImgv) {
  353. _heartbeatOrAccostImgv = [[UIImageView alloc] initWithImage:ImageByName(@"ym_common_home_dashan")];
  354. }
  355. return _heartbeatOrAccostImgv;
  356. }
  357. @end