Files
peko-ios/YuMi/Modules/YMMessage/View/Session/Content/MessageContentText.m

90 lines
2.8 KiB
Objective-C

//
// MessageContentText.m
// YUMI
//
// Created by zu on 2021/12/2.
//
#import "MessageContentText.h"
#import "DJDKMIMOMColor.h"
#import "NSObject+MJExtension.h"
#import "QEmotionHelper.h"
#import <NIMSDK/NIMSDK.h>
#import <Masonry/Masonry.h>
#import "MessageTextModel.h"
#define MESSAGE_TEXT_PADDING 10
@interface MessageContentText()
/**
消息文本
*/
@property (nonatomic, strong) YYLabel * messageText;
///当前的消息
@property (nonatomic,strong) NIMMessage *message;
@end
@implementation MessageContentText
+ (NSDictionary<NSAttributedStringKey, id> *)messageTextAttibutes {
UIFont *font = [UIFont systemFontOfSize:13.f];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:2.5];
return @{
NSFontAttributeName:font,
NSParagraphStyleAttributeName: paragraphStyle
};
}
- (instancetype)init {
self = [super init];
if (self) {
[self addSubview:self.messageText];
[self.messageText mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self).with.insets(UIEdgeInsetsMake(MESSAGE_TEXT_PADDING, MESSAGE_TEXT_PADDING, MESSAGE_TEXT_PADDING, MESSAGE_TEXT_PADDING));
}];
}
return self;
}
- (void)render:(nonnull MessageBaseModel *)model {
self.message = model.message;
if (model.messageType == SessionMessageType_Text) {
MessageTextModel * textModel = (MessageTextModel *)model;
_messageText.attributedText = textModel.textAttribute;
} else {
NSString * messageText = model.message.text;
if (!messageText || (model.message.messageType != NIMMessageTypeTip && model.message.messageType != NIMMessageTypeText)) {
// messageText = YMLocalizedString(@"MessageContentText0");
messageText = [NSString stringWithFormat:@"%@\n%@",
YMLocalizedString(@"MessageContentText0"),
model.message.rawAttachContent];
}
QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper];
NSMutableAttributedString * attribute = [faceManager attributedStringByText:messageText font:[UIFont systemFontOfSize:13] forMessageBubble:YES];
_messageText.attributedText = attribute;
}
[_messageText.superview layoutIfNeeded];
if(_messageText.frame.size.width > _messageText.preferredMaxLayoutWidth){
[_messageText mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(_messageText.preferredMaxLayoutWidth);
}];
}
}
- (YYLabel *)messageText {
if (!_messageText) {
_messageText = [[YYLabel alloc]initWithFrame:CGRectZero];
_messageText.preferredMaxLayoutWidth = CONTENT_WIDTH_MAX - MESSAGE_TEXT_PADDING * 2;
_messageText.textColor = DJDKMIMOMColor.mainTextColor;
_messageText.numberOfLines = 0;
_messageText.userInteractionEnabled = YES;
}
return _messageText;
}
@end