Files
peko-ios/YuMi/Modules/YMMessage/View/Session/Content/MessageContentHeadLinesText.m
2024-05-11 10:21:48 +08:00

343 lines
14 KiB
Objective-C

//
// MessageContentHeadLinesText.m
// YuMi
//
// Created by duoban on 2024/5/9.
//
#import "MessageContentHeadLinesText.h"
#import "DJDKMIMOMColor.h"
#import "NSObject+MJExtension.h"
#import "QEmotionHelper.h"
#import <NIMSDK/NIMSDK.h>
#import <Masonry/Masonry.h>
#import "SpriteSheetImageManager.h"
#import "MessageHeadlinesTextModel.h"
#import "XPMessageRemoteExtModel.h"
#define MESSAGE_TEXT_PADDING 10
@interface MessageContentHeadLinesText()
/**
消息文本
*/
@property (nonatomic, strong) YYLabel * messageText;
@property (nonatomic, strong) YYLabel * rightMessageText;
///当前的消息
@property (nonatomic,strong) NIMMessage *message;
///头饰
@property (nonatomic,strong) YYAnimatedImageView *headWearImageView;
///头饰
@property (nonatomic,strong) YYAnimatedImageView *rightHeadWearImageView;
///头饰播放
@property (nonatomic, strong) SpriteSheetImageManager *manager;
/**
左侧头像(私聊对象)
*/
@property (nonatomic, strong) NetImageView * leftAvatar;
/**
右侧头像(自己)
*/
@property (nonatomic, strong) NetImageView * rightAvatar;
@property(nonatomic,strong) YYLabel *leftNameView;
@property(nonatomic,strong) UIImageView *leftBgImage;
@property(nonatomic,strong) UIImageView *rightBgImage;
///气泡
@property (nonatomic,strong) NetImageView *leftBubbleImageView;
///气泡
@property (nonatomic,strong) NetImageView *rightBubbleImageView;
@end
@implementation MessageContentHeadLinesText
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.leftAvatar];
[self addSubview:self.headWearImageView];
[self addSubview:self.rightAvatar];
[self addSubview:self.rightHeadWearImageView];
[self addSubview:self.leftNameView];
[self addSubview:self.leftBgImage];
[self addSubview:self.rightBgImage];
[self addSubview:self.leftBubbleImageView];
[self addSubview:self.rightBubbleImageView];
[self.leftBgImage addSubview:self.messageText];
[self.rightBgImage addSubview:self.rightMessageText];
[self.leftAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(kGetScaleWidth(15));
make.width.height.mas_equalTo(kGetScaleWidth(48));
make.top.mas_equalTo(kGetScaleWidth(10));
}];
[self.headWearImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.leftAvatar).with.insets(UIEdgeInsetsMake(-kGetScaleWidth(10),-kGetScaleWidth(10),-kGetScaleWidth(10),-kGetScaleWidth(10)));
}];
[self.leftNameView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kGetScaleWidth(21));
make.height.mas_equalTo(kGetScaleWidth(14));
make.leading.mas_equalTo(kGetScaleWidth(71.5));
make.width.mas_lessThanOrEqualTo(kGetScaleWidth(240));
}];
[self.rightAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.width.height.equalTo(self.leftAvatar);
make.trailing.mas_equalTo(-kGetScaleWidth(15));
}];
[self.rightHeadWearImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.rightAvatar).with.insets(UIEdgeInsetsMake(-kGetScaleWidth(10),-kGetScaleWidth(10),-kGetScaleWidth(10),-kGetScaleWidth(10)));
}];
[self.leftBgImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(kGetScaleWidth(72));
make.width.mas_equalTo(kGetScaleWidth(52));
make.height.mas_equalTo(kGetScaleWidth(36));
make.top.mas_equalTo(kGetScaleWidth(45));
}];
[self.rightBgImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(-kGetScaleWidth(72));
make.top.mas_equalTo(kGetScaleWidth(21));
make.width.mas_equalTo(kGetScaleWidth(52));
make.height.mas_greaterThanOrEqualTo(kGetScaleWidth(36));
}];
[self.leftBubbleImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.leftBgImage);
}];
[self.messageText mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.leftBgImage).with.insets(UIEdgeInsetsMake(kGetScaleWidth(10),kGetScaleWidth(10),kGetScaleWidth(10),kGetScaleWidth(10)));
}];
[self.rightBubbleImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.rightBgImage);
}];
[self.rightMessageText mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.rightBgImage).with.insets(UIEdgeInsetsMake(kGetScaleWidth(10),kGetScaleWidth(10),kGetScaleWidth(10),kGetScaleWidth(10)));
}];
self.leftAvatar.hidden = YES;
self.leftNameView.hidden = YES;
self.leftBgImage.hidden = YES;
self.headWearImageView.hidden = YES;
self.messageText.hidden = YES;
self.leftBubbleImageView.hidden = YES;
self.rightAvatar.hidden = YES;
self.rightBgImage.hidden = YES;
self.rightHeadWearImageView.hidden = YES;
self.rightBubbleImageView.hidden = YES;
self.rightMessageText.hidden = YES;
}
return self;
}
- (void)render:(nonnull MessageBaseModel *)model {
self.message = model.message;
MessageHeadlinesTextModel * textModel = (MessageHeadlinesTextModel *)model;
XPMessageRemoteExtModel *extModel = textModel.extModel;
if(extModel == nil)return;
self.leftAvatar.hidden = YES;
self.leftNameView.hidden = YES;
self.leftBgImage.hidden = YES;
self.headWearImageView.hidden = YES;
self.messageText.hidden = YES;
self.leftBubbleImageView.hidden = YES;
self.rightAvatar.hidden = YES;
self.rightBgImage.hidden = YES;
self.rightHeadWearImageView.hidden = YES;
self.rightBubbleImageView.hidden = YES;
self.rightMessageText.hidden = YES;
if(textModel.isSelf){
[self.rightBgImage mas_remakeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(-kGetScaleWidth(72));
make.top.mas_equalTo(kGetScaleWidth(21));
make.width.mas_equalTo(textModel.width);
make.height.mas_equalTo(textModel.imageHeight);
}];
self.rightAvatar.hidden = NO;
self.rightBgImage.hidden = NO;
self.rightHeadWearImageView.hidden = NO;
self.rightBubbleImageView.hidden = NO;
self.rightMessageText.hidden = NO;
self.rightAvatar.image = nil;
[self.rightAvatar loadImageWithUrl:extModel.avatar completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) {
self.rightAvatar.image = image;
}];
self.rightMessageText.attributedText = textModel.textAttribute;
self.rightBubbleImageView.image = nil;
self.rightBgImage.image = [self resizableImage:kImage(@"ms_message_headlines_text_right")];
[self.rightBubbleImageView loadImageWithUrl:extModel.iosBubbleUrl completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) {
self.rightBgImage.image = nil;
UIImage *image1 = [UIImage imageWithCGImage:image.CGImage scale:2.0 orientation:UIImageOrientationUp];
self.rightBubbleImageView.image = [self resizableImage:image1];
}];
NSString *headwearUrl = extModel.headwearUrl;
if (headwearUrl.length > 0) {
NSURL *url = [NSURL URLWithString:headwearUrl];
@kWeakify(self);
[self.manager loadSpriteSheetImageWithURL:url completionBlock:^(YYSpriteSheetImage * _Nullable sprit) {
@kStrongify(self);
self.rightHeadWearImageView.image = sprit;
} failureBlock:^(NSError * _Nullable error) {
}];
}
return;
}
[self.leftBgImage mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(kGetScaleWidth(72));
make.width.mas_equalTo(textModel.width);
make.height.mas_equalTo(textModel.imageHeight);
make.top.mas_equalTo(kGetScaleWidth(45));
}];
NSString *headwearUrl = extModel.headwearUrl;
if (headwearUrl.length > 0) {
NSURL *url = [NSURL URLWithString:headwearUrl];
@kWeakify(self);
[self.manager loadSpriteSheetImageWithURL:url completionBlock:^(YYSpriteSheetImage * _Nullable sprit) {
@kStrongify(self);
self.headWearImageView.image = sprit;
} failureBlock:^(NSError * _Nullable error) {
}];
}
self.leftAvatar.hidden = NO;
self.leftNameView.hidden = NO;
self.leftBgImage.hidden = NO;
self.headWearImageView.hidden = NO;
self.messageText.hidden = NO;
self.leftBubbleImageView.hidden = NO;
self.leftAvatar.image = nil;
[self.leftAvatar loadImageWithUrl:extModel.avatar completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) {
self.leftAvatar.image = image;
}];
self.leftBgImage.image = [self resizableImage:kImage(@"ms_message_headlines_text_left")];
self.messageText.textColor = [UIColor whiteColor];
[self.leftBubbleImageView loadImageWithUrl:extModel.iosBubbleUrl completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) {
self.leftBgImage.image = nil;
self.messageText.textColor = UIColorFromRGB(0x333333);
UIImage *image1 = [UIImage imageWithCGImage:image.CGImage scale:2.0 orientation:UIImageOrientationUp];
self.leftBubbleImageView.image = [self resizableImage:image1];
}];
self.leftNameView.attributedText = textModel.nameAtt;
self.messageText.attributedText = textModel.textAttribute;
}
- (UIImage*)resizableImage:(UIImage *)image {
//图片拉伸区域
CGFloat top = (image.size.height - 1) / 2;
CGFloat left = (image.size.width - 1) / 2;
CGFloat right = (image.size.width - 1) / 2;
CGFloat bottom = (image.size.height - 1) / 2;
return [image resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right) resizingMode:UIImageResizingModeStretch];
}
- (NetImageView *)leftAvatar{
if(!_leftAvatar){
NetImageConfig *config = [NetImageConfig new];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_leftAvatar = [[NetImageView alloc]initWithConfig:config];
_leftAvatar.layer.cornerRadius = kGetScaleWidth(48)/2;
_leftAvatar.layer.masksToBounds = YES;
}
return _leftAvatar;
}
- (NetImageView *)rightAvatar{
if(!_rightAvatar){
NetImageConfig *config = [NetImageConfig new];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_rightAvatar = [[NetImageView alloc]initWithConfig:config];
_rightAvatar.layer.cornerRadius = kGetScaleWidth(48)/2;
_rightAvatar.layer.masksToBounds = YES;
}
return _rightAvatar;
}
- (YYLabel *)leftNameView{
if(!_leftNameView){
_leftNameView = [YYLabel new];
}
return _leftNameView;
}
- (UIImageView *)leftBgImage{
if(!_leftBgImage){
_leftBgImage = [UIImageView new];
_leftBgImage.image = [self resizableImage:kImage(@"ms_message_headlines_text_left")];
}
return _leftBgImage;
}
- (UIImageView *)rightBgImage{
if(!_rightBgImage){
_rightBgImage = [UIImageView new];
_rightBgImage.image = [self resizableImage:kImage(@"ms_message_headlines_text_right")];
}
return _rightBgImage;
}
- (NetImageView *)leftBubbleImageView{
if(!_leftBubbleImageView){
_leftBubbleImageView = [[NetImageView alloc] init];
}
return _leftBubbleImageView;
}
- (NetImageView *)rightBubbleImageView{
if(!_rightBubbleImageView){
_rightBubbleImageView = [[NetImageView alloc] init];
}
return _rightBubbleImageView;
}
- (YYLabel *)messageText {
if (!_messageText) {
_messageText = [[YYLabel alloc]initWithFrame:CGRectZero];
_messageText.preferredMaxLayoutWidth = kGetScaleWidth(240);
_messageText.textColor = DJDKMIMOMColor.mainTextColor;
_messageText.numberOfLines = 0;
_messageText.font = kFontMedium(14);
_messageText.textColor = [UIColor whiteColor];
_messageText.textAlignment = NSTextAlignmentLeft;
_messageText.userInteractionEnabled = YES;
}
return _messageText;
}
- (YYLabel *)rightMessageText{
if(!_rightMessageText){
_rightMessageText = [[YYLabel alloc]initWithFrame:CGRectZero];
_rightMessageText.preferredMaxLayoutWidth = kGetScaleWidth(240);
_rightMessageText.textColor = DJDKMIMOMColor.mainTextColor;
_rightMessageText.numberOfLines = 0;
_rightMessageText.font = kFontMedium(14);
_rightMessageText.textColor = UIColorFromRGB(0x333333);
_rightMessageText.textAlignment = NSTextAlignmentLeft;
_rightMessageText.userInteractionEnabled = YES;
}
return _rightMessageText;
}
- (YYAnimatedImageView *)headWearImageView {
if (!_headWearImageView) {
_headWearImageView = [[YYAnimatedImageView alloc] init];
_headWearImageView.backgroundColor = [UIColor clearColor];
_headWearImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _headWearImageView;
}
- (YYAnimatedImageView *)rightHeadWearImageView {
if (!_rightHeadWearImageView) {
_rightHeadWearImageView = [[YYAnimatedImageView alloc] init];
_rightHeadWearImageView.backgroundColor = [UIColor clearColor];
_rightHeadWearImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _rightHeadWearImageView;
}
- (SpriteSheetImageManager *)manager {
if (!_manager) {
_manager = [[SpriteSheetImageManager alloc] init];
}
return _manager;
}
@end