// // MessageContentImage.m // xplan-ios // // Created by zu on 2021/12/2. // #import "MessageContentImage.h" #import "NetImageView.h" #import "SDPhotoBrowser.h" #import #import #import "UIImage+Utils.h" #define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX) #define MESSAGE_IMAGE_Min_SIZE (CONTENT_WIDTH_MAX -100) @interface MessageContentImage() @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