消息模块-图片适配的问题

This commit is contained in:
fengshuo
2022-04-26 16:51:46 +08:00
parent cdbff65521
commit 0c97ee0f28
3 changed files with 87 additions and 41 deletions

View File

@@ -41,4 +41,8 @@ typedef NS_ENUM(NSUInteger, GradientType) {
+ (UIImage *)gradientColorImageFromColors:(NSArray<UIColor *>*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize; + (UIImage *)gradientColorImageFromColors:(NSArray<UIColor *>*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize;
+ (UIImage *)waterImageWithImage:(UIImage *)image waterImage:(UIImage *)waterImage waterImageRect:(CGRect)rect; + (UIImage *)waterImageWithImage:(UIImage *)image waterImage:(UIImage *)waterImage waterImageRect:(CGRect)rect;
+ (CGSize)sizeWithImageOriginSize:(CGSize)originSize
minSize:(CGSize)imageMinSize
maxSize:(CGSize)imageMaxSize;
@end @end

View File

@@ -316,4 +316,44 @@
return newImage; return newImage;
} }
+ (CGSize)sizeWithImageOriginSize:(CGSize)originSize
minSize:(CGSize)imageMinSize
maxSize:(CGSize)imageMaxSiz {
CGSize size;
NSInteger imageWidth = originSize.width ,imageHeight = originSize.height;
NSInteger imageMinWidth = imageMinSize.width, imageMinHeight = imageMinSize.height;
NSInteger imageMaxWidth = imageMaxSiz.width, imageMaxHeight = imageMaxSiz.height;
if (imageWidth > imageHeight) //
{
size.height = imageMinHeight; //
size.width = imageWidth * imageMinHeight / imageHeight;
if (size.width > imageMaxWidth)
{
size.width = imageMaxWidth;
}
}
else if(imageWidth < imageHeight)//
{
size.width = imageMinWidth;
size.height = imageHeight *imageMinWidth / imageWidth;
if (size.height > imageMaxHeight){
size.height = imageMaxHeight;
}
}
else//
{
if (imageWidth > imageMaxWidth){
size.width = imageMaxWidth;
size.height = imageMaxHeight;
}else if(imageWidth > imageMinWidth){
size.width = imageWidth;
size.height = imageHeight;
}else{
size.width = imageMinWidth;
size.height = imageMinHeight;
}
}
return size;
}
@end @end

View File

@@ -10,10 +10,10 @@
#import "SDPhotoBrowser.h" #import "SDPhotoBrowser.h"
#import <NIMSDK/NIMSDK.h> #import <NIMSDK/NIMSDK.h>
#import <Masonry/Masonry.h> #import <Masonry/Masonry.h>
#import "UIImage+Utils.h"
#define MESSAGE_IMAGE_PADDING 10 #define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX)
#define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX / 3 * 2) #define MESSAGE_IMAGE_Min_SIZE (CONTENT_WIDTH_MAX -100)
@interface MessageContentImage()<SDPhotoBrowserDelegate> @interface MessageContentImage()<SDPhotoBrowserDelegate>
@property (nonatomic, strong) NetImageView * messageImage; @property (nonatomic, strong) NetImageView * messageImage;
@@ -28,7 +28,7 @@
if (self) { if (self) {
[self addSubview:self.messageImage]; [self addSubview:self.messageImage];
[self.messageImage mas_makeConstraints:^(MASConstraintMaker *make) { [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.edges.equalTo(self).with.insets(UIEdgeInsetsMake(MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_PADDING));
make.width.height.mas_equalTo(MESSAGE_IMAGE_MAX_SIZE); make.width.height.mas_equalTo(MESSAGE_IMAGE_MAX_SIZE);
}]; }];
} }
@@ -37,47 +37,47 @@
+ (CGFloat)measureHeight:(NIMMessage *)message { + (CGFloat)measureHeight:(NIMMessage *)message {
if (!message || message.messageType != NIMMessageTypeImage) return 0; if (!message || message.messageType != NIMMessageTypeImage) return 0;
NIMImageObject *imageObject = (NIMImageObject*)[message messageObject];
NIMImageObject * imageObject = (NIMImageObject*) message.messageObject; CGFloat attachmentImageMinWidth = (MESSAGE_IMAGE_Min_SIZE);
NSData *imageData = [[NSData alloc] initWithContentsOfFile:imageObject.thumbPath]; CGFloat attachmentImageMinHeight = (MESSAGE_IMAGE_Min_SIZE);
UIImage *image = [UIImage imageWithData:imageData scale:[UIScreen mainScreen].scale]; CGFloat attachmemtImageMaxWidth = (MESSAGE_IMAGE_MAX_SIZE);
if (image && image.size.width > 0 && image.size.height > 0) { CGFloat attachmentImageMaxHeight = (MESSAGE_IMAGE_MAX_SIZE);
CGFloat height = MIN(MESSAGE_IMAGE_MAX_SIZE, image.size.height / image.size.width * MESSAGE_IMAGE_MAX_SIZE); CGSize imageSize;
CGFloat imageHeight = height - MESSAGE_IMAGE_PADDING * 2; if (!CGSizeEqualToSize(imageObject.size, CGSizeZero)) {
return imageHeight + CONTENT_PADDING_V_TOTAL; imageSize = imageObject.size;
}else {
UIImage *image = [UIImage imageWithContentsOfFile:imageObject.thumbPath];
imageSize = image ? image.size : CGSizeZero;
} }
return MESSAGE_IMAGE_MAX_SIZE + CONTENT_PADDING_V_TOTAL; 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 { - (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; NIMImageObject * imageObject = (NIMImageObject*) message.messageObject;
self.imageObject = imageObject; self.imageObject = imageObject;
NSData *imageData = [[NSData alloc] initWithContentsOfFile:imageObject.thumbPath]; CGFloat attachmentImageMinWidth = (MESSAGE_IMAGE_Min_SIZE);
image = [UIImage imageWithData:imageData scale:[UIScreen mainScreen].scale]; CGFloat attachmentImageMinHeight = (MESSAGE_IMAGE_Min_SIZE);
CGFloat attachmemtImageMaxWidth = (MESSAGE_IMAGE_MAX_SIZE);
if (image && image.size.width > 0 && image.size.height > 0) { CGFloat attachmentImageMaxHeight = (MESSAGE_IMAGE_MAX_SIZE);
height = MIN(MESSAGE_IMAGE_MAX_SIZE, image.size.height / image.size.width * MESSAGE_IMAGE_MAX_SIZE); CGSize imageSize;
imageHeight = height - MESSAGE_IMAGE_PADDING * 2; if (!CGSizeEqualToSize(imageObject.size, CGSizeZero)) {
imageWidth = image.size.width / image.size.height * imageHeight; 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) { [self.messageImage mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(imageHeight); make.height.mas_equalTo(contentSize.height);
make.width.mas_equalTo(imageWidth); make.width.mas_equalTo(contentSize.width);
}]; }];
self.messageImage.imageUrl = imageObject.url;
if (image) {
self.messageImage.image = image;
}
} }
#pragma mark - SDPhotoBrowserDelegate #pragma mark - SDPhotoBrowserDelegate
@@ -104,6 +104,8 @@
if (!_messageImage) { if (!_messageImage) {
_messageImage = [[NetImageView alloc] init]; _messageImage = [[NetImageView alloc] init];
_messageImage.userInteractionEnabled = YES; _messageImage.userInteractionEnabled = YES;
_messageImage.layer.masksToBounds = YES;
_messageImage.contentMode = UIViewContentModeScaleAspectFill;
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapImage)]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapImage)];
[_messageImage addGestureRecognizer:tap]; [_messageImage addGestureRecognizer:tap];
} }