diff --git a/xplan-ios/Base/UI/UIImage/UIImage+Utils.h b/xplan-ios/Base/UI/UIImage/UIImage+Utils.h index 5eb2afd2..19b272d9 100644 --- a/xplan-ios/Base/UI/UIImage/UIImage+Utils.h +++ b/xplan-ios/Base/UI/UIImage/UIImage+Utils.h @@ -41,4 +41,8 @@ typedef NS_ENUM(NSUInteger, GradientType) { + (UIImage *)gradientColorImageFromColors:(NSArray*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize; + (UIImage *)waterImageWithImage:(UIImage *)image waterImage:(UIImage *)waterImage waterImageRect:(CGRect)rect; + ++ (CGSize)sizeWithImageOriginSize:(CGSize)originSize + minSize:(CGSize)imageMinSize + maxSize:(CGSize)imageMaxSize; @end diff --git a/xplan-ios/Base/UI/UIImage/UIImage+Utils.m b/xplan-ios/Base/UI/UIImage/UIImage+Utils.m index f5d5d45c..bf28f974 100644 --- a/xplan-ios/Base/UI/UIImage/UIImage+Utils.m +++ b/xplan-ios/Base/UI/UIImage/UIImage+Utils.m @@ -316,4 +316,44 @@ 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 diff --git a/xplan-ios/Main/Message/View/Session/Content/MessageContentImage.m b/xplan-ios/Main/Message/View/Session/Content/MessageContentImage.m index 5d5b412c..a563820d 100644 --- a/xplan-ios/Main/Message/View/Session/Content/MessageContentImage.m +++ b/xplan-ios/Main/Message/View/Session/Content/MessageContentImage.m @@ -10,10 +10,10 @@ #import "SDPhotoBrowser.h" #import #import +#import "UIImage+Utils.h" -#define MESSAGE_IMAGE_PADDING 10 -#define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX / 3 * 2) - +#define MESSAGE_IMAGE_MAX_SIZE (CONTENT_WIDTH_MAX) +#define MESSAGE_IMAGE_Min_SIZE (CONTENT_WIDTH_MAX -100) @interface MessageContentImage() @property (nonatomic, strong) NetImageView * messageImage; @@ -28,7 +28,7 @@ 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.edges.equalTo(self).with.insets(UIEdgeInsetsMake(MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_PADDING, MESSAGE_PADDING)); make.width.height.mas_equalTo(MESSAGE_IMAGE_MAX_SIZE); }]; } @@ -37,47 +37,47 @@ + (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) { - CGFloat height = MIN(MESSAGE_IMAGE_MAX_SIZE, image.size.height / image.size.width * MESSAGE_IMAGE_MAX_SIZE); - CGFloat imageHeight = height - MESSAGE_IMAGE_PADDING * 2; - return imageHeight + CONTENT_PADDING_V_TOTAL; - } - return MESSAGE_IMAGE_MAX_SIZE + CONTENT_PADDING_V_TOTAL; + 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 { - 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; - self.imageObject = imageObject; - 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); + 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); }]; - - if (image) { - self.messageImage.image = image; - } + self.messageImage.imageUrl = imageObject.url; } #pragma mark - SDPhotoBrowserDelegate @@ -104,6 +104,8 @@ 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]; }