116 lines
4.1 KiB
Objective-C
116 lines
4.1 KiB
Objective-C
//
|
|
// MessageContentImage.m
|
|
// xplan-ios
|
|
//
|
|
// Created by zu on 2021/12/2.
|
|
//
|
|
|
|
#import "MessageContentImage.h"
|
|
#import "NetImageView.h"
|
|
#import "SDPhotoBrowser.h"
|
|
#import <NIMSDK/NIMSDK.h>
|
|
#import <Masonry/Masonry.h>
|
|
#import "UIImage+Utils.h"
|
|
|
|
#define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX)
|
|
#define MESSAGE_IMAGE_Min_SIZE (CONTENT_WIDTH_MAX -100)
|
|
@interface MessageContentImage()<SDPhotoBrowserDelegate>
|
|
|
|
@property (nonatomic, strong) NetImageView * messageImage;
|
|
@property (nonatomic,strong) NIMImageObject *imageObject;
|
|
|
|
@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_PADDING, MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_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];
|
|
CGFloat attachmentImageMinWidth = (MESSAGE_IMAGE_Min_SIZE);
|
|
CGFloat attachmentImageMinHeight = (MESSAGE_IMAGE_Min_SIZE);
|
|
CGFloat attachmemtImageMaxWidth = (MESSAGE_IMAGE_MAX_SIZE);
|
|
CGFloat attachmentImageMaxHeight = (MESSAGE_IMAGE_MAX_SIZE);
|
|
CGSize imageSize;
|
|
if (!CGSizeEqualToSize(imageObject.size, CGSizeZero)) {
|
|
imageSize = imageObject.size;
|
|
}else {
|
|
UIImage *image = [UIImage imageWithContentsOfFile:imageObject.thumbPath];
|
|
imageSize = image ? image.size : CGSizeZero;
|
|
}
|
|
CGSize contentSize = [UIImage sizeWithImageOriginSize:imageSize
|
|
minSize:CGSizeMake(attachmentImageMinWidth, attachmentImageMinHeight)
|
|
maxSize:CGSizeMake(attachmemtImageMaxWidth, attachmentImageMaxHeight)];
|
|
return contentSize.height + MESSAGE_PADDING * 2 + CONTENT_PADDING_V_TOTAL;
|
|
}
|
|
|
|
- (void)render:(NIMMessage *)message {
|
|
NIMImageObject * imageObject = (NIMImageObject*) message.messageObject;
|
|
self.imageObject = imageObject;
|
|
CGFloat attachmentImageMinWidth = (MESSAGE_IMAGE_Min_SIZE);
|
|
CGFloat attachmentImageMinHeight = (MESSAGE_IMAGE_Min_SIZE);
|
|
CGFloat attachmemtImageMaxWidth = (MESSAGE_IMAGE_MAX_SIZE);
|
|
CGFloat attachmentImageMaxHeight = (MESSAGE_IMAGE_MAX_SIZE);
|
|
CGSize imageSize;
|
|
if (!CGSizeEqualToSize(imageObject.size, CGSizeZero)) {
|
|
imageSize = imageObject.size;
|
|
}else {
|
|
UIImage *image = [UIImage imageWithContentsOfFile:imageObject.thumbPath];
|
|
imageSize = image ? image.size : CGSizeZero;
|
|
}
|
|
CGSize contentSize = [UIImage sizeWithImageOriginSize:imageSize
|
|
minSize:CGSizeMake(attachmentImageMinWidth, attachmentImageMinHeight)
|
|
maxSize:CGSizeMake(attachmemtImageMaxWidth, attachmentImageMaxHeight)];
|
|
|
|
[self.messageImage mas_updateConstraints:^(MASConstraintMaker *make) {
|
|
make.height.mas_equalTo(contentSize.height);
|
|
make.width.mas_equalTo(contentSize.width);
|
|
}];
|
|
self.messageImage.imageUrl = imageObject.url;
|
|
}
|
|
|
|
#pragma mark - SDPhotoBrowserDelegate
|
|
- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index {
|
|
return [NSURL URLWithString:self.imageObject.url];
|
|
}
|
|
|
|
- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
|
|
return [UIImageConstant defalutBannerPlaceholder];
|
|
}
|
|
|
|
- (void)didTapImage {
|
|
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
|
|
browser.sourceImagesContainerView = self;
|
|
browser.delegate = self;
|
|
browser.imageCount = 1;
|
|
browser.currentImageIndex = 0;
|
|
browser.isMe = NO;
|
|
[browser show];
|
|
}
|
|
|
|
|
|
- (NetImageView *)messageImage {
|
|
if (!_messageImage) {
|
|
_messageImage = [[NetImageView alloc] init];
|
|
_messageImage.userInteractionEnabled = YES;
|
|
_messageImage.layer.masksToBounds = YES;
|
|
_messageImage.contentMode = UIViewContentModeScaleAspectFill;
|
|
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapImage)];
|
|
[_messageImage addGestureRecognizer:tap];
|
|
}
|
|
return _messageImage;
|
|
}
|
|
|
|
@end
|