| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- //
- // MORankCurrentView.m
- // MiMoLive
- //
- // Created by MiMo on 2025/9/10.
- //
- #import "MORankCurrentView.h"
- #import "MORankBottomButton.h"
- @interface MORankCurrentView ()
- @property (nonatomic, strong) UIView *contentView;
- @property (nonatomic, strong) UIImageView *indexImgView;
- @property (nonatomic, strong) UILabel *indexLabel;
- @property (nonatomic, strong) UIImageView *avatarImgView;
- @property (nonatomic, strong) UILabel *nameLabel;
- @property (nonatomic, strong) UIImageView *vipImgView;
- @property (nonatomic, strong) MOBaseLevelView *levelImgView;
- @property (nonatomic, strong) UIButton *goldNumBtn;
- @property (nonatomic, strong) MORankBottomButton *hitButton;
- @property (nonatomic, strong) MORankBasedata *dataModel;
- @property (nonatomic, strong) MOHeatRankCurrent *heatModel;
- @end
- @implementation MORankCurrentView
- - (instancetype)init {
- if (self = [super init]) {
- [self setupShadow];
- [self setupUI];
- }
- return self;
- }
- - (void)setupShadow {
- self.backgroundColor = UIColor.clearColor;
-
- // 阴影设置在 self 上
- self.layer.shadowColor = [UIColor blackColor].CGColor;
- self.layer.shadowOpacity = 0.1;
- self.layer.shadowOffset = CGSizeMake(0, 2);
- self.layer.shadowRadius = 6;
-
- // 用 contentView 包裹内容,负责圆角
- _contentView = [[UIView alloc] init];
- _contentView.backgroundColor = UIColor.whiteColor;
- _contentView.layer.cornerRadius = 16.0;
- if (@available(iOS 11.0, *)) {
- _contentView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
- }
- _contentView.layer.masksToBounds = YES;
-
- [self addSubview:_contentView];
- [_contentView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.edges.equalTo(self);
- }];
- }
- - (void)setupUI {
-
- [self.contentView addSubview:self.indexLabel];
- [self.indexLabel mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(CGSizeMake(30, 30));
- make.left.mas_equalTo(8);
- make.top.mas_equalTo(19);
- }];
-
- [self.contentView addSubview:self.indexImgView];
- [self.indexImgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(CGSizeMake(30, 30));
- make.left.mas_equalTo(8);
- make.top.mas_equalTo(19);
- }];
-
- [self.contentView addSubview:self.avatarImgView];
- [self.avatarImgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(CGSizeMake(40, 40));
- make.left.mas_equalTo(52);
- make.top.mas_equalTo(14);
- }];
-
- [self addSubview:self.goldNumBtn];
- [self.goldNumBtn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.mas_equalTo(106);
- make.bottom.equalTo(self.avatarImgView);
- make.height.mas_equalTo(18);
- make.width.mas_greaterThanOrEqualTo(100);
- }];
-
- [self addSubview:self.hitButton];
- [self.hitButton mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerY.equalTo(self.avatarImgView);
- make.right.mas_equalTo(-12);
- make.width.mas_equalTo(120);
- make.height.mas_equalTo(48);
- }];
-
- [self.contentView addSubview:self.nameLabel];
- [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.mas_equalTo(106);
- make.top.equalTo(self.avatarImgView);
- make.height.mas_equalTo(19);
- make.width.greaterThanOrEqualTo(@20.0);
- }];
-
- [self.contentView addSubview:self.levelImgView];
- [self.levelImgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.nameLabel.mas_right).offset(4.0);
- make.centerY.equalTo(self.nameLabel);
- make.width.equalTo(@(KLevelWidth));
- make.height.equalTo(@(MOLevelNormalHeight));
- }];
-
- [self.contentView addSubview:self.vipImgView];
- [self.vipImgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.levelImgView.mas_right).offset(2.0);
- make.centerY.equalTo(self.levelImgView.mas_centerY);
- make.width.equalTo(@(MOLevelNormalHeight));
- make.height.equalTo(@(MOLevelNormalHeight));
- }];
- }
- - (void)hitButtonAciton {
- if (self.hitBlock) {
- self.hitBlock(self.dataModel.rankHit);
- }
- }
- //贡献榜UI
- - (void)setupContribute:(MORankBasedata *)dataModel {
- _dataModel = dataModel;
-
- self.indexLabel.text = [NSString stringWithFormat:@"%.0f", dataModel.rankMe.idx];
- if (dataModel.rankMe.idx == -1) {
- self.indexLabel.text = @"99+";
- } else if (dataModel.rankMe.idx == -2) {
- self.indexLabel.text = @"10+";
- }
-
- [self.goldNumBtn setImage:[UIImage imageNamed:@"icon_rank_zuan"] forState:UIControlStateNormal];
- NSString *goldNumStr = [MOTextTools numberToStringWith:dataModel.rankMe.total];
- [self.goldNumBtn setTitle:goldNumStr forState:UIControlStateNormal];
- [self.avatarImgView sd_setImageWithURL:[NSURL URLWithString:dataModel.rankMe.user.userProfile.avatar] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]];
-
- self.indexImgView.hidden = YES;
- self.indexLabel.hidden = YES;
- if (dataModel.rankMe.idx == 1) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_1"];
-
- } else if (dataModel.rankMe.idx == 2) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_2"];
-
- } else if (dataModel.rankMe.idx == 3) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_3"];
-
- } else {
- self.indexLabel.hidden = NO;
- }
-
- self.hitButton.hidden = YES;
- if (dataModel.rankHit) {
- self.hitButton.hidden = NO;
-
- NSString *desc = nil;
- if (dataModel.rankHit.hitType == 2) {//去上榜1
- desc = NSLocalString(@"C60019");
- } else {//去上榜
- desc = NSLocalString(@"C60020");
- }
- [self.hitButton configureWithCount:[NSString stringWithFormat:@"x %@", [MOTextTools numberToStringWith:dataModel.rankHit.hitAmount]] desc:desc isGradient:YES];
- [self.hitButton.iconView sd_setImageWithURL:[NSURL URLWithString:dataModel.rankHit.giftImg]];
- }
-
- self.levelImgView.levelNum = dataModel.rankMe.user.level;
- if(dataModel.rankMe.user.level >= 100){
- [self.levelImgView mas_updateConstraints:^(MASConstraintMaker *make) {
- make.width.equalTo(@(MOLevelMaxWidth));
- }];
- }
- else{
- [self.levelImgView mas_updateConstraints:^(MASConstraintMaker *make) {
- make.width.equalTo(@(MOLevelNormalWidth));
- }];
- }
-
- MOBaseVips *vipObject = [[MOSvgaSourceManage shareManager] toGetTheVipObjectWith:dataModel.rankMe.user.vipType];
- if(vipObject.thumbnail.length > 0){
- [self.vipImgView sd_setImageWithURL:[NSURL URLWithString:vipObject.thumbnail] placeholderImage:nil];
- self.nameLabel.text = [self handleRankNameLabel:dataModel.rankMe.user.userProfile.nickname vip:YES];
- }
- else{
- [self.vipImgView setImage:nil];
- self.nameLabel.text = [self handleRankNameLabel:dataModel.rankMe.user.userProfile.nickname vip:NO];
- }
-
- }
- //收入榜UI
- - (void)setupRevenue:(MORankBasedata *)dataModel {
- _dataModel = dataModel;
-
- self.indexLabel.text = [NSString stringWithFormat:@"%.0f", dataModel.rankFooter.idx];
- if (dataModel.rankFooter.idx == -1) {
- self.indexLabel.text = @"99+";
- }
-
- [self.goldNumBtn setImage:[UIImage imageNamed:@"icon_rank_gold_bean"] forState:UIControlStateNormal];
- NSString *goldNumStr = [MOTextTools numberToStringWith:dataModel.rankFooter.total];
- [self.goldNumBtn setTitle:goldNumStr forState:UIControlStateNormal];
- [self.avatarImgView sd_setImageWithURL:[NSURL URLWithString:dataModel.rankFooter.userBase.userProfile.avatar] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]];
-
- self.indexImgView.hidden = YES;
- self.indexLabel.hidden = YES;
- if (dataModel.rankFooter.idx == 1) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_1"];
-
- } else if (dataModel.rankFooter.idx == 2) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_2"];
-
- } else if (dataModel.rankFooter.idx == 3) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_3"];
-
- } else {
- self.indexLabel.hidden = NO;
- }
-
- self.hitButton.hidden = YES;
- if (dataModel.rankHit) {
- self.hitButton.hidden = NO;
-
- NSString *desc = nil;
- if (dataModel.rankHit.hitType == 2) {//去上榜1
- desc = NSLocalString(@"C60019");
- } else {//去上榜
- desc = NSLocalString(@"C60020");
- }
-
- [self.hitButton configureWithCount:[NSString stringWithFormat:@"x %@", [MOTextTools numberToStringWith:dataModel.rankHit.hitAmount]] desc:desc isGradient:YES];
- [self.hitButton.iconView sd_setImageWithURL:[NSURL URLWithString:dataModel.rankHit.giftImg]];
- }
-
- self.levelImgView.levelNum = dataModel.rankFooter.userBase.level;
- if(dataModel.rankFooter.userBase.level >= 100){
- [self.levelImgView mas_updateConstraints:^(MASConstraintMaker *make) {
- make.width.equalTo(@(MOLevelMaxWidth));
- }];
- }
- else{
- [self.levelImgView mas_updateConstraints:^(MASConstraintMaker *make) {
- make.width.equalTo(@(MOLevelNormalWidth));
- }];
- }
-
- MOBaseVips *vipObject = [[MOSvgaSourceManage shareManager] toGetTheVipObjectWith:dataModel.rankFooter.userBase.vipType];
- if(vipObject.thumbnail.length > 0){
- [self.vipImgView sd_setImageWithURL:[NSURL URLWithString:vipObject.thumbnail] placeholderImage:nil];
- self.nameLabel.text = [self handleRankNameLabel:dataModel.rankFooter.userBase.userProfile.nickname vip:YES];
- }
- else{
- [self.vipImgView setImage:nil];
- self.nameLabel.text = [self handleRankNameLabel:dataModel.rankFooter.userBase.userProfile.nickname vip:NO];
- }
- }
- //收益榜和贡献榜复用
- - (NSString *)handleRankNameLabel:(NSString *)name vip:(BOOL)vip {
- if (self.hitButton.isHidden) {//不显示右下角引导送礼按钮
- return [MOTools trimString:name maxLength:12];
- }
- if (SCREENWIDTH < 400.0 || vip) {
- return [MOTools trimString:name maxLength:6];
- } else {
- return [MOTools trimString:name maxLength:9];
- }
- }
- //热度榜底部UI
- - (void)setupHeatRank:(MOHeatRankCurrent *)heatModel {
- _heatModel = heatModel;
-
- self.hitButton.hidden = YES;
-
- self.indexLabel.text = [NSString stringWithFormat:@"%zd", heatModel.rank];
- if (heatModel.rank == -1) {
- self.indexLabel.text = @"99+";
- }
-
- [self.goldNumBtn setImage:[UIImage imageNamed:@"icon_rank_heat"] forState:UIControlStateNormal];
-
- NSString *goldNumStr = [MOTextTools numberToStringAboutTwoWith:heatModel.heat];
- [self.goldNumBtn setTitle:goldNumStr forState:UIControlStateNormal];
- [self.avatarImgView sd_setImageWithURL:[NSURL URLWithString:heatModel.user.userProfile.avatar] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]];
- self.indexImgView.hidden = YES;
- self.indexLabel.hidden = YES;
- if (heatModel.rank == 1) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_1"];
-
- } else if (heatModel.rank == 2) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_2"];
-
- } else if (heatModel.rank == 3) {
- self.indexImgView.hidden = NO;
- self.indexImgView.image = [UIImage imageNamed:@"icon_rank_3"];
-
- } else {
- self.indexLabel.hidden = NO;
- }
-
- self.levelImgView.levelNum = heatModel.user.level;
- if(heatModel.user.level >= 100){
- [self.levelImgView mas_updateConstraints:^(MASConstraintMaker *make) {
- make.width.equalTo(@(MOLevelMaxWidth));
- }];
- }
- else{
- [self.levelImgView mas_updateConstraints:^(MASConstraintMaker *make) {
- make.width.equalTo(@(MOLevelNormalWidth));
- }];
- }
-
- MOBaseVips *vipObject = [[MOSvgaSourceManage shareManager] toGetTheVipObjectWith:heatModel.user.vipType];
- if(vipObject.thumbnail.length > 0){
- [self.vipImgView sd_setImageWithURL:[NSURL URLWithString:vipObject.thumbnail] placeholderImage:nil];
- self.nameLabel.text = [self handleHeatRankNameLabel:heatModel.user.userProfile.nickname vip:YES];
- }
- else{
- [self.vipImgView setImage:nil];
- self.nameLabel.text = [self handleHeatRankNameLabel:heatModel.user.userProfile.nickname vip:NO];
- }
- }
- //热度榜专用
- - (NSString *)handleHeatRankNameLabel:(NSString *)name vip:(BOOL)vip {
- if (SCREENWIDTH < 400.0 || vip) {
- return [MOTools trimString:name maxLength:13];
- } else {
- return [MOTools trimString:name maxLength:15];
- }
- }
- #pragma mark - Lazy
- - (UILabel *)indexLabel {
- if (!_indexLabel) {
- _indexLabel = [[UILabel alloc] init];
- _indexLabel.textColor = [MOTools colorWithHexString:@"#CDCFD9"];
- _indexLabel.font = [MOTextTools boldFont:15];
- _indexLabel.textAlignment = NSTextAlignmentCenter;
- _indexLabel.adjustsFontSizeToFitWidth = YES;
- }
- return _indexLabel;
- }
- - (UIImageView *)indexImgView {
- if (!_indexImgView) {
- _indexImgView = [[UIImageView alloc] init];
- _indexImgView.hidden = YES;
- }
- return _indexImgView;
- }
- - (UIImageView *)avatarImgView {
- if (!_avatarImgView) {
- _avatarImgView = [[UIImageView alloc] init];
- _avatarImgView.contentMode = UIViewContentModeScaleAspectFill;
- _avatarImgView.layer.masksToBounds = YES;
- _avatarImgView.layer.cornerRadius = 20;
- }
- return _avatarImgView;
- }
- - (UILabel *)nameLabel {
- if (!_nameLabel) {
- _nameLabel = [[UILabel alloc] init];
- _nameLabel.textColor = kBaseTextColor_1;
- _nameLabel.font = [MOTextTools poppinsMediumFont:16];
- }
- return _nameLabel;
- }
- - (UIButton *)goldNumBtn{
- if (!_goldNumBtn)
- {
- _goldNumBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- _goldNumBtn.backgroundColor = [UIColor clearColor];
- // [_goldNumBtn setImage:[UIImage imageNamed:@"icon_rank_gold_bean"] forState:UIControlStateNormal];
- // [_goldNumBtn setTitle:@"0" forState:UIControlStateNormal];
- _goldNumBtn.titleLabel.font = [MOTextTools mediumFont:12];
- _goldNumBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 3.0, 0, 0);
- [_goldNumBtn setTitleColor:[MOTools colorWithHexString:@"#5C5E66"] forState:UIControlStateNormal];
- _goldNumBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
- }
- return _goldNumBtn;
- }
- - (MORankBottomButton *)hitButton {
- if (!_hitButton) {
- _hitButton = [[MORankBottomButton alloc] initWithFrame:CGRectMake(0, 0, kScaleWidth(168), 48)];
- [_hitButton addTarget:self action:@selector(hitButtonAciton) forControlEvents:UIControlEventTouchUpInside];
- }
- return _hitButton;
- }
- - (UIImageView *)vipImgView{
- if(!_vipImgView){
- _vipImgView = [[UIImageView alloc] init];
- _vipImgView.contentMode = UIViewContentModeScaleAspectFit;
- }
- return _vipImgView;
- }
- - (MOBaseLevelView *)levelImgView{
- if(!_levelImgView){
- _levelImgView = [[MOBaseLevelView alloc] init];
- }
- return _levelImgView;
- }
- @end
|