// // YMHomePageListCell.m // MSYOUPAI // // Created by YoMi on 2024/2/12. // Copyright © 2024 MS. All rights reserved. // #import "YMHomePageListCell.h" #import "YMHomePageListCellViewModel.h" @interface YMHomePageListCell() /// ViewModel @property (nonatomic, strong) YMHomePageListCellViewModel *viewModel; /// 基础视图 @property (nonatomic, strong) UIView *baseView; /// 用户头像视图 @property (nonatomic, strong) UIImageView *userAvatarView; /// 用户在线状态视图 @property (nonatomic, strong) UIImageView *userOnlineStatusImgv; /// 用户在线状态视图 @property (nonatomic, strong) UIView *userOnlineStatusView; /// 用户在线状态点 @property (nonatomic, strong) UIView *userOnlineStatusPoint; /// 用户在线状态标签 @property (nonatomic, strong) UILabel *userOnlineStatusLb; /// 渐变视图 @property (nonatomic, strong) UIView *gradientView; /// 用户昵称标签 @property (nonatomic, strong) UILabel *userNicknameLb; /// 用户昵称标签 @property (nonatomic, strong) UIImageView *vipImgv; /// 用户视频费用金额按钮 @property (nonatomic, strong) UIButton *userVideoFeesAmountBtn; /// 心动或搭讪按钮 @property (nonatomic, strong) UIButton *heartbeatOrAccostBtn; /// 心动或搭讪按钮 @property (nonatomic, strong) UIImageView *heartbeatOrAccostImgv; @end @implementation YMHomePageListCell - (void)ym_setupViews{ [self.contentView addSubview:self.baseView]; [self.baseView addSubview:self.userAvatarView]; [self.userAvatarView addSubview:self.userOnlineStatusImgv]; [self.userAvatarView addSubview:self.userOnlineStatusView]; [self.userOnlineStatusView addSubview:self.userOnlineStatusPoint]; [self.userOnlineStatusView addSubview:self.userOnlineStatusLb]; [self.userAvatarView addSubview:self.gradientView]; [self.userAvatarView addSubview:self.userNicknameLb]; [self.userAvatarView addSubview:self.vipImgv]; [self.userAvatarView addSubview:self.userVideoFeesAmountBtn]; [self.contentView addSubview:self.heartbeatOrAccostBtn]; [self.heartbeatOrAccostBtn addSubview:self.heartbeatOrAccostImgv]; [self setNeedsUpdateConstraints]; [self updateConstraintsIfNeeded]; } - (void)updateConstraints { [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView); make.left.equalTo(self.contentView); make.right.equalTo(self.contentView); make.bottom.equalTo(self.contentView); }]; [self.userAvatarView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.baseView); make.left.equalTo(self.baseView); make.right.equalTo(self.baseView); make.bottom.equalTo(self.baseView); }]; [self.userOnlineStatusImgv mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.userAvatarView).offset(adapt(5)); make.left.equalTo(self.userAvatarView).offset(adapt(5)); }]; [self.userOnlineStatusView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.userAvatarView).offset(adapt(10)); make.left.equalTo(self.userAvatarView).offset(adapt(10)); make.height.mas_equalTo(adapt(22)); }]; [self.userOnlineStatusPoint mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.userOnlineStatusView.mas_centerY); make.left.equalTo(self.userOnlineStatusView).offset(adapt(10)); make.width.height.mas_equalTo(adapt(6)); }]; [self.userOnlineStatusLb mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.userOnlineStatusView.mas_centerY); make.left.equalTo(self.userOnlineStatusPoint.mas_right).offset(adapt(5)); make.right.equalTo(self.userOnlineStatusView).offset(adapt(-10)); }]; [self.gradientView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.baseView); make.left.equalTo(self.userAvatarView); make.right.equalTo(self.userAvatarView); make.bottom.equalTo(self.userAvatarView); make.height.mas_equalTo(adapt(87)); }]; [self.userNicknameLb mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userAvatarView).offset(adapt(10)); make.bottom.equalTo(self.userVideoFeesAmountBtn.mas_top).offset(adapt(-10)); }]; [self.vipImgv mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userNicknameLb.mas_right).offset(adapt(2)); make.centerY.equalTo(self.userNicknameLb.mas_centerY).offset(adapt(0)); make.width.height.mas_equalTo(adapt(11)); }]; [self.userVideoFeesAmountBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userAvatarView).offset(adapt(10)); make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-9)); make.width.mas_equalTo(adapt(100)); make.height.mas_equalTo(adapt(22)); }]; [self.heartbeatOrAccostBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.contentView.mas_right).offset(adapt(5)); make.bottom.equalTo(self.contentView.mas_bottom).offset(adapt(5)); make.width.height.mas_equalTo(adapt(44)); }]; [self.heartbeatOrAccostImgv mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.heartbeatOrAccostBtn).insets(UIEdgeInsetsMake(-7, -7, -7, -7)); }]; [super updateConstraints]; } - (void)ym_bindViewModel:(YMHomePageListCellViewModel*)viewModel{ if (!viewModel) { return; } _viewModel = viewModel; [self.userAvatarView sd_setImageWithURL:[LCTools getImageUrlWithAddress:self.viewModel.userAvatar]]; @weakify(self) // [[[[RACObserve(self.viewModel, userOnlineStatusColor) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(UIColor * userOnlineStatusColor) { // @strongify(self) // self.userOnlineStatusPoint.backgroundColor = userOnlineStatusColor; // }]; [[[[RACObserve(self.viewModel, userOnlineStatusText) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSString * userOnlineStatusText) { @strongify(self) self.userOnlineStatusLb.text = userOnlineStatusText; if ([userOnlineStatusText containsString:@"空闲"]) { //self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_kongxian"); //self.userOnlineStatusView.backgroundColor = HexColorFromRGBA(0xFFE6F1, 0.8); self.userOnlineStatusPoint.backgroundColor = HexColorFromRGB(0xEE538F); self.userOnlineStatusLb.textColor = HexColorFromRGB(0xEE538F); [self.userOnlineStatusView ym_setGradientBackgroundWithColors:@[HexColorFromRGB(0xFFE6F1), HexColorFromRGB(0xFFE6F1)] locations:@[@0,@1] startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)]; } else if ([userOnlineStatusText containsString:@"在聊"]) { //self.userOnlineStatusImgv.image = ImageByName(@"ym_common_home_status_zailiao"); self.userOnlineStatusPoint.backgroundColor = HexColorFromRGB(0xFFFFFF); self.userOnlineStatusLb.textColor = HexColorFromRGB(0xFFFFFF); [self.userOnlineStatusView ym_setGradientBackgroundWithColors:@[HexColorFromRGB(0x85DAFD), HexColorFromRGB(0x3C7FFE)] locations:@[@0,@1] startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)]; } }]; self.userNicknameLb.text = self.viewModel.userNickname; [self.userVideoFeesAmountBtn setTitle:self.viewModel.userVideoFeesAmount forState:UIControlStateNormal]; self.userVideoFeesAmountBtn.hidden = self.viewModel.isHideUserFeesAmount; if (self.viewModel.isHideUserFeesAmount) { [self.userNicknameLb mas_remakeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userAvatarView).offset(adapt(10)); //make.right.equalTo(self.heartbeatOrAccostBtn.mas_left).offset(adapt(-10)); make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-9)); }]; [self.userVideoFeesAmountBtn mas_remakeConstraints:^(MASConstraintMaker *make) { }]; } else { [self.userNicknameLb mas_remakeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userAvatarView).offset(adapt(10)); //make.right.equalTo(self.heartbeatOrAccostBtn.mas_left).offset(adapt(-10)); make.bottom.equalTo(self.userVideoFeesAmountBtn.mas_top).offset(adapt(-10)); }]; [self.userVideoFeesAmountBtn mas_remakeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.userAvatarView).offset(adapt(10)); make.right.lessThanOrEqualTo(self.heartbeatOrAccostBtn.mas_left).offset(adapt(-3)); make.bottom.equalTo(self.userAvatarView.mas_bottom).offset(adapt(-9)); make.width.mas_equalTo(adapt(100)); make.height.mas_equalTo(adapt(22)); }]; } //[self.heartbeatOrAccostBtn setTitle:self.viewModel.heartbeatOrAccostButtonTitle forState:UIControlStateNormal]; //[self.heartbeatOrAccostBtn setImage:ImageByName(self.viewModel.heartbeatOrAccostButtonImage) forState:UIControlStateNormal]; self.heartbeatOrAccostImgv.image = ImageByName(self.viewModel.heartbeatOrAccostButtonImage); //[self.heartbeatOrAccostBtn setTitleColor:self.viewModel.heartbeatOrAccostButtonTitleColor forState:UIControlStateNormal]; //self.heartbeatOrAccostBtn.backgroundColor = self.viewModel.heartbeatOrAccostButtonBackgroundColor; } - (UIView *)baseView{ if (!_baseView) { _baseView = [[UIView alloc]init]; _baseView.layer.cornerRadius = adapt(10); _baseView.layer.masksToBounds = YES; } return _baseView; } - (UIImageView *)userAvatarView{ if (!_userAvatarView) { _userAvatarView = [[UIImageView alloc]init]; _userAvatarView.contentMode = UIViewContentModeScaleAspectFill; _userAvatarView.clipsToBounds = YES; _userAvatarView.userInteractionEnabled = YES; } return _userAvatarView; } - (UIImageView *)userOnlineStatusImgv { if (!_userOnlineStatusImgv) { _userOnlineStatusImgv = [[UIImageView alloc] init]; _userOnlineStatusImgv.hidden = YES; //_userOnlineStatusImgv.backgroundColor = HexColorFromRGBA(0x000000, 0.4); //_userOnlineStatusImgv.layer.cornerRadius = adapt(18)/2; //_userOnlineStatusImgv.layer.masksToBounds = YES; } return _userOnlineStatusImgv; } - (UIView *)userOnlineStatusView{ if (!_userOnlineStatusView) { _userOnlineStatusView = [[UIView alloc]init]; _userOnlineStatusView.hidden = NO; _userOnlineStatusView.backgroundColor = HexColorFromRGBA(0xFFE6F1, 0.8); _userOnlineStatusView.layer.cornerRadius = adapt(22)/2; _userOnlineStatusView.layer.masksToBounds = YES; } return _userOnlineStatusView; } - (UIView *)userOnlineStatusPoint{ if (!_userOnlineStatusPoint) { _userOnlineStatusPoint = [[UIView alloc]init]; _userOnlineStatusPoint.backgroundColor = HexColorFromRGB(0xEE538F); _userOnlineStatusPoint.layer.cornerRadius = adapt(6)/2; _userOnlineStatusPoint.layer.masksToBounds = YES; } return _userOnlineStatusPoint; } - (UILabel *)userOnlineStatusLb{ if (!_userOnlineStatusLb) { _userOnlineStatusLb = [[UILabel alloc]init]; _userOnlineStatusLb.font = LCFont(12); _userOnlineStatusLb.textColor = HexColorFromRGB(0xEE538F); _userOnlineStatusLb.textAlignment = NSTextAlignmentCenter; _userOnlineStatusLb.text = @"空闲"; } return _userOnlineStatusLb; } - (UIView *)gradientView{ if (!_gradientView) { _gradientView = [[UIView alloc]init]; [_gradientView ym_setGradientBackgroundWithColors:@[UIColor.clearColor,HexColorFromRGBA(0x0E0913,0.75)] locations:kMainGradLocation startPoint:CGPointMake(0.5, 0) endPoint:CGPointMake(0.5, 1)]; } return _gradientView; } - (UILabel *)userNicknameLb{ if (!_userNicknameLb) { _userNicknameLb = [[UILabel alloc]init]; _userNicknameLb.font = LCBoldFont(16); _userNicknameLb.textColor = HexColorFromRGB(0xFFFFFF); _userNicknameLb.textAlignment = NSTextAlignmentLeft; _userNicknameLb.text = @"******"; } return _userNicknameLb; } - (UIImageView *)vipImgv { if (!_vipImgv) { _vipImgv = [[UIImageView alloc] initWithImage:ImageByName(@"ym_home_page_cell_vip")]; } return _vipImgv; } //- (UILabel *)userNicknameLb{ // if (!_userNicknameLb) { // _userNicknameLb = [[UILabel alloc]init]; // _userNicknameLb.font = LCBoldFont(16); // _userNicknameLb.textColor = HexColorFromRGB(0xFFFFFF); // _userNicknameLb.textAlignment = NSTextAlignmentLeft; // _userNicknameLb.text = @"******"; // } // return _userNicknameLb; //} - (UIButton *)userVideoFeesAmountBtn{ if (!_userVideoFeesAmountBtn) { _userVideoFeesAmountBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _userVideoFeesAmountBtn.titleLabel.font = LCFont(10); [_userVideoFeesAmountBtn setTitleColor:HexColorFromRGB(0x686A7E) forState:UIControlStateNormal]; [_userVideoFeesAmountBtn setTitle:@"****钻石/分钟" forState:UIControlStateNormal]; [_userVideoFeesAmountBtn setImage:ImageByName(@"ym_home_page_diamond_icon") forState:UIControlStateNormal]; _userVideoFeesAmountBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; [_userVideoFeesAmountBtn setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight]; CGFloat margin = adapt(5); _userVideoFeesAmountBtn.imageEdgeInsets = UIEdgeInsetsMake(0, -margin, 0, margin); _userVideoFeesAmountBtn.backgroundColor = [UIColor.whiteColor colorWithAlphaComponent:0.8]; _userVideoFeesAmountBtn.layer.cornerRadius = adapt(22) / 2.0; _userVideoFeesAmountBtn.layer.masksToBounds = YES; } return _userVideoFeesAmountBtn; } - (UIButton *)heartbeatOrAccostBtn{ if (!_heartbeatOrAccostBtn) { _heartbeatOrAccostBtn = [UIButton buttonWithType:UIButtonTypeCustom]; //_heartbeatOrAccostBtn.backgroundColor = HexColorFromRGB(0xFF70C5); _heartbeatOrAccostBtn.titleLabel.font = LCFont(13); _heartbeatOrAccostBtn.imageView.contentMode = UIViewContentModeScaleToFill; [_heartbeatOrAccostBtn setTitleColor:HexColorFromRGB(0xFFFFFF) forState:UIControlStateNormal]; //[_heartbeatOrAccostBtn setTitle:@"心动或搭讪" forState:UIControlStateNormal]; //[_heartbeatOrAccostBtn setImage:ImageByName(@"ym_common_heartbeat_or_accost_icon") forState:UIControlStateNormal]; _heartbeatOrAccostBtn.layer.cornerRadius = adapt(44)/2; _heartbeatOrAccostBtn.layer.borderWidth = adapt(0); _heartbeatOrAccostBtn.layer.borderColor = HexColorFromRGB(0xFF70C5).CGColor; _heartbeatOrAccostBtn.layer.masksToBounds = YES; WS(weakSelf) [[[_heartbeatOrAccostBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel sendAccostRequest]; }]; } return _heartbeatOrAccostBtn; } - (UIImageView *)heartbeatOrAccostImgv { if (!_heartbeatOrAccostImgv) { _heartbeatOrAccostImgv = [[UIImageView alloc] initWithImage:ImageByName(@"ym_common_home_pink_heart")]; } return _heartbeatOrAccostImgv; } @end