// // YMRankTopView.m // MSYOUPAI // // Created by You on 2024/4/22. // Copyright © 2024 MS. All rights reserved. // #import "YMRankTopView.h" #define avatarWidth 65 #define avatarWidth2 55 @interface YMRankTopView() /// 排行榜VM @property (nonatomic, strong) YMRankingListSubCategoryViewModel *viewModel; @property (nonatomic, strong) UIImageView *rankingV1; @property (nonatomic, strong) UIImageView *rankingV2; @property (nonatomic, strong) UIImageView *rankingV3; @property (nonatomic, strong) UIImageView *avatarFrame1; @property (nonatomic, strong) UIImageView *avatarFrame2; @property (nonatomic, strong) UIImageView *avatarFrame3; @property (nonatomic, strong) UIImageView *avatarImgv1; @property (nonatomic, strong) UIImageView *avatarImgv2; @property (nonatomic, strong) UIImageView *avatarImgv3; //@property (nonatomic, strong) UIView *detailOneView; //@property (nonatomic, strong) UIView *detailTwoView; //@property (nonatomic, strong) UIView *detailThreeView; @property (nonatomic, strong) UILabel *userL1; @property (nonatomic, strong) UILabel *distanceL1; @property (nonatomic, strong) UILabel *userL2; @property (nonatomic, strong) UILabel *distanceL2; @property (nonatomic, strong) UILabel *userL3; @property (nonatomic, strong) UILabel *distanceL3; /// 遮罩视图 @property (nonatomic, strong) UIView *maskView2; @end @implementation YMRankTopView - (void)ym_setupViews{ [self addSubview:self.maskView2]; [self addSubview:self.rankingV1]; [self addSubview:self.rankingV2]; [self addSubview:self.rankingV3]; [self addSubview:self.avatarImgv1]; [self addSubview:self.avatarImgv2]; [self addSubview:self.avatarImgv3]; [self addSubview:self.avatarFrame1]; [self addSubview:self.avatarFrame2]; [self addSubview:self.avatarFrame3]; [self addSubview:self.userL1]; [self addSubview:self.userL2]; [self addSubview:self.userL3]; [self addSubview:self.distanceL1]; [self addSubview:self.distanceL2]; [self addSubview:self.distanceL3]; [self setNeedsUpdateConstraints]; [self updateConstraintsIfNeeded]; } - (void)updateConstraints{ [self.maskView2 mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(20); make.right.equalTo(self).offset(-20); make.bottom.equalTo(self); make.height.mas_equalTo(adapt(0.1)); }]; [self.rankingV1 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self); make.bottom.equalTo(self.maskView2.mas_top); make.width.mas_equalTo(adapt(120)); make.height.mas_equalTo(adapt(115)); }]; [self.rankingV2 mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.rankingV1.mas_left).offset(adapt(-10)); make.bottom.equalTo(self.rankingV1); make.width.mas_equalTo(adapt(100)); make.height.mas_equalTo(adapt(85)); }]; [self.rankingV3 mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.rankingV1.mas_right).offset(adapt(10)); make.bottom.equalTo(self.rankingV1); make.width.mas_equalTo(adapt(100)); make.height.mas_equalTo(adapt(85)); }]; [self.avatarImgv1 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.rankingV1.mas_top).offset(adapt(-30)); make.centerX.equalTo(self.rankingV1); make.width.height.mas_equalTo(adapt(avatarWidth)); }]; [self.avatarFrame1 mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.avatarImgv1); make.width.mas_equalTo(adapt(83)); make.height.mas_equalTo(adapt(93)); }]; [self.avatarImgv2 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.rankingV2.mas_top).offset(adapt(-30)); make.centerX.equalTo(self.rankingV2); make.width.height.mas_equalTo(adapt(avatarWidth2)); }]; [self.avatarFrame2 mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.avatarImgv2); make.width.height.mas_equalTo(adapt(70)); }]; [self.avatarImgv3 mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.rankingV3.mas_top).offset(adapt(-30)); make.centerX.equalTo(self.rankingV3); make.width.height.mas_equalTo(adapt(avatarWidth2)); }]; [self.avatarFrame3 mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.avatarImgv3); make.width.height.mas_equalTo(adapt(70)); }]; // 1 [self.userL1 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.rankingV1); make.centerY.equalTo(self.rankingV1.mas_top).offset(adapt(0)); make.leading.trailing.equalTo(self.rankingV1); }]; [self.distanceL1 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.rankingV1); make.top.equalTo(self.rankingV1.mas_top).offset(adapt(23)); make.leading.trailing.equalTo(self.rankingV1); }]; // 2 [self.userL2 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.rankingV2); make.centerY.equalTo(self.rankingV2.mas_top).offset(adapt(0)); make.leading.trailing.equalTo(self.rankingV2); }]; [self.distanceL2 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.rankingV2); make.top.equalTo(self.rankingV2.mas_top).offset(adapt(23)); make.leading.trailing.equalTo(self.rankingV2); }]; // 3 [self.userL3 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.rankingV3); make.centerY.equalTo(self.rankingV3.mas_top).offset(adapt(0)); make.leading.trailing.equalTo(self.rankingV3); }]; [self.distanceL3 mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.rankingV3); make.top.equalTo(self.rankingV3.mas_top).offset(adapt(23)); make.leading.trailing.equalTo(self.rankingV3); }]; [super updateConstraints]; } - (void)ym_bindViewModel:(YMRankingListSubCategoryViewModel*)viewModel{ if (!viewModel) { return; } _viewModel = viewModel; @weakify(self) [[[[RACObserve(self.viewModel, rankingOneUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) { @strongify(self) if (VM == nil || [VM isKindOfClass:[NSNull class]]) { self.avatarFrame1.hidden = YES; } else { if (!OCStringIsEmpty(VM.rankingUserAvatar)) { [self.avatarImgv1 sd_setImageWithURL:[LCTools getImageUrlWithAddress:VM.rankingUserAvatar] placeholderImage: ImageByName(@"ym_ranking_avatar_default")]; } if (!OCStringIsEmpty(VM.rankingUserNickname)) { self.userL1.text = VM.rankingUserNickname; } if (!OCStringIsEmpty(VM.rankingUserRankingDifference)) { self.distanceL1.text = VM.rankingUserRankingDifference; } self.avatarFrame1.hidden = NO; } }]; [[[[RACObserve(self.viewModel, rankingTwoUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) { @strongify(self) if (VM == nil || [VM isKindOfClass:[NSNull class]]) { self.avatarFrame2.hidden = YES; } else { if (!OCStringIsEmpty(VM.rankingUserAvatar)) { [self.avatarImgv2 sd_setImageWithURL:[LCTools getImageUrlWithAddress:VM.rankingUserAvatar] placeholderImage: ImageByName(@"ym_ranking_avatar_default")]; } if (!OCStringIsEmpty(VM.rankingUserNickname)) { self.userL2.text = VM.rankingUserNickname; } if (!OCStringIsEmpty(VM.rankingUserRankingDifference)) { self.distanceL2.text = VM.rankingUserRankingDifference; } self.avatarFrame2.hidden = NO; } }]; [[[[RACObserve(self.viewModel, rankingThreeUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) { @strongify(self) if (VM == nil || [VM isKindOfClass:[NSNull class]]) { self.avatarFrame3.hidden = YES; } else { if (!OCStringIsEmpty(VM.rankingUserAvatar)) { [self.avatarImgv3 sd_setImageWithURL:[LCTools getImageUrlWithAddress:VM.rankingUserAvatar] placeholderImage: ImageByName(@"ym_ranking_avatar_default")]; } if (!OCStringIsEmpty(VM.rankingUserNickname)) { self.userL3.text = VM.rankingUserNickname; } if (!OCStringIsEmpty(VM.rankingUserRankingDifference)) { self.distanceL3.text = VM.rankingUserRankingDifference; } self.avatarFrame3.hidden = NO; } }]; } - (UIImageView *)rankingV1{ if (!_rankingV1) { _rankingV1 = [[UIImageView alloc]init]; _rankingV1.image = ImageByName(@"ym_ranking_one_booth"); } return _rankingV1; } - (UIImageView *)rankingV2{ if (!_rankingV2) { _rankingV2 = [[UIImageView alloc]init]; _rankingV2.image = ImageByName(@"ym_ranking_two_booth"); } return _rankingV2; } - (UIImageView *)rankingV3{ if (!_rankingV3) { _rankingV3 = [[UIImageView alloc]init]; _rankingV3.image = ImageByName(@"ym_ranking_three_booth"); } return _rankingV3; } - (UIView *)maskView2{ if (!_maskView2) { _maskView2 = [[UIView alloc]init]; _maskView2.backgroundColor = UIColor.clearColor; [_maskView2 addRectCorner:UIRectCornerTopLeft|UIRectCornerTopRight radius:20]; } return _maskView2; } - (UIImageView *)avatarImgv1{ if (!_avatarImgv1) { _avatarImgv1 = [[UIImageView alloc]init]; _avatarImgv1.contentMode = UIViewContentModeScaleAspectFill; _avatarImgv1.backgroundColor = UIColor.lightGrayColor; _avatarImgv1.userInteractionEnabled = true; _avatarImgv1.image = ImageByName(@"ym_ranking_avatar_default"); [_avatarImgv1 addRectCorner:UIRectCornerAllCorners radius:avatarWidth/2]; } return _avatarImgv1; } - (UIImageView *)avatarImgv2{ if (!_avatarImgv2) { _avatarImgv2 = [[UIImageView alloc]init]; _avatarImgv2.contentMode = UIViewContentModeScaleAspectFill; _avatarImgv2.backgroundColor = UIColor.lightGrayColor; _avatarImgv2.userInteractionEnabled = true; _avatarImgv2.image = ImageByName(@"ym_ranking_avatar_default"); [_avatarImgv2 addRectCorner:UIRectCornerAllCorners radius:avatarWidth2/2]; } return _avatarImgv2; } - (UIImageView *)avatarImgv3{ if (!_avatarImgv3) { _avatarImgv3 = [[UIImageView alloc]init]; _avatarImgv3.contentMode = UIViewContentModeScaleAspectFill; _avatarImgv3.userInteractionEnabled = true; _avatarImgv3.backgroundColor = UIColor.lightGrayColor; _avatarImgv3.image = ImageByName(@"ym_ranking_avatar_default"); [_avatarImgv3 addRectCorner:UIRectCornerAllCorners radius:avatarWidth2/2]; } return _avatarImgv3; } - (UIImageView *)avatarFrame1{ if (!_avatarFrame1) { _avatarFrame1 = [[UIImageView alloc]init]; _avatarFrame1.image = ImageByName(@"ym_ranking_avatar_one_pendant"); _avatarFrame1.userInteractionEnabled = true; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_avatarFrame1 addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingOneUser.rankingUserId)]; }]; } return _avatarFrame1; } - (UIImageView *)avatarFrame2{ if (!_avatarFrame2) { _avatarFrame2 = [[UIImageView alloc]init]; _avatarFrame2.image = ImageByName(@"ym_ranking_avatar_two_pendant"); _avatarFrame2.userInteractionEnabled = true; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_avatarFrame2 addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingTwoUser.rankingUserId)]; }]; } return _avatarFrame2; } - (UIImageView *)avatarFrame3{ if (!_avatarFrame3) { _avatarFrame3 = [[UIImageView alloc]init]; _avatarFrame3.image = ImageByName(@"ym_ranking_avatar_three_pendant"); _avatarFrame3.userInteractionEnabled = true; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_avatarFrame3 addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingThreeUser.rankingUserId)]; }]; } return _avatarFrame3; } //- (UIView *)detailOneView{ // if (!_detailOneView) { // _detailOneView = [[UIView alloc]init]; // } // return _detailOneView; //} //- (UIView *)detailTwoView{ // if (!_detailTwoView) { // _detailTwoView = [[UIView alloc]init]; // } // return _detailTwoView; //} // //- (UIView *)detailThreeView{ // if (!_detailThreeView) { // _detailThreeView = [[UIView alloc]init]; // } // return _detailThreeView; //} - (UILabel *)userL1{ if (!_userL1) { _userL1 = [[UILabel alloc]init]; _userL1.font = LCFont(13); _userL1.textColor = HexColorFromRGB(0x000000); _userL1.textAlignment = NSTextAlignmentCenter; _userL1.text = @"******"; } return _userL1; } - (UILabel *)userL2{ if (!_userL2) { _userL2 = [[UILabel alloc]init]; _userL2.font = LCFont(13); _userL2.textColor = HexColorFromRGB(0x000000); _userL2.textAlignment = NSTextAlignmentCenter; _userL2.text = @"******"; } return _userL2; } - (UILabel *)userL3{ if (!_userL3) { _userL3 = [[UILabel alloc]init]; _userL3.font = LCFont(13); _userL3.textColor = HexColorFromRGB(0x000000); _userL3.textAlignment = NSTextAlignmentCenter; _userL3.text = @"******"; } return _userL3; } - (UILabel *)distanceL1{ if (!_distanceL1) { _distanceL1 = [[UILabel alloc]init]; _distanceL1.font = LCFont(10); _distanceL1.textColor = HexColorFromRGBA(0x000000,0.5); _distanceL1.textAlignment = NSTextAlignmentCenter; _distanceL1.text = @"距离上名 ****"; } return _distanceL1; } - (UILabel *)distanceL2{ if (!_distanceL2) { _distanceL2 = [[UILabel alloc]init]; _distanceL2.font = LCFont(10); _distanceL2.textColor = HexColorFromRGBA(0x000000,0.5); _distanceL2.textAlignment = NSTextAlignmentCenter; _distanceL2.text = @"距离上名 ****"; } return _distanceL2; } - (UILabel *)distanceL3{ if (!_distanceL3) { _distanceL3 = [[UILabel alloc]init]; _distanceL3.font = LCFont(10); _distanceL3.textColor = HexColorFromRGBA(0x000000,0.5); _distanceL3.textAlignment = NSTextAlignmentCenter; _distanceL3.text = @"距离上名 ****"; } return _distanceL3; } @end