Files
yinmeng-ios/xplan-ios/Main/Message/View/Session/MessageCell.m

194 lines
6.0 KiB
Mathematica
Raw Normal View History

2021-11-29 01:54:12 +08:00
//
// MessageCell.m
// xplan-ios
//
// Created by zu on 2021/11/28.
//
#import "MessageCell.h"
#import "MessageContentProtocol.h"
#import "MessageContentText.h"
#import "MessageContentImage.h"
2021-11-29 01:54:12 +08:00
#import "NetImageView.h"
#import "ThemeColor.h"
#import "XPMacro.h"
#import <Masonry/Masonry.h>
@interface MessageCell()
@property (nonatomic, assign) NIMMessageType messageType;
2021-11-29 01:54:12 +08:00
/**
*/
@property (nonatomic, strong) NetImageView * leftAvatar;
/**
*/
@property (nonatomic, strong) NetImageView * rightAvatar;
/**
*/
@property (nonatomic, strong) UIView * messageBackground;
@property (nonatomic, strong) MASConstraint * messageBackgroundLeft;
@property (nonatomic, strong) MASConstraint * messageBackgroundRight;
/**
2021-11-29 01:54:12 +08:00
*/
@property (nonatomic, strong) UIView<MessageContentProtocol> * messageContent;
2021-11-29 01:54:12 +08:00
@end
@implementation MessageCell
+ (CGFloat)measureHeight:(NIMMessage *)message {
CGFloat minHeight = AVATAR_SIZE + AVATAR_MARGIN_H * 2;
2021-11-29 01:54:12 +08:00
if (!message) {
return minHeight;
}
CGFloat mesuredHeight = 0;
switch (message.messageType) {
case NIMMessageTypeText:
case NIMMessageTypeTip:
mesuredHeight = [MessageContentText measureHeight:message];
break;
case NIMMessageTypeImage:
mesuredHeight = [MessageContentImage measureHeight:message];
break;
default:
break;
2021-11-29 01:54:12 +08:00
}
return MAX(minHeight, mesuredHeight);
2021-11-29 01:54:12 +08:00
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self initViews];
[self initLayout];
}
return self;
}
- (void)initViews {
self.backgroundColor = UIColor.clearColor;
self.leftAvatar.backgroundColor = UIColor.redColor;
self.rightAvatar.backgroundColor = UIColor.blueColor;
[self.contentView addSubview:self.leftAvatar];
[self.contentView addSubview:self.rightAvatar];
[self.contentView addSubview:self.messageBackground];
}
- (void)initLayout {
[self.leftAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_equalTo(self).offset(15);
make.width.height.mas_equalTo(45);
}];
[self.rightAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(15);
make.right.mas_equalTo(self).offset(-15);
make.width.height.mas_equalTo(45);
}];
[self.messageBackground mas_makeConstraints:^(MASConstraintMaker *make) {
self.messageBackgroundLeft = make.left.mas_equalTo(self.leftAvatar.mas_right).offset(15);
self.messageBackgroundRight = make.right.mas_equalTo(self.rightAvatar.mas_left).offset(-15);
make.top.mas_equalTo(self).offset(20);
}];
}
- (void)renderWithMessage:(NIMMessage *)message {
NSString * avatarUrl = [[NIMSDK sharedSDK].userManager userInfo:message.from].userInfo.avatarUrl;
avatarUrl = [avatarUrl stringByReplacingOccurrencesOfString:@"https" withString:@"http"];
BOOL isSelf = [[NIMSDK sharedSDK].loginManager.currentAccount isEqualToString:message.from];
if (isSelf) {
self.leftAvatar.hidden = YES;
self.rightAvatar.hidden = NO;
[self.messageBackgroundLeft uninstall];
[self.messageBackgroundRight install];
self.rightAvatar.imageUrl = avatarUrl;
} else {
self.leftAvatar.hidden = NO;
self.rightAvatar.hidden = YES;
[self.messageBackgroundLeft install];
[self.messageBackgroundRight uninstall];
self.leftAvatar.imageUrl = avatarUrl;
}
if (self.messageType != message.messageType || !self.messageContent) {
if (self.messageContent) {
[self.messageContent removeFromSuperview];
}
switch (message.messageType) {
case NIMMessageTypeText:
case NIMMessageTypeTip:
self.messageContent = [[MessageContentText alloc] init];
break;
case NIMMessageTypeImage:
self.messageContent = [[MessageContentImage alloc] init];
break;
default:
self.messageContent = [[MessageContentText alloc] init];
break;
}
self.messageType = message.messageType;
[self.messageBackground addSubview:self.messageContent];
[self.messageContent mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.bottom.mas_equalTo(self.messageBackground);
}];
2021-11-29 01:54:12 +08:00
}
[self.messageContent render:message];
2021-11-29 01:54:12 +08:00
}
- (NetImageView *)leftAvatar {
if (!_leftAvatar) {
NetImageConfig * config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
config.radius = MAXFLOAT;
config.imageType = ImageTypeUserIcon;
2021-11-29 01:54:12 +08:00
_leftAvatar = [[NetImageView alloc] initWithConfig:config];
_leftAvatar.layer.masksToBounds = YES;
_leftAvatar.layer.cornerRadius = 45.f / 2;
_leftAvatar.hidden = YES;
}
return _leftAvatar;
}
- (NetImageView *)rightAvatar {
if (!_rightAvatar) {
NetImageConfig * config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
config.radius = MAXFLOAT;
config.imageType = ImageTypeUserIcon;
2021-11-29 01:54:12 +08:00
_rightAvatar = [[NetImageView alloc] initWithConfig:config];
_rightAvatar.layer.masksToBounds = YES;
_rightAvatar.layer.cornerRadius = 45.f / 2;
_rightAvatar.hidden = YES;
}
return _rightAvatar;
}
- (UIView *)messageBackground {
if (!_messageBackground) {
_messageBackground = [[UIView alloc]init];
_messageBackground.backgroundColor = ThemeColor.appCellBackgroundColor;
_messageBackground.layer.masksToBounds = YES;
_messageBackground.layer.cornerRadius = 8.f;
}
return _messageBackground;
}
@end