MOLevelDanMuView.m 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. //
  2. // MOLevelDanMuView.m
  3. // MiMoLive
  4. //
  5. // Created by SuperC on 2023/12/29.
  6. //
  7. #define headImgWidth 16.0
  8. #define KBaseHeight 30.0
  9. #define LeftSpacing 6.0
  10. #define BaseSpacing 4.0
  11. #import "MOLevelDanMuView.h"
  12. #import "UIView+BarrageView.h"
  13. #import "MORtmEntity.h"
  14. @interface MOLevelDanMuView ()
  15. @property (nonatomic, strong) UIImageView *headImgView;
  16. @property (nonatomic, strong) UILabel *nameLab;
  17. @property (nonatomic, strong) UIView *bubbleBgView;
  18. @property (nonatomic, strong) UIView *bubbleBaseImgView;
  19. @property (nonatomic, strong) UIImageView *bubbleImgView;
  20. @property (nonatomic, strong) UILabel *contentLab;
  21. @property (nonatomic, strong) MORtmEntity *rtmEntity;
  22. @end
  23. @implementation MOLevelDanMuView
  24. - (instancetype)initWithFrame:(CGRect)frame
  25. {
  26. if (self = [super initWithFrame:frame]) {
  27. [self loadSubviews];
  28. }
  29. return self;
  30. }
  31. - (void)loadSubviews{
  32. [self.bubbleBgView addSubview:self.bubbleBaseImgView];
  33. [self.bubbleBgView addSubview:self.bubbleImgView];
  34. [self.bubbleBgView addSubview:self.headImgView];
  35. [self.bubbleBgView addSubview:self.nameLab];
  36. [self.bubbleBgView addSubview:self.contentLab];
  37. [self addSubview:self.bubbleBgView];
  38. [self.bubbleBgView mas_makeConstraints:^(MASConstraintMaker *make) {
  39. make.edges.equalTo(self);
  40. }];
  41. [self.bubbleBaseImgView mas_makeConstraints:^(MASConstraintMaker *make) {
  42. // make.edges.equalTo(self.bubbleBgView);
  43. make.left.equalTo(self).offset(3.0);
  44. make.right.equalTo(self).offset(-3.0);
  45. make.top.equalTo(self).offset(4.0);
  46. make.bottom.equalTo(self).offset(-4.0);
  47. }];
  48. [self.bubbleImgView mas_makeConstraints:^(MASConstraintMaker *make) {
  49. // make.edges.equalTo(self.bubbleBgView);
  50. make.left.equalTo(self).offset(0.0);
  51. make.right.equalTo(self).offset(0.0);
  52. make.top.equalTo(self).offset(1.0);
  53. make.bottom.equalTo(self).offset(-1.0);
  54. }];
  55. [self.headImgView mas_makeConstraints:^(MASConstraintMaker *make) {
  56. make.centerY.equalTo(self.bubbleBgView);
  57. make.height.width.equalTo(@(headImgWidth));
  58. make.left.equalTo(@(LeftSpacing));
  59. }];
  60. [self.nameLab mas_makeConstraints:^(MASConstraintMaker *make) {
  61. make.left.equalTo(self.headImgView.mas_right).offset(BaseSpacing);
  62. make.centerY.equalTo(self.bubbleBgView);
  63. make.width.greaterThanOrEqualTo(@10);
  64. }];
  65. [self.contentLab mas_makeConstraints:^(MASConstraintMaker *make) {
  66. make.left.equalTo(self.nameLab.mas_right).offset(BaseSpacing);
  67. make.top.bottom.equalTo(self.bubbleBgView);
  68. make.right.equalTo(self.bubbleBgView).offset(-10);
  69. }];
  70. }
  71. - (void)layoutSubviews{
  72. [super layoutSubviews];
  73. #warning frame 与 Masonry 只能使用一种 并且 不能将Masonry代码写在这里, 否则内存泄漏
  74. // self.bubbleBgView.frame = CGRectMake(headImgWidth / 2.0 , 15.0, self.bounds.size.width - headImgWidth, 20.0);
  75. // self.bubbleImgView.frame = CGRectMake(0.0, 0.0, self.bubbleBgView.bounds.size.width, self.bubbleBgView.bounds.size.height);
  76. // self.contentLab.frame = CGRectMake(25.0, 0.0, self.bubbleBgView.bounds.size.width - 25.0, self.bubbleBgView.bounds.size.height);
  77. //
  78. // self.headBgImgView.frame = CGRectMake(0.0, 0.0, headImgWidth + 10.0, headImgWidth + 10.0);
  79. // self.headImgView.frame = CGRectMake(0.0, 5.0, headImgWidth, headImgWidth);
  80. //
  81. //// self.headBgImgView.center = self.headImgView.center;
  82. //
  83. // self.nameLab.frame = CGRectMake(headImgWidth + 3.0, 5.0, self.bubbleBgView.bounds.size.width - headImgWidth, 16.0);
  84. WEAKSELF
  85. }
  86. - (CGSize)sizeThatFits:(CGSize)size{
  87. CGFloat minWidth = 20.0;
  88. MORtmUser *user = self.rtmEntity.user;
  89. MORtmJosnEntity *jsonEntity = (MORtmJosnEntity *)self.rtmEntity.data;
  90. CGFloat nameLabWidth = [MOTools getWidthWithString:user.username font:[MOTextTools mediumFont:12.0]];
  91. CGFloat contentLabWidth = [MOTools getWidthWithString:jsonEntity.content font:[MOTextTools regularFont:12.0]] + 2.0;
  92. CGFloat viewWidth = LeftSpacing + headImgWidth + BaseSpacing + nameLabWidth + BaseSpacing + contentLabWidth + 10.0;
  93. viewWidth = MAX(viewWidth, minWidth);
  94. return CGSizeMake(viewWidth, KBaseHeight);
  95. }
  96. - (void)setRtmEntity:(MORtmEntity *)rtmEntity{
  97. _rtmEntity = rtmEntity;
  98. MORtmUser *rtmUser = rtmEntity.user;
  99. NSInteger level = rtmEntity.user.level ? rtmEntity.user.level : 0;
  100. NSInteger theBarrageCode = rtmUser.dressing.liveBarrage;
  101. if(theBarrageCode != 0){
  102. //使用新逻辑 - 素材库
  103. MOEffect *bubbleObject = [[MOSvgaSourceManage shareManager] getPropsInfoWithCode:theBarrageCode];
  104. if(bubbleObject){
  105. WEAKSELF
  106. NSURL *bubbleUrl = [NSURL URLWithString:bubbleObject.effectFile];
  107. [[MOBubbleImageManager sharedManager] resizableNormalImageWithURL:bubbleUrl And:UIEdgeInsetsMake(0, 30.0, 0, 30.0) completion:^(UIImage * _Nonnull image) {
  108. dispatch_async(dispatch_get_main_queue(), ^{
  109. [weakSelf.bubbleImgView setImage:image];
  110. });
  111. }];
  112. self.bubbleImgView.hidden = NO;
  113. self.bubbleBaseImgView.hidden = YES;
  114. }
  115. else{
  116. self.bubbleImgView.hidden = YES;
  117. self.bubbleBaseImgView.hidden = NO;
  118. }
  119. }
  120. else{
  121. self.bubbleImgView.hidden = YES;
  122. self.bubbleBaseImgView.hidden = NO;
  123. }
  124. [self.headImgView sd_setImageWithURL:[NSURL URLWithString:rtmEntity.user.avatar] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]];
  125. self.nameLab.text = rtmEntity.user.username;
  126. MORtmJosnEntity *jsonEntity = (MORtmJosnEntity *)rtmEntity.data;
  127. self.contentLab.text = jsonEntity.content;
  128. }
  129. #pragma mark - BarrageViewProtocol
  130. - (void)configureWithParams:(NSDictionary *)params
  131. {
  132. [super configureWithParams:params];
  133. self.rtmEntity = (MORtmEntity *)params[@"rtmEntiry"];
  134. }
  135. - (void)updateWithTime:(NSTimeInterval)time
  136. {
  137. [self setNeedsLayout];
  138. }
  139. #pragma mark - Lazy
  140. - (UIImageView *)headImgView{
  141. if (!_headImgView)
  142. {
  143. _headImgView = [[UIImageView alloc] init];
  144. _headImgView.contentMode = UIViewContentModeScaleAspectFill;
  145. [_headImgView setImage:[UIImage imageNamed:@"icon_mine_placeHolder"]];
  146. _headImgView.layer.cornerRadius = headImgWidth / 2.0;
  147. _headImgView.layer.masksToBounds = YES;
  148. }
  149. return _headImgView;
  150. }
  151. - (UILabel *)nameLab{
  152. if (!_nameLab)
  153. {
  154. _nameLab = [[UILabel alloc] init];
  155. _nameLab.text = @"";
  156. _nameLab.font = [MOTextTools mediumFont:12.0];
  157. _nameLab.textColor = kBaseTextHightlightColor_1;
  158. _nameLab.textAlignment = NSTextAlignmentLeft;
  159. }
  160. return _nameLab;
  161. }
  162. - (UIView *)bubbleBgView{
  163. if (_bubbleBgView == nil)
  164. {
  165. _bubbleBgView = [UIView new];
  166. _bubbleBgView.backgroundColor = [UIColor clearColor];
  167. }
  168. return _bubbleBgView;
  169. }
  170. - (UIImageView *)bubbleImgView{
  171. if (!_bubbleImgView)
  172. {
  173. _bubbleImgView = [[UIImageView alloc] init];
  174. _bubbleImgView.contentMode = UIViewContentModeScaleToFill;
  175. }
  176. return _bubbleImgView;
  177. }
  178. - (UIView *)bubbleBaseImgView{
  179. if (_bubbleBaseImgView == nil)
  180. {
  181. _bubbleBaseImgView = [UIView new];
  182. _bubbleBaseImgView.backgroundColor = [MOTools colorWithHexString:@"#000000" alpha:0.3];
  183. _bubbleBaseImgView.layer.cornerRadius = (KBaseHeight - 2.0 - 6.0 ) / 2.0;
  184. _bubbleBaseImgView.layer.masksToBounds = YES;
  185. }
  186. return _bubbleBaseImgView;
  187. }
  188. - (UILabel *)contentLab{
  189. if (!_contentLab)
  190. {
  191. _contentLab = [[UILabel alloc] init];
  192. _contentLab.text = @"";
  193. _contentLab.font = [MOTextTools regularFont:12.0];
  194. _contentLab.textColor = [UIColor whiteColor];
  195. _contentLab.textAlignment = NSTextAlignmentLeft;
  196. }
  197. return _contentLab;
  198. }
  199. - (UIImage *)getBubbleBgImgWith:(NSInteger)level{
  200. UIImage *image;
  201. if(level >= 0 && level < 10){
  202. image = nil;
  203. }
  204. else if (level >= 10 && level < 50){
  205. image = [UIImage imageNamed:@"icon_live_dan_bg_10"];
  206. }
  207. else if (level >= 50 && level < 65){
  208. image = [UIImage imageNamed:@"icon_live_dan_bg_50"];
  209. }
  210. else if (level >= 65 && level < 80){
  211. image = [UIImage imageNamed:@"icon_live_dan_bg_65"];
  212. }
  213. else if (level >= 80 && level < 100){
  214. image = [UIImage imageNamed:@"icon_live_dan_bg_80"];
  215. }
  216. else if (level >= 100 && level < 120){
  217. image = [UIImage imageNamed:@"icon_live_dan_bg_100"];
  218. }
  219. else if (level >= 120 && level < 135){
  220. image = [UIImage imageNamed:@"icon_live_dan_bg_120"];
  221. }
  222. else if (level >= 135){
  223. image = [UIImage imageNamed:@"icon_live_dan_bg_135"];
  224. }
  225. image = [UIImage imageNamed:@"icon_bubble_vip_k"];
  226. return image;
  227. }
  228. - (UIImage *)getHeadImgWith:(NSInteger)level{
  229. UIImage *image;
  230. if(level >= 0 && level < 65){
  231. image = nil;
  232. }
  233. else if (level >= 65 && level < 80){
  234. image = [UIImage imageNamed:@"icon_live_dan_head_bg_65"];
  235. }
  236. else if (level >= 80 && level < 100){
  237. image = [UIImage imageNamed:@"icon_live_dan_head_bg_80"];
  238. }
  239. else if (level >= 100 && level < 120){
  240. image = [UIImage imageNamed:@"icon_live_dan_head_bg_100"];
  241. }
  242. else if (level >= 120 && level < 135){
  243. image = [UIImage imageNamed:@"icon_live_dan_head_bg_120"];
  244. }
  245. else if (level >= 135){
  246. image = [UIImage imageNamed:@"icon_live_dan_head_bg_135"];
  247. }
  248. return image;
  249. }
  250. @end