消息模块-图片适配的问题
This commit is contained in:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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];
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user