87 lines
2.9 KiB
Objective-C
87 lines
2.9 KiB
Objective-C
//
|
|
// MessageContentImage.m
|
|
// xplan-ios
|
|
//
|
|
// Created by zu on 2021/12/2.
|
|
//
|
|
|
|
#import "MessageContentImage.h"
|
|
#import "NetImageView.h"
|
|
|
|
#import <NIMSDK/NIMSDK.h>
|
|
#import <Masonry/Masonry.h>
|
|
|
|
#define MESSAGE_IMAGE_PADDING 10
|
|
#define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX / 3 * 2)
|
|
|
|
@interface MessageContentImage()
|
|
|
|
@property (nonatomic, strong) NetImageView * messageImage;
|
|
|
|
@end
|
|
|
|
@implementation MessageContentImage
|
|
|
|
- (instancetype)init {
|
|
self = [super init];
|
|
if (self) {
|
|
[self addSubview:self.messageImage];
|
|
[self.messageImage mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.edges.equalTo(self).with.insets(UIEdgeInsetsMake(MESSAGE_IMAGE_PADDING, MESSAGE_IMAGE_PADDING, MESSAGE_IMAGE_PADDING, MESSAGE_IMAGE_PADDING));
|
|
make.width.height.mas_equalTo(MESSAGE_IMAGE_MAX_SIZE);
|
|
}];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (CGFloat)measureHeight:(NIMMessage *)message {
|
|
if (!message || message.messageType != NIMMessageTypeImage) return 0;
|
|
|
|
NIMImageObject * imageObject = (NIMImageObject*) message.messageObject;
|
|
NSData *imageData = [[NSData alloc] initWithContentsOfFile:imageObject.thumbPath];
|
|
UIImage *image = [UIImage imageWithData:imageData scale:[UIScreen mainScreen].scale];
|
|
if (image && image.size.width > 0 && image.size.height > 0) {
|
|
return MIN(MESSAGE_IMAGE_MAX_SIZE, image.size.height / image.size.width * MESSAGE_IMAGE_MAX_SIZE) + CONTENT_PADDING_V_TOTAL;
|
|
}
|
|
return MESSAGE_IMAGE_MAX_SIZE + CONTENT_PADDING_V_TOTAL;
|
|
}
|
|
|
|
- (void)render:(NIMMessage *)message {
|
|
CGFloat height = MESSAGE_IMAGE_MAX_SIZE;
|
|
CGFloat imageHeight = height - MESSAGE_IMAGE_PADDING * 2;
|
|
CGFloat imageWidth = imageHeight;
|
|
UIImage *image;
|
|
if (message && !message.isOutgoingMsg
|
|
&& message.attachmentDownloadState == NIMMessageAttachmentDownloadStateNeedDownload) {
|
|
[[NIMSDK sharedSDK].chatManager fetchMessageAttachment:message error:nil];
|
|
} else {
|
|
NIMImageObject * imageObject = (NIMImageObject*) message.messageObject;
|
|
NSData *imageData = [[NSData alloc] initWithContentsOfFile:imageObject.thumbPath];
|
|
image = [UIImage imageWithData:imageData scale:[UIScreen mainScreen].scale];
|
|
|
|
if (image && image.size.width > 0 && image.size.height > 0) {
|
|
height = MIN(MESSAGE_IMAGE_MAX_SIZE, image.size.height / image.size.width * MESSAGE_IMAGE_MAX_SIZE);
|
|
imageHeight = height - MESSAGE_IMAGE_PADDING * 2;
|
|
imageWidth = image.size.width / image.size.height * imageHeight;
|
|
}
|
|
}
|
|
|
|
[self.messageImage mas_updateConstraints:^(MASConstraintMaker *make) {
|
|
make.height.mas_equalTo(imageHeight);
|
|
make.width.mas_equalTo(imageWidth);
|
|
}];
|
|
|
|
if (image) {
|
|
self.messageImage.image = image;
|
|
}
|
|
}
|
|
|
|
- (NetImageView *)messageImage {
|
|
if (!_messageImage) {
|
|
_messageImage = [[NetImageView alloc] init];
|
|
}
|
|
return _messageImage;
|
|
}
|
|
|
|
@end
|