YMSpoorCell.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. //
  2. // YMSpoorCell.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/17.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMSpoorCell.h"
  9. #import "YMSpoorCellViewModel.h"
  10. @interface YMSpoorCell ()
  11. /// 足迹VM
  12. @property (nonatomic, strong) YMSpoorCellViewModel *viewModel;
  13. /// 基础视图
  14. @property (nonatomic, strong) UIView *baseView;
  15. /// 用户头像视图
  16. @property (nonatomic, strong) UIImageView *userAvatarView;
  17. /// 用户昵称标签
  18. @property (nonatomic, strong) UILabel *userNicknameLb;
  19. /// 用户描述标签
  20. @property (nonatomic, strong) UILabel *userDescLb;
  21. /// 心动或搭讪按钮
  22. @property (nonatomic, strong) UIButton *heartbeatOrAccostBtn;
  23. @end
  24. @implementation YMSpoorCell
  25. - (void)awakeFromNib {
  26. [super awakeFromNib];
  27. // Initialization code
  28. }
  29. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  30. [super setSelected:selected animated:animated];
  31. // Configure the view for the selected state
  32. }
  33. - (void)ym_setupViews{
  34. [self.contentView addSubview:self.baseView];
  35. [self.baseView addSubview:self.userAvatarView];
  36. [self.baseView addSubview:self.userNicknameLb];
  37. [self.baseView addSubview:self.userDescLb];
  38. [self.baseView addSubview:self.heartbeatOrAccostBtn];
  39. [self setNeedsUpdateConstraints];
  40. [self updateConstraintsIfNeeded];
  41. }
  42. - (void)updateConstraints{
  43. [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) {
  44. make.top.equalTo(self.contentView);
  45. make.left.equalTo(self.contentView);
  46. make.right.equalTo(self.contentView);
  47. make.bottom.equalTo(self.contentView);
  48. }];
  49. [self.userAvatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  50. make.centerY.equalTo(self.baseView.mas_centerY);
  51. make.left.equalTo(self.baseView).offset(adapt(12));
  52. make.width.height.mas_equalTo(adapt(50));
  53. }];
  54. [self.userNicknameLb mas_makeConstraints:^(MASConstraintMaker *make) {
  55. make.bottom.equalTo(self.userAvatarView.mas_centerY).offset(adapt(-5));
  56. make.left.equalTo(self.userAvatarView.mas_right).offset(adapt(16));
  57. }];
  58. [self.userDescLb mas_makeConstraints:^(MASConstraintMaker *make) {
  59. make.top.equalTo(self.userAvatarView.mas_centerY).offset(adapt(5));
  60. make.left.equalTo(self.userAvatarView.mas_right).offset(adapt(16));
  61. }];
  62. [self.heartbeatOrAccostBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  63. make.centerY.equalTo(self.baseView.mas_centerY);
  64. make.right.equalTo(self.baseView).offset(adapt(-10));
  65. make.width.mas_equalTo(adapt(78));
  66. make.height.mas_equalTo(adapt(32));
  67. }];
  68. [super updateConstraints];
  69. }
  70. - (void)ym_bindViewModel:(YMSpoorCellViewModel *)viewModel{
  71. if (!viewModel) {
  72. return;
  73. }
  74. _viewModel = viewModel;
  75. [self.userAvatarView sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.userAvatar]];
  76. self.userNicknameLb.text = self.viewModel.userNickname;
  77. self.userDescLb.text = self.viewModel.userDesc;
  78. @weakify(self)
  79. [[[[RACObserve(self.viewModel, heartbeatOrAccostButtonImage) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSString * userOnlineStatusText) {
  80. @strongify(self)
  81. [self.heartbeatOrAccostBtn setImage:ImageByName(self.viewModel.heartbeatOrAccostButtonImage) forState:UIControlStateNormal];;
  82. }];
  83. }
  84. - (UIView *)baseView{
  85. if (!_baseView) {
  86. _baseView = [[UIView alloc]init];
  87. }
  88. return _baseView;
  89. }
  90. - (UIImageView *)userAvatarView{
  91. if (!_userAvatarView) {
  92. _userAvatarView = [[UIImageView alloc]init];
  93. _userAvatarView.backgroundColor = UIColor.lightGrayColor;
  94. _userAvatarView.layer.cornerRadius = adapt(50)/2;
  95. _userAvatarView.layer.masksToBounds = YES;
  96. }
  97. return _userAvatarView;
  98. }
  99. - (UILabel *)userNicknameLb{
  100. if (!_userNicknameLb) {
  101. _userNicknameLb = [[UILabel alloc]init];
  102. _userNicknameLb.font = LCBoldFont(15);
  103. _userNicknameLb.textColor = HexColorFromRGB(0x1B2739);
  104. _userNicknameLb.textAlignment = NSTextAlignmentLeft;
  105. _userNicknameLb.text = @"******";
  106. }
  107. return _userNicknameLb;
  108. }
  109. - (UILabel *)userDescLb{
  110. if (!_userDescLb) {
  111. _userDescLb = [[UILabel alloc]init];
  112. _userDescLb.font = LCFont(12);
  113. _userDescLb.textColor = HexColorFromRGB(0x7E848D);
  114. _userDescLb.textAlignment = NSTextAlignmentLeft;
  115. _userDescLb.text = @"******";
  116. }
  117. return _userDescLb;
  118. }
  119. - (UIButton *)heartbeatOrAccostBtn{
  120. if (!_heartbeatOrAccostBtn) {
  121. _heartbeatOrAccostBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  122. [_heartbeatOrAccostBtn setImage:ImageByName(@"ym_common_home_heart") forState:UIControlStateNormal];
  123. WS(weakSelf)
  124. [[[_heartbeatOrAccostBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  125. [weakSelf.viewModel sendAccostRequest];
  126. }];
  127. }
  128. return _heartbeatOrAccostBtn;
  129. }
  130. @end