MOTextTools.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. //
  2. // MOTextTools.h
  3. // MiMoLive
  4. //
  5. // Created by SuperC on 2023/12/27.
  6. //
  7. #define MOTextLabelFont [UIFont systemFontOfSize:14.0] // textLabel的字体
  8. #define MOLevelLabelFont [MOTextTools getTheFontWithSize:10.0 AndFontName:kNormalTitleFontStr] //等级字体
  9. #define MOTextLabelLineSpacing 1.0 // textLabel行间距
  10. //UITextView.textContainer.lineFragmentPadding:文本容器的左右内边距(默认值为 5.0)。
  11. #define MOTextLabelMaxWidth (SCREENWIDTH - MOLiveMsgLeftSpacing - MOLiveMsgRightSpacing - MOContentOffSet * 2.0 - MOContentLeftAndRighSpacing * 2.0)
  12. #define MOTextLabelMinHeight 16 // text最小高度
  13. #define MOTextTitleLabeHeight 20.0 // textLabel的标题高度
  14. #define MOTextRedEnvelopeViewHeight 64.0 //红包View的高度
  15. #define MOTextLabelParagraphStyle [MOTextTools textLabelParagraphStyle] // textLabel的段落格式
  16. #define MOTextLabelAttributesDict @{NSFontAttributeName:MOTextLabelFont, NSParagraphStyleAttributeName:MOTextLabelParagraphStyle} // 设置textLabel.attributedText和计算文字高度所用的attributes
  17. #define MOLevelMixWidth 32.0 //小于10的宽度
  18. #define MOLevelNormalWidth 36.0 //小于100级 level View的宽度
  19. #define MOLevelMaxWidth 44.0 //大于100级 level View的宽度
  20. #define MOLevelNormalHeight 16.0 //level View的高度度
  21. #import <Foundation/Foundation.h>
  22. #import "MORtmEntity.h"
  23. #import "LiveGiftShowModel.h"
  24. NS_ASSUME_NONNULL_BEGIN
  25. @interface MOTextTools : NSObject
  26. //根据Rtm消息 生成 NSMutableAttributedString
  27. + (NSMutableAttributedString *)creteTextWith:(MORtmEntity *)rtmEntity;
  28. //系统消息 26的顶部提示
  29. + (NSMutableAttributedString *)createTheLevelUpNoticeWith:(MORtmEntity *)rtmEntity;
  30. ///组建 - 普通聊天头部
  31. + (NSMutableAttributedString *)creteTitleTextWith:(MORtmEntity *)rtmEntity;
  32. //根据Rtm消息, 生成进场条NSMutableAttributedString
  33. + (NSMutableAttributedString *)creteEnterTextWith:(MORtmEntity *)rtmEntity;
  34. //根据Rtm消息, 生成礼物数量NSMutableAttributedString
  35. + (NSMutableAttributedString *)creteGiftNumTextWith:(MORtmEntity *)rtmEntity;
  36. //根据返钻暴击 - 增加一条富文本
  37. + (NSMutableAttributedString *)creteTheHitDiamondTipWith:(MORtmEntity *)entity;
  38. //增加Vip 富文本
  39. + (NSMutableAttributedString *)toAddVipInfoWith:(NSMutableAttributedString *)contentStr And:(NSInteger)vipType;
  40. //增加 等级 富文本
  41. + (NSMutableAttributedString *)toAddLevelInfoWith:(NSMutableAttributedString *)contentStr And:(NSInteger)levelNum;
  42. //根据等级生成一个图标
  43. + (UIImage *)createLevelImageViewWith:(NSInteger)gradeNum;
  44. //返回对应等级的背景色
  45. + (UIColor *)getLevelColorWith:(NSInteger)gradeNum;
  46. //返回对应等级的图标 返回nil, 则说明该等级没有图标
  47. + (UIImage *)getLevelIconImgWith:(NSInteger)gradeNum;
  48. //根据vip等级获取vip图标
  49. + (nullable UIImage *)getVipIconWith:(NSInteger)vipType;
  50. //根据气泡code返回相应的气泡
  51. + (UIImage *)getBubbleImgWithCodeNum:(NSInteger)code;
  52. //生成图片不带黑色四角
  53. + (UIImage *)snapshotWithView:(UIView *)view;
  54. //根据Rtm消息, 计算高度
  55. + (CGSize)textMessageCellSizeWith:(MORtmEntity *)rtmEntity;
  56. //根据字符串, 计算高度
  57. + (CGSize)textMessageCellSizeWithString:(NSString *)contentStr;
  58. //根据Rtm消息, 计算宽度
  59. + (CGFloat)getWidthWith:(MORtmEntity *)rtmEntity;
  60. //根据NSAttributedString来计算宽度
  61. + (CGFloat)getTheAttributedTextWidthWith:(NSAttributedString *)contentStr;
  62. + (NSMutableParagraphStyle *)textLabelParagraphStyle;
  63. + (UIImage *)getFanLevelImgWith:(NSInteger)gradeNum;
  64. + (UIColor *)getFanLevelColorWith:(NSInteger)gradeNum;
  65. + (UIImage *)getFanLiveImgWith:(NSInteger)gradeNum;
  66. + (UIImage *)getTheFanClubMedalWith:(NSInteger)level;
  67. //单位换算
  68. + (NSString *)numberToStringWith:(double)num;
  69. + (NSString *)numberToStringAboutTwoWith:(double)num;
  70. //无小数点
  71. + (NSString *)numberToStringNoPointWith:(double)num;
  72. //任务 - 分钟 转 字符串
  73. + (NSString *)minuteStrWith:(double)minute;
  74. //数字格式化为每隔三位用逗号隔开
  75. + (NSString *)formatNumberDecimalValue:(double)value;
  76. /// 小数转成百分比,去除小数部分
  77. + (NSString *)formatPercentage:(double)value;
  78. /// MO-Pro-Display-HeavyItalic 斜体加粗
  79. /// @param fontSize 字号
  80. /// @param bold 加粗
  81. /// @param italic 斜体
  82. /// @param weight 加粗量级
  83. + (UIFont *)MODisplayFontWithSize:(CGFloat)fontSize
  84. bold:(BOOL)bold itatic:(BOOL)italic weight:(UIFontWeight)weight;
  85. + (UIFont *)getTheFontWithSize:(CGFloat)fontSize AndFontName:(NSString *)fontName;
  86. ///变更字体中的名字的颜色
  87. + (NSMutableAttributedString *)base_colorfulStringWith:(NSString *)contentStr AndNameStr:(NSString *)nameStr AndBaseColor:(NSString *)baseColorStr AndNameColor:(NSString *)nameColorStr;
  88. + (NSMutableAttributedString *)base_colorObjectStringWith:(NSString *)contentStr AndNameStr:(NSString *)nameStr AndBaseColor:(UIColor *)baseColor AndNameColor:(UIColor *)nameColor;
  89. ///相比于上一个方法 增加了描边 和 阴影 // 描边宽度,正数表示描边宽度,负数表示填充宽度
  90. + (NSMutableAttributedString *)base_colorfulStringWith:(NSString *)contentStr AndNameStr:(NSString *)nameStr AndBaseColor:(NSString *)baseColorStr AndNameColor:(NSString *)nameColorStr AndStrokeColor:(NSString *)strokeColorStr AndStrokeWidth:(NSInteger)strokeWidth AndShadowColor:(NSString *)shadowColorStr;
  91. ///变更字体中的颜色 - 按照最后查找原则
  92. + (NSMutableAttributedString *)base_backwardsSearchColorfulStringWith:(NSString *)contentStr AndNameStr:(NSString *)nameStr AndBaseColor:(NSString *)baseColorStr AndNameColor:(NSString *)nameColorStr;
  93. ///根据钻石数量 返回对应的图片 (钻石夺宝)
  94. + (UIImage *)getTheDiamondImageWith:(NSInteger)diamond;
  95. /// 根据选中人 以及 麦位上的数据 生成一个礼物飘屏提示字符串
  96. + (NSString *)toGetTheGiftTipTextWith:(NSArray *)linkMics And:(MOUserProfile *)anchor And:(NSArray *)sendUserIdArr;
  97. /// 给一个字符串增加删除线
  98. + (NSMutableAttributedString *)addDeleteLineWith:(NSString *)textStr andLineColor:(UIColor *)lineColor;
  99. /// 生成勋章富文本
  100. + (NSMutableAttributedString *)toCreateMedalInfoWithMedalListAnd:(NSArray *)medalList AndMedalWidth:(CGFloat)medalWidth AndUserBigImage:(BOOL)userBig AndSpaingStr:(NSString *)spacingStr;
  101. /// 根据用户信息生成一个富文本(VIP/性别/等级)
  102. + (NSAttributedString *)createAttributedStringWithUserInfo:(MOUserBase *)userBase;
  103. /// 根据YY富文本计算宽度
  104. + (CGFloat)getWidthAboutYYWith:(NSAttributedString *)contentStr;
  105. /**
  106. * 为文本中的指定部分设置颜色和下划线样式
  107. * @param label 目标UILabel
  108. * @param text 完整文本内容
  109. * @param targetText 需要设置样式的目标文本
  110. * @param color 目标文本的颜色
  111. * @param hasUnderline 是否添加下划线
  112. */
  113. + (void)setStyledTextForLabel:(UILabel *)label
  114. fullText:(NSString *)text
  115. targetText:(NSString *)targetText
  116. color:(UIColor *)color
  117. hasUnderline:(BOOL)hasUnderline;
  118. /**
  119. * 为UILabel添加点击事件
  120. * @param label 目标UILabel
  121. * @param target 点击事件的目标对象
  122. * @param action 点击事件的方法
  123. */
  124. + (void)addTapGestureToLabel:(UILabel *)label
  125. target:(id)target
  126. action:(SEL)action;
  127. /**
  128. * 一次性为多个文本片段设置样式(便利方法)
  129. * @param label 目标UILabel
  130. * @param fullText 完整文本内容
  131. * @param styleConfigs 样式配置数组,每个元素包含:targetText, color, hasUnderline
  132. */
  133. + (void)setMultipleStyledTextForLabel:(UILabel *)label
  134. fullText:(NSString *)fullText
  135. styleConfigs:(NSArray<NSDictionary *> *)styleConfigs;
  136. /**
  137. * 创建带有蓝色下划线的Feedback文本标签(保持向后兼容)
  138. * @param text 完整文本内容
  139. * @param feedbackText 需要设置样式的Feedback文本
  140. * @param target 点击事件的目标对象
  141. * @param action 点击事件的方法
  142. * @return 配置好的UILabel
  143. */
  144. + (UILabel *)createFeedbackLabelWithText:(NSString *)text
  145. feedbackText:(NSString *)feedbackText
  146. target:(id)target
  147. action:(SEL)action;
  148. + (UIFont *)oswaldDemiBoldFont:(CGFloat)size;
  149. + (UIFont *)poppinsLightFont:(CGFloat)size;
  150. + (UIFont *)poppinsRegularFont:(CGFloat)size;
  151. + (UIFont *)poppinsMediumFont:(CGFloat)size;
  152. + (UIFont *)poppinsBoldFont:(CGFloat)size;
  153. + (UIFont *)poppinsSemiBoldFont:(CGFloat)size;
  154. + (UIFont *)poppinsExtraBoldFont:(CGFloat)size;
  155. + (UIFont *)poppinskPoppinsMediumItalicFont:(CGFloat)size;
  156. + (UIFont *)poppinsBoldItalicFont:(CGFloat)size;
  157. + (UIFont *)lightFont:(CGFloat)size;
  158. + (UIFont *)regularFont:(CGFloat)size;
  159. + (UIFont *)mediumFont:(CGFloat)size;
  160. + (UIFont *)boldFont:(CGFloat)size;
  161. + (UIFont *)semiboldFont:(CGFloat)size;
  162. @end
  163. NS_ASSUME_NONNULL_END