IM模块-UiCollectionView列表显示气泡图片
转载地址: [简书地址](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列表显示气泡图片相关推荐
- python模块之image修改图片类型
python模块之image修改图片类型 有时候我们需要不同格式的图片后缀格式,如:png,jpg,如果仅仅手动修改图片的后缀的话,只是表面修改了后缀格式,其实图片的原类型仍然没有变化,可以用pyth ...
- python模块之imghdr检测图片类型
python模块之imghdr检测图片类型 1. imghdr是什么 imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流.[仅仅根据文件后缀判断文件类型显然不准 ...
- dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法
DEDECMS5.7模块/模块管理列表显示空白(站长基地配图) 今天站长基地升级至dedecms最新版本,进入后台意外的发现,模块/模块管理一片空白,但有没有及时备份,于是赶紧去网上找寻解决办法,经过 ...
- Python模块学习 - 用tinify模块压缩和优化图片
Python模块学习 - 用tinify模块压缩和优化图片 tinify模块 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进 ...
- 聊天气泡图片的动态拉伸、适配与镜像
聊天气泡图片的动态拉伸.适配与镜像 前情提要 创建.9.png格式的图片 从资源文件夹加载.9.png图片 从本地文件加载".9.png"图片 项目痛点 进阶探索 iOS中的方式 ...
- Moviepy模块之视频添加图片水印
文章目录 前言 视频添加图片水印 1.引入库 2.加载视频文件 3.加载水印图片 4.缩放水印图片大小 5.设置水印的位置 5.1 相对于视频的左上角 5.2 相对于视频的左下角 5.3 相对于视频的 ...
- Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片
Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...
- android 仿微信聊天气泡显示图片,仿微信聊天气泡 图片尖角 按下变暗
实现微信气泡图片尖角 //-------------gen corner bitmap flow------------------------ //load the bg: .9.png which ...
- android .9图片有黑线,用draw9patch.bat绘制的气泡图片用在Android程序中有黑线,怎么解决?...
详情请访问我的CSDN博客: 安卓开发,对话消息的气泡框处理. 如下图所示: 问题描述: 1.边缘有黑线. 2.气泡虽然能够根据内容长短自由伸缩,但是并不能让内容显示在气泡内部. 问题解决后的截图: ...
最新文章
- 更改VMWare 虚拟机的硬件设置
- 光标闪烁问题的解决办法
- Y_CLIENT_QHD_504 role in GM6 ZSAP_CRM_BCR_SALESREP_DAIDE
- 第三章 阴阳的工作机制(1)
- 媒体转码切片_cVideo云转码系统
- 【深度学习】CNN模型的可视化-1
- c程序语言编写 计算器,C语言编写简单计算器
- extjs office java_Extjs使用(最最基础)
- 【论文笔记】基于强化学习的句子摘要排序
- PowerDesigner生成Oracle数据库时,表名会带引号问题
- WinRAR授权/激活(购买许可)
- 如何获取节假日的方法
- Linux打字游戏程序代码,c语言shell打字游戏.pdf
- buct编译原理个人作业
- 修改射手影音播放器字幕保存路径的两种方法
- 科学决策理论的基本论点
- 闭关修炼(一)多线程
- UML建模、数据库设计和UI设计工具
- 哈工大机械原理凸轮机构大作业
- MySQL: Invalid GIS data provided to function st_geometryfromtext