347 lines
14 KiB
Objective-C
347 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;
|
|
self.rightHeadWearImageView.image = nil;
|
|
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;
|
|
self.headWearImageView.image = nil;
|
|
|
|
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.image = nil;
|
|
[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
|