// // YMRankingListTopThreeView.m // MSYOUPAI // // Created by YoMi on 2024/2/14. // Copyright © 2024 MS. All rights reserved. // #import "YMRankingListTopThreeView.h" #import "YMRankingListTopThreeUserView.h" @interface YMRankingListTopThreeView() /// 排行榜VM @property (nonatomic, strong) YMRankingListSubCategoryViewModel *viewModel; /// 排名前三头像视图一 @property (nonatomic, strong) YMRankingListTopThreeUserView *userOneView; /// 排名一视图 @property (nonatomic, strong) UIImageView *rankingOneView; /// 排名前三头像视图二 @property (nonatomic, strong) YMRankingListTopThreeUserView *userTwoView; /// 排名二视图 @property (nonatomic, strong) UIImageView *rankingTwoView; /// 排名前三头像视图三 @property (nonatomic, strong) YMRankingListTopThreeUserView *userThreeView; /// 排名二视图 @property (nonatomic, strong) UIImageView *rankingThreeView; /// 遮罩视图 @property (nonatomic, strong) UIView *maskView; @end @implementation YMRankingListTopThreeView - (void)ym_setupViews{ [self addSubview:self.userOneView]; [self addSubview:self.rankingOneView]; [self addSubview:self.userTwoView]; [self addSubview:self.rankingTwoView]; [self addSubview:self.userThreeView]; [self addSubview:self.rankingThreeView]; [self addSubview:self.maskView]; [self setNeedsUpdateConstraints]; [self updateConstraintsIfNeeded]; } - (void)updateConstraints{ [self.userOneView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.mas_centerX); make.width.mas_equalTo(adapt(140)); make.height.mas_equalTo(adapt(115)); }]; [self.rankingOneView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.userOneView.mas_centerX); make.top.equalTo(self.userOneView.mas_bottom).offset(adapt(10)); make.bottom.equalTo(self.maskView.mas_top); make.width.mas_equalTo(adapt(91)); make.height.mas_equalTo(adapt(74)); }]; [self.userTwoView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(adapt(20)); }]; [self.rankingTwoView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.userTwoView.mas_centerX); make.top.equalTo(self.userTwoView.mas_bottom).offset(adapt(10)); make.bottom.equalTo(self.rankingOneView.mas_bottom); make.width.mas_equalTo(adapt(102)); make.height.mas_equalTo(adapt(85)); }]; [self.userThreeView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self).offset(adapt(-20)); }]; [self.rankingThreeView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.userThreeView.mas_centerX); make.top.equalTo(self.userThreeView.mas_bottom).offset(adapt(10)); make.bottom.equalTo(self.rankingOneView.mas_bottom); make.width.mas_equalTo(adapt(102)); make.height.mas_equalTo(adapt(85)); }]; [self.maskView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self); make.right.equalTo(self); make.bottom.equalTo(self); make.height.mas_equalTo(adapt(20)); }]; [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.userOneView.hidden = YES; } else { self.userOneView.hidden = NO; [self.userOneView ym_bindViewModel:VM]; } }]; [[[[RACObserve(self.viewModel, rankingTwoUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) { @strongify(self) if (VM == nil || [VM isKindOfClass:[NSNull class]]) { self.userTwoView.hidden = YES; } else { self.userTwoView.hidden = NO; [self.userTwoView ym_bindViewModel:VM]; } }]; [[[[RACObserve(self.viewModel, rankingThreeUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) { @strongify(self) if (VM == nil || [VM isKindOfClass:[NSNull class]]) { self.userThreeView.hidden = YES; } else { self.userThreeView.hidden = NO; [self.userThreeView ym_bindViewModel:VM]; } }]; } - (YMRankingListTopThreeUserView *)userOneView{ if (!_userOneView) { _userOneView = [[YMRankingListTopThreeUserView alloc]init]; _userOneView.pendantImage = ImageByName(@"ym_ranking_avatar_one_pendant"); _userOneView.avatarSize = 64; _userOneView.userInteractionEnabled = YES; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_userOneView addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingOneUser.rankingUserId)]; }]; } return _userOneView; } - (UIImageView *)rankingOneView{ if (!_rankingOneView) { _rankingOneView = [[UIImageView alloc]init]; _rankingOneView.image = ImageByName(@"ym_ranking_one_booth"); } return _rankingOneView; } - (YMRankingListTopThreeUserView *)userTwoView{ if (!_userTwoView) { _userTwoView = [[YMRankingListTopThreeUserView alloc]init]; _userTwoView.pendantImage = ImageByName(@"ym_ranking_avatar_two_pendant"); _userTwoView.avatarSize = 52; _userTwoView.userInteractionEnabled = YES; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_userTwoView addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingTwoUser.rankingUserId)]; }]; } return _userTwoView; } - (UIImageView *)rankingTwoView{ if (!_rankingTwoView) { _rankingTwoView = [[UIImageView alloc]init]; _rankingTwoView.image = ImageByName(@"ym_ranking_two_booth"); } return _rankingTwoView; } - (YMRankingListTopThreeUserView *)userThreeView{ if (!_userThreeView) { _userThreeView = [[YMRankingListTopThreeUserView alloc]init]; _userThreeView.pendantImage = ImageByName(@"ym_ranking_avatar_three_pendant"); _userThreeView.avatarSize = 52; _userThreeView.userInteractionEnabled = YES; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_userThreeView addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingThreeUser.rankingUserId)]; }]; } return _userThreeView; } - (UIImageView *)rankingThreeView{ if (!_rankingThreeView) { _rankingThreeView = [[UIImageView alloc]init]; _rankingThreeView.image = ImageByName(@"ym_ranking_three_booth"); } return _rankingThreeView; } - (UIView *)maskView{ if (!_maskView) { _maskView = [[UIView alloc]init]; _maskView.backgroundColor = HexColorFromRGB(0xFFFFFF); [_maskView addRectCorner:UIRectCornerTopLeft|UIRectCornerTopRight radius:20]; } return _maskView; } @end