转载地址: [简书地址](http://www.jianshu.com/users/23d0ae412e19/latest_articles)

/***  @author 麦子, 16-08-15 16:08:05**  图片的处理。 如果是GIF的话,用的是第三方的,我们这边不做处理。 如果是静态图片的话,重新设置Frame的参数。 然后就是调整Cell的高度问题。网络图片也是一样。 对于图片的规格的话, 都是以最大的为主, 然后其他的会相应的缩小比列。 控制比列的大小。同时也设置了一个最大的宽度和高度。 */@interface BubblePhotoView()@property (nonatomic,strong) FLAnimatedImageView *imageV;@end@implementation BubblePhotoView+ (instancetype)BubblePhotoView
{BubblePhotoView *bubbleView = [[self alloc]init];return bubbleView;
}- (instancetype)initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if (self) {_imageV = [[FLAnimatedImageView alloc]initWithFrame:self.bounds];_imageV.contentMode = UIViewContentModeScaleAspectFill;_imageV.layer.cornerRadius = 6;_imageV.layer.masksToBounds = true;[self addSubview:_imageV];self.backgroundColor = [UIColor clearColor];}return self;
}- (void)setMessage:(TalkMessage *)message{_message = message;if (message.isSend) { // 发送if (message.isGif) { //如果是动态图片FLAnimatedImage *animationImage = [FLAnimatedImage animatedImageWithGIFData:[NSData dataWithContentsOfFile:_message.photoAddress]];_imageV.animatedImage = animationImage;}else{_imageV.image = [UIImage imageWithContentsOfFile:_message.photoAddress];}// 重画处理[self setNeedsDisplay];}else{ //  收取网络图片UIImage *placeholderImage = [UIImage imageNamed:@"placeholderImage"];[_imageV sd_setImageWithURL:[NSURL URLWithString:@"http://img.hb.aicdn.com/b617afdf7a972b26c438293c762c9f50b7eed0b6146a5-6bQadP_fw580"] placeholderImage:placeholderImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {[self setNeedsDisplay];}];}}#define KMargin 5- (void)layoutSubviews{[super layoutSubviews];if (_message.isGif) {_imageV.frame = self.bounds;}else{_imageV.frame = CGRectMake(KMargin, KMargin, self.frame.size.width-2*KMargin, self.frame.size.height-2*KMargin);}}- (void)drawRect:(CGRect)rect{if (!_message.isGif) { // 不是GIF就进行画气泡, GIF不在自己代码这边控制。[UIImage drawImage:_imageV.image atFrame:rect isSender:_message.flag];}}//  改变图片处理方式:微信方式:长>宽  ,图片长为固定最大长度,宽按比例缩放,长<宽,图片宽为最大宽度,长按比例缩放#define KBubbleImageMaxWidth 145
#define KBubbleImageMaxHeight 145+ (CGSize)photoWithSize:(TalkMessage *)message{CGSize imageSize = message.size;if (imageSize.width == 0 || imageSize.height == 0) {if (message.localPhotoFlag){ // 表示本地图片UIImage *photo = [UIImage imageWithContentsOfFile:message.photoAddress];imageSize = photo.size;if (imageSize.width>imageSize.height){imageSize.height *= KBubbleImageMaxWidth/imageSize.width;imageSize.width = KBubbleImageMaxWidth;}else{imageSize.width *= KBubbleImageMaxHeight/imageSize.height;imageSize.height = KBubbleImageMaxHeight;}}else{ //正常接口不会走这步,demo使用网络图片才会走这步imageSize.width = KBubbleImageMaxWidth;imageSize.height = KBubbleImageMaxHeight;}}else{//返回服务器图片尺寸if (imageSize.width>imageSize.height){imageSize.height *= KBubbleImageMaxWidth/imageSize.width;imageSize.width = KBubbleImageMaxWidth;}else{imageSize.width *= KBubbleImageMaxHeight/imageSize.height;imageSize.height = KBubbleImageMaxHeight;}}return imageSize;
}@end
case MessageBubbleTypePhoto:{ // 显示图片BubblePhotoView *photoView = [BubblePhotoView BubblePhotoView];photoView.message = message;[self.bubbleImageV addSubview:photoView];CGSize size = [BubblePhotoView photoWithSize:message];//注意self.bubbleImageV是在内部bubble的size.width上增加间距定的frameif (_message.flag) {self.bubbleImageV.frame = CGRectMake(CGRectGetMinX(self.avateImageV.frame)-(size.width+KSenderLeftBubbleImageMargin+KSenderRightBubbleImageMargin),KTopBubbleImageMargin,size.width+KSenderLeftBubbleImageMargin+KSenderRightBubbleImageMargin,size.height+2*KTopBubbleImageMargin);photoView.frame = CGRectMake(KSenderLeftBubbleImageMargin,KTopBubbleImageMargin, size.width, size.height);}else{self.bubbleImageV.frame = CGRectMake(CGRectGetMaxX(self.avateImageV.frame),KTopBubbleImageMargin,size.width+KReceiverLeftBubbleImageMargin+KReceiverRightBubbleImageMargin,size.height+2*KTopBubbleImageMargin);photoView.frame = CGRectMake(KReceiverLeftBubbleImageMargin,KTopBubbleImageMargin, size.width, size.height);}self.bubbleImageV.bubbleImage = nil;break;}
//  计算cell的高度+ (CGFloat)cellHeight:(id)obj{CGFloat avaterImageHeight = 45;CGFloat bubbleViewHeight = 0;TalkMessage *message = (TalkMessage *)obj;switch (message.messageBubbleType) {case  MessageBubbleTypeText:{bubbleViewHeight = [TalkCell BubbleTextViewSize:message].height;bubbleViewHeight += KTopMargin*2;break;}case MessageBubbleTypePhoto:{bubbleViewHeight = [BubblePhotoView photoWithSize:message].height;bubbleViewHeight += KTopMargin*2;break;}default:break;}if (bubbleViewHeight<avaterImageHeight) {bubbleViewHeight = avaterImageHeight;}return KTopMargin+bubbleViewHeight+KTopMargin;;
}

cell高度设置

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{id  obj = [_array objectAtIndex:indexPath.row];if ([obj isKindOfClass:[TalkMessage class]]) {return CGSizeMake(self.view.bounds.size.width,  [TalkCell cellHeight:obj]);}return CGSizeMake(self.view.bounds.size.width,30);;
}

IM模块-UiCollectionView列表显示气泡图片相关推荐

  1. python模块之image修改图片类型

    python模块之image修改图片类型 有时候我们需要不同格式的图片后缀格式,如:png,jpg,如果仅仅手动修改图片的后缀的话,只是表面修改了后缀格式,其实图片的原类型仍然没有变化,可以用pyth ...

  2. python模块之imghdr检测图片类型

    python模块之imghdr检测图片类型 1. imghdr是什么 imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流.[仅仅根据文件后缀判断文件类型显然不准 ...

  3. dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法

    DEDECMS5.7模块/模块管理列表显示空白(站长基地配图) 今天站长基地升级至dedecms最新版本,进入后台意外的发现,模块/模块管理一片空白,但有没有及时备份,于是赶紧去网上找寻解决办法,经过 ...

  4. Python模块学习 - 用tinify模块压缩和优化图片

    Python模块学习 - 用tinify模块压缩和优化图片 tinify模块 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进 ...

  5. 聊天气泡图片的动态拉伸、适配与镜像

    聊天气泡图片的动态拉伸.适配与镜像 前情提要 创建.9.png格式的图片 从资源文件夹加载.9.png图片 从本地文件加载".9.png"图片 项目痛点 进阶探索 iOS中的方式 ...

  6. Moviepy模块之视频添加图片水印

    文章目录 前言 视频添加图片水印 1.引入库 2.加载视频文件 3.加载水印图片 4.缩放水印图片大小 5.设置水印的位置 5.1 相对于视频的左上角 5.2 相对于视频的左下角 5.3 相对于视频的 ...

  7. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  8. android 仿微信聊天气泡显示图片,仿微信聊天气泡 图片尖角 按下变暗

    实现微信气泡图片尖角 //-------------gen corner bitmap flow------------------------ //load the bg: .9.png which ...

  9. android .9图片有黑线,用draw9patch.bat绘制的气泡图片用在Android程序中有黑线,怎么解决?...

    详情请访问我的CSDN博客: 安卓开发,对话消息的气泡框处理. 如下图所示: 问题描述: 1.边缘有黑线. 2.气泡虽然能够根据内容长短自由伸缩,但是并不能让内容显示在气泡内部. 问题解决后的截图: ...

最新文章

  1. 更改VMWare 虚拟机的硬件设置
  2. 光标闪烁问题的解决办法
  3. Y_CLIENT_QHD_504 role in GM6 ZSAP_CRM_BCR_SALESREP_DAIDE
  4. 第三章 阴阳的工作机制(1)
  5. 媒体转码切片_cVideo云转码系统
  6. 【深度学习】CNN模型的可视化-1
  7. c程序语言编写 计算器,C语言编写简单计算器
  8. extjs office java_Extjs使用(最最基础)
  9. 【论文笔记】基于强化学习的句子摘要排序
  10. PowerDesigner生成Oracle数据库时,表名会带引号问题
  11. WinRAR授权/激活(购买许可)
  12. 如何获取节假日的方法
  13. Linux打字游戏程序代码,c语言shell打字游戏.pdf
  14. buct编译原理个人作业
  15. 修改射手影音播放器字幕保存路径的两种方法
  16. 科学决策理论的基本论点
  17. 闭关修炼(一)多线程
  18. UML建模、数据库设计和UI设计工具
  19. 哈工大机械原理凸轮机构大作业
  20. MySQL: Invalid GIS data provided to function st_geometryfromtext

热门文章

  1. git diff with meld,git diff结合meld
  2. java陆小凤的游戏_《陆小凤传奇》游戏流程、经验心得
  3. Web前端持续集成方案(四)
  4. 渗透测试八个步骤【渗透测试流程】
  5. spring-boot 深入学习
  6. OpenCV绘制点线
  7. 萝卜开会直播NO.2 | 换一个十年,感受不一样的世界
  8. 【转】软件测试面试题(一)
  9. 判断自定义异形view的点击事件是否在绘制区域内
  10. 低压回路测控终端| 汉光 LPC96P低压回路测控装置