MOLiveMsgBaseCell.m 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. //
  2. // MOLiveMsgBaseCell.m
  3. // MiMoLive
  4. //
  5. // Created by SuperC on 2023/11/19.
  6. //
  7. #import "MOLiveMsgBaseCell.h"
  8. @implementation MOLiveMsgBaseCell
  9. - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  10. self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  11. if (self != nil) {
  12. self.contentView.transform = CGAffineTransformMakeScale(1, -1);
  13. self.backgroundColor = [UIColor clearColor];
  14. self.selectionStyle = UITableViewCellSelectionStyleNone;
  15. [self setupUI];
  16. }
  17. return self;
  18. }
  19. - (void)setupUI{
  20. [self.contentView addSubview:self.bgView];
  21. [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
  22. make.left.equalTo(self.contentView).offset(MOBgViewOffSet);
  23. make.width.equalTo(@(MOBgViewMaxWidth));
  24. make.top.equalTo(self.contentView).offset(MOBgViewOffSet);
  25. make.bottom.equalTo(self.contentView).offset(-MOBgViewOffSet);
  26. }];
  27. self.bgView.layer.cornerRadius = 10.0;
  28. [self.bgView addSubview:self.bubbleImgView];
  29. [self.bubbleImgView mas_makeConstraints:^(MASConstraintMaker *make) {
  30. make.left.equalTo(self.bgView).offset(-MOBgViewOffSet);
  31. make.right.equalTo(self.bgView).offset(MOBgViewOffSet);
  32. make.top.equalTo(self.bgView).offset(-MOBgViewOffSet);
  33. make.bottom.equalTo(self.bgView).offset(MOBgViewOffSet);
  34. }];
  35. [self.bgView addSubview:self.contentTextView];
  36. [self.contentTextView mas_makeConstraints:^(MASConstraintMaker *make) {
  37. make.left.equalTo(self.bgView).offset(MOContentLeftAndRighSpacing);
  38. make.right.equalTo(self.bgView).offset(-MOContentLeftAndRighSpacing);
  39. make.centerY.equalTo(self.bgView);
  40. make.height.equalTo(@16.0);
  41. }];
  42. self.bgView.userInteractionEnabled = YES;
  43. _bubbleTapGestureRecognizer = [UITapGestureRecognizer new];
  44. [_bubbleTapGestureRecognizer addTarget:self action:@selector(bubbleTapped:)];
  45. _bubbleTapGestureRecognizer.delegate = self;
  46. [self.bgView addGestureRecognizer:self.bubbleTapGestureRecognizer];
  47. //去除长按
  48. // _bubbleLongPressGestureRecognizer = [UILongPressGestureRecognizer new];
  49. // [_bubbleLongPressGestureRecognizer addTarget:self action:@selector(bubbleLongPressHandler:)];
  50. // [self.bgView addGestureRecognizer:self.bubbleLongPressGestureRecognizer];
  51. }
  52. - (void)bubbleTapped:(UITapGestureRecognizer *)recognizer
  53. {
  54. MOLogV(@"触发了点击");
  55. self.cellTapBlock ? self.cellTapBlock(self.cellModel) : nil;
  56. }
  57. - (void)bubbleLongPressHandler:(UILongPressGestureRecognizer *)recognizer{
  58. if (recognizer.state == UIGestureRecognizerStateBegan){
  59. MOLogV(@"触发了长按");
  60. self.cellLongPressBlock ? self.cellLongPressBlock(self.cellModel) : nil;
  61. recognizer.enabled = NO;
  62. }
  63. else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled)
  64. {
  65. recognizer.enabled = YES;
  66. }
  67. }
  68. - (void)awakeFromNib {
  69. [super awakeFromNib];
  70. // Initialization code
  71. }
  72. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  73. [super setSelected:selected animated:animated];
  74. // Configure the view for the selected state
  75. }
  76. - (void)setCellModel:(MORtmEntity *)cellModel{
  77. _cellModel = cellModel;
  78. NSMutableAttributedString *attributedString = [MOTextTools creteTextWith:cellModel];
  79. // [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, [attributedString length])];
  80. self.contentTextView.attributedText = attributedString;
  81. CGFloat contentHeight = cellModel.cellHeight;
  82. if(contentHeight < MORtmContentMixHeight){
  83. contentHeight = MORtmContentMixHeight;
  84. }
  85. [self.contentTextView mas_updateConstraints:^(MASConstraintMaker *make) {
  86. make.height.equalTo(@(contentHeight));
  87. }];
  88. self.bgView.backgroundColor = MONormalBgViewColor;
  89. MORtmJosnEntity *jsonEntity = (MORtmJosnEntity *)cellModel.data;
  90. MORtmUser *rtmUser = cellModel.user;
  91. NSInteger theBubble = rtmUser.bubble;
  92. if(theBubble == 0){
  93. theBubble = rtmUser.dressing.bubble;
  94. }
  95. if(theBubble != 0){
  96. //旧逻辑 - 本地找
  97. UIImage *bubbleImg = [MOTextTools getBubbleImgWithCodeNum:theBubble];
  98. if(bubbleImg){
  99. [self.bubbleImgView setImage:bubbleImg];
  100. self.bubbleImgView.hidden = NO;
  101. self.bgView.backgroundColor = [UIColor clearColor];
  102. }
  103. else{
  104. //使用新逻辑 - 素材库
  105. MOEffect *bubbleObject = [[MOSvgaSourceManage shareManager] getPropsInfoWithCode:theBubble];
  106. if(bubbleObject){
  107. NSURL *bubbleUrl = [NSURL URLWithString:bubbleObject.effectFile];
  108. WEAKSELF
  109. [[MOBubbleImageManager sharedManager] resizableImageWithURL:bubbleUrl completion:^(UIImage *image) {
  110. dispatch_async(dispatch_get_main_queue(), ^{
  111. [weakSelf.bubbleImgView setImage:image];
  112. });
  113. }];
  114. self.bubbleImgView.hidden = NO;
  115. self.bgView.backgroundColor = [UIColor clearColor];
  116. }
  117. else{
  118. self.bubbleImgView.hidden = YES;
  119. }
  120. }
  121. //PK 或者 禁言 或点赞提示 不用气泡
  122. if((cellModel.type == MORtmRoomTip && (jsonEntity.type == 2 || jsonEntity.type == 3 || jsonEntity.type == 4)) ||
  123. cellModel.type == MORoomCleanRtmTip ||
  124. (cellModel.type == MOLikeComboTip && jsonEntity.type == 1) ||
  125. cellModel.type == SystemTipGetRed ||
  126. cellModel.type == MOChangeRoomType ||
  127. cellModel.type == SystemTipHitDiamond ||
  128. (cellModel.type == SystemOrder && (jsonEntity.type == 9 || jsonEntity.type == 10 || jsonEntity.type == 11)) ||
  129. cellModel.type == SystemTipNormalBlue || cellModel.type == SystemTipBlindBox){
  130. self.bgView.backgroundColor = MONormalBgViewColor;
  131. self.bubbleImgView.hidden = YES;
  132. }
  133. }
  134. else{
  135. self.bubbleImgView.hidden = YES;
  136. }
  137. if(cellModel.cellHeight > 26.0){
  138. [self.bgView mas_updateConstraints:^(MASConstraintMaker *make) {
  139. make.width.equalTo(@(MOBgViewMaxWidth));
  140. }];
  141. }
  142. else{
  143. //UITextView.textContainer.lineFragmentPadding:文本容器的左右内边距(默认值为 5.0)。
  144. CGFloat width = cellModel.contentWidth + MOContentLeftAndRighSpacing * 2.0 + MOContentOffSet * 2.0 ;
  145. if(width > MOBgViewMaxWidth){
  146. width = MOBgViewMaxWidth;
  147. }
  148. if(width < MOBgViewMinWidth){
  149. width = MOBgViewMinWidth;
  150. }
  151. [self.bgView mas_updateConstraints:^(MASConstraintMaker *make) {
  152. make.width.equalTo(@(width));
  153. }];
  154. }
  155. }
  156. #pragma mark - Lazy
  157. - (UIView *)bgView
  158. {
  159. if (_bgView == nil)
  160. {
  161. _bgView = [UIView new];
  162. _bgView.backgroundColor = MONormalBgViewColor;
  163. }
  164. return _bgView;
  165. }
  166. - (UIImageView *)bubbleImgView{
  167. if(!_bubbleImgView){
  168. _bubbleImgView = [[UIImageView alloc] init];
  169. // _bubbleImgView.contentMode = UIViewContentModeScaleToFill;
  170. [_bubbleImgView setImage:[UIImage imageNamed:@""]];
  171. }
  172. return _bubbleImgView;
  173. }
  174. - (MOMsgContentTextView *)contentTextView{
  175. if(!_contentTextView){
  176. _contentTextView = [MOMsgContentTextView new];
  177. _contentTextView.backgroundColor = [UIColor clearColor];
  178. _contentTextView.textContainerInset = UIEdgeInsetsMake(MOContentBaseTopSpcing, MOContentBaseLeftSpacing, MOContentBaseBottomSpcing, MOContentBaseRightSpacing);//UITextView原本文字距离左右有间距,设置负数消除边距
  179. _contentTextView.editable = NO;
  180. _contentTextView.scrollEnabled = NO;//防止滑出屏幕又滑入时有时单行文字消失
  181. _contentTextView.userInteractionEnabled = NO;
  182. _contentTextView.textColor = [MOTools colorWithHexString:@"#FFFFFF" alpha:1.0];
  183. // _contentTextView.backgroundColor = [UIColor redColor];
  184. }
  185. return _contentTextView;
  186. }
  187. @end