// // MOLevelDanMuView.m // MiMoLive // // Created by SuperC on 2023/12/29. // #define headImgWidth 16.0 #define KBaseHeight 30.0 #define LeftSpacing 6.0 #define BaseSpacing 4.0 #import "MOLevelDanMuView.h" #import "UIView+BarrageView.h" #import "MORtmEntity.h" @interface MOLevelDanMuView () @property (nonatomic, strong) UIImageView *headImgView; @property (nonatomic, strong) UILabel *nameLab; @property (nonatomic, strong) UIView *bubbleBgView; @property (nonatomic, strong) UIView *bubbleBaseImgView; @property (nonatomic, strong) UIImageView *bubbleImgView; @property (nonatomic, strong) UILabel *contentLab; @property (nonatomic, strong) MORtmEntity *rtmEntity; @end @implementation MOLevelDanMuView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self loadSubviews]; } return self; } - (void)loadSubviews{ [self.bubbleBgView addSubview:self.bubbleBaseImgView]; [self.bubbleBgView addSubview:self.bubbleImgView]; [self.bubbleBgView addSubview:self.headImgView]; [self.bubbleBgView addSubview:self.nameLab]; [self.bubbleBgView addSubview:self.contentLab]; [self addSubview:self.bubbleBgView]; [self.bubbleBgView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self); }]; [self.bubbleBaseImgView mas_makeConstraints:^(MASConstraintMaker *make) { // make.edges.equalTo(self.bubbleBgView); make.left.equalTo(self).offset(3.0); make.right.equalTo(self).offset(-3.0); make.top.equalTo(self).offset(4.0); make.bottom.equalTo(self).offset(-4.0); }]; [self.bubbleImgView mas_makeConstraints:^(MASConstraintMaker *make) { // make.edges.equalTo(self.bubbleBgView); make.left.equalTo(self).offset(0.0); make.right.equalTo(self).offset(0.0); make.top.equalTo(self).offset(1.0); make.bottom.equalTo(self).offset(-1.0); }]; [self.headImgView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.bubbleBgView); make.height.width.equalTo(@(headImgWidth)); make.left.equalTo(@(LeftSpacing)); }]; [self.nameLab mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.headImgView.mas_right).offset(BaseSpacing); make.centerY.equalTo(self.bubbleBgView); make.width.greaterThanOrEqualTo(@10); }]; [self.contentLab mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.nameLab.mas_right).offset(BaseSpacing); make.top.bottom.equalTo(self.bubbleBgView); make.right.equalTo(self.bubbleBgView).offset(-10); }]; } - (void)layoutSubviews{ [super layoutSubviews]; #warning frame 与 Masonry 只能使用一种 并且 不能将Masonry代码写在这里, 否则内存泄漏 // self.bubbleBgView.frame = CGRectMake(headImgWidth / 2.0 , 15.0, self.bounds.size.width - headImgWidth, 20.0); // self.bubbleImgView.frame = CGRectMake(0.0, 0.0, self.bubbleBgView.bounds.size.width, self.bubbleBgView.bounds.size.height); // self.contentLab.frame = CGRectMake(25.0, 0.0, self.bubbleBgView.bounds.size.width - 25.0, self.bubbleBgView.bounds.size.height); // // self.headBgImgView.frame = CGRectMake(0.0, 0.0, headImgWidth + 10.0, headImgWidth + 10.0); // self.headImgView.frame = CGRectMake(0.0, 5.0, headImgWidth, headImgWidth); // //// self.headBgImgView.center = self.headImgView.center; // // self.nameLab.frame = CGRectMake(headImgWidth + 3.0, 5.0, self.bubbleBgView.bounds.size.width - headImgWidth, 16.0); WEAKSELF } - (CGSize)sizeThatFits:(CGSize)size{ CGFloat minWidth = 20.0; MORtmUser *user = self.rtmEntity.user; MORtmJosnEntity *jsonEntity = (MORtmJosnEntity *)self.rtmEntity.data; CGFloat nameLabWidth = [MOTools getWidthWithString:user.username font:[MOTextTools mediumFont:12.0]]; CGFloat contentLabWidth = [MOTools getWidthWithString:jsonEntity.content font:[MOTextTools regularFont:12.0]] + 2.0; CGFloat viewWidth = LeftSpacing + headImgWidth + BaseSpacing + nameLabWidth + BaseSpacing + contentLabWidth + 10.0; viewWidth = MAX(viewWidth, minWidth); return CGSizeMake(viewWidth, KBaseHeight); } - (void)setRtmEntity:(MORtmEntity *)rtmEntity{ _rtmEntity = rtmEntity; MORtmUser *rtmUser = rtmEntity.user; NSInteger level = rtmEntity.user.level ? rtmEntity.user.level : 0; NSInteger theBarrageCode = rtmUser.dressing.liveBarrage; if(theBarrageCode != 0){ //使用新逻辑 - 素材库 MOEffect *bubbleObject = [[MOSvgaSourceManage shareManager] getPropsInfoWithCode:theBarrageCode]; if(bubbleObject){ WEAKSELF NSURL *bubbleUrl = [NSURL URLWithString:bubbleObject.effectFile]; [[MOBubbleImageManager sharedManager] resizableNormalImageWithURL:bubbleUrl And:UIEdgeInsetsMake(0, 30.0, 0, 30.0) completion:^(UIImage * _Nonnull image) { dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf.bubbleImgView setImage:image]; }); }]; self.bubbleImgView.hidden = NO; self.bubbleBaseImgView.hidden = YES; } else{ self.bubbleImgView.hidden = YES; self.bubbleBaseImgView.hidden = NO; } } else{ self.bubbleImgView.hidden = YES; self.bubbleBaseImgView.hidden = NO; } [self.headImgView sd_setImageWithURL:[NSURL URLWithString:rtmEntity.user.avatar] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]]; self.nameLab.text = rtmEntity.user.username; MORtmJosnEntity *jsonEntity = (MORtmJosnEntity *)rtmEntity.data; self.contentLab.text = jsonEntity.content; } #pragma mark - BarrageViewProtocol - (void)configureWithParams:(NSDictionary *)params { [super configureWithParams:params]; self.rtmEntity = (MORtmEntity *)params[@"rtmEntiry"]; } - (void)updateWithTime:(NSTimeInterval)time { [self setNeedsLayout]; } #pragma mark - Lazy - (UIImageView *)headImgView{ if (!_headImgView) { _headImgView = [[UIImageView alloc] init]; _headImgView.contentMode = UIViewContentModeScaleAspectFill; [_headImgView setImage:[UIImage imageNamed:@"icon_mine_placeHolder"]]; _headImgView.layer.cornerRadius = headImgWidth / 2.0; _headImgView.layer.masksToBounds = YES; } return _headImgView; } - (UILabel *)nameLab{ if (!_nameLab) { _nameLab = [[UILabel alloc] init]; _nameLab.text = @""; _nameLab.font = [MOTextTools mediumFont:12.0]; _nameLab.textColor = kBaseTextHightlightColor_1; _nameLab.textAlignment = NSTextAlignmentLeft; } return _nameLab; } - (UIView *)bubbleBgView{ if (_bubbleBgView == nil) { _bubbleBgView = [UIView new]; _bubbleBgView.backgroundColor = [UIColor clearColor]; } return _bubbleBgView; } - (UIImageView *)bubbleImgView{ if (!_bubbleImgView) { _bubbleImgView = [[UIImageView alloc] init]; _bubbleImgView.contentMode = UIViewContentModeScaleToFill; } return _bubbleImgView; } - (UIView *)bubbleBaseImgView{ if (_bubbleBaseImgView == nil) { _bubbleBaseImgView = [UIView new]; _bubbleBaseImgView.backgroundColor = [MOTools colorWithHexString:@"#000000" alpha:0.3]; _bubbleBaseImgView.layer.cornerRadius = (KBaseHeight - 2.0 - 6.0 ) / 2.0; _bubbleBaseImgView.layer.masksToBounds = YES; } return _bubbleBaseImgView; } - (UILabel *)contentLab{ if (!_contentLab) { _contentLab = [[UILabel alloc] init]; _contentLab.text = @""; _contentLab.font = [MOTextTools regularFont:12.0]; _contentLab.textColor = [UIColor whiteColor]; _contentLab.textAlignment = NSTextAlignmentLeft; } return _contentLab; } - (UIImage *)getBubbleBgImgWith:(NSInteger)level{ UIImage *image; if(level >= 0 && level < 10){ image = nil; } else if (level >= 10 && level < 50){ image = [UIImage imageNamed:@"icon_live_dan_bg_10"]; } else if (level >= 50 && level < 65){ image = [UIImage imageNamed:@"icon_live_dan_bg_50"]; } else if (level >= 65 && level < 80){ image = [UIImage imageNamed:@"icon_live_dan_bg_65"]; } else if (level >= 80 && level < 100){ image = [UIImage imageNamed:@"icon_live_dan_bg_80"]; } else if (level >= 100 && level < 120){ image = [UIImage imageNamed:@"icon_live_dan_bg_100"]; } else if (level >= 120 && level < 135){ image = [UIImage imageNamed:@"icon_live_dan_bg_120"]; } else if (level >= 135){ image = [UIImage imageNamed:@"icon_live_dan_bg_135"]; } image = [UIImage imageNamed:@"icon_bubble_vip_k"]; return image; } - (UIImage *)getHeadImgWith:(NSInteger)level{ UIImage *image; if(level >= 0 && level < 65){ image = nil; } else if (level >= 65 && level < 80){ image = [UIImage imageNamed:@"icon_live_dan_head_bg_65"]; } else if (level >= 80 && level < 100){ image = [UIImage imageNamed:@"icon_live_dan_head_bg_80"]; } else if (level >= 100 && level < 120){ image = [UIImage imageNamed:@"icon_live_dan_head_bg_100"]; } else if (level >= 120 && level < 135){ image = [UIImage imageNamed:@"icon_live_dan_head_bg_120"]; } else if (level >= 135){ image = [UIImage imageNamed:@"icon_live_dan_head_bg_135"]; } return image; } @end