Files
TIMSDK/iOS/TUIKit/TUIChat/Cell/CellData/Chat/TUIImageMessageCellData.h
T
2021-12-10 17:49:14 +08:00

168 lines
5.7 KiB
Objective-C

/******************************************************************************
*
* 本文件声明了 TUIImageItem 类和 TUIImageMessageCellData 类。
* TUIImageItem 对应 IM SDK 中的图像元素类,我们将 SDK 中的类转换为 TUIImageItem,方便我们进一步对数据进行处理与操作。
* TUIImageMessageCellData 继承于 TUIMessageCellData 类,用于存放图像消息单元所需的一系列数据与信息。
* 本文件中已经实现了获取图像信息和相关数据处理的业务逻辑。
* 当您需要获取图像数据时,直接调用本文件中声明的相关成员函数即可
*
******************************************************************************/
#import "TUIMessageCellData.h"
NS_ASSUME_NONNULL_BEGIN
typedef void(^TUIImageMessageDownloadCallback)(void);
/**
* 图像类别枚举
*/
typedef NS_ENUM(NSInteger, TUIImageType)
{
TImage_Type_Thumb, //缩略图
TImage_Type_Large, //大图
TImage_Type_Origin, //原图
};
/////////////////////////////////////////////////////////////////////////////////
//
// TUIImageItem
//
/////////////////////////////////////////////////////////////////////////////////
/**
* TUIIamgeItem
* TUI 图像项目,包含图像的各种信息。
*/
@interface TUIImageItem : NSObject
/**
* 图片 ID,内部标识,可用于外部缓存key
*/
@property (nonatomic, strong) NSString *uuid;
/**
* 图像 url
*/
@property (nonatomic, strong) NSString *url;
/**
* 图像大小(在UI上的显示大小)
*/
@property (nonatomic, assign) CGSize size;
/**
* 图像类别
* TImage_Type_Thumb:缩略图
* TImage_Type_Large:大图
* TImage_Type_Origin:原图
*/
@property (nonatomic, assign) TUIImageType type;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// TUIImageMessageCellData
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 【模块名称】TUIImageMessageCellData
* 【功能说明】用于实现聊天窗口中的图片气泡,包括图片消息发送进度的展示也在其中。
* 同时,该模块已经支持“缩略图”、“大图”和“原图”三种不同的类型,并已经处理好了在合适的情况下展示相应图片类型的业务逻辑:
* 1. 缩略图 - 默认在聊天窗口中看到的是缩略图,体积较小省流量
* 2. 大图 - 如果用户点开之后,看到的是分辨率更好的大图
* 3. 原图 - 如果发送方选择发送原图,那么接收者会看到“原图”按钮,点击下载到原尺寸的图片
* 数据源帮助实现了 MVVM 架构,使数据与 UI 进一步解耦,同时使 UI 层更加细化、可定制化。
*/
@interface TUIImageMessageCellData : TUIMessageCellData<TUIMessageCellDataFileUploadProtocol>
/**
* 图像缩略图
*/
@property (nonatomic, strong) UIImage *thumbImage;
/**
* 图像原图
*/
@property (nonatomic, strong) UIImage *originImage;
/**
* 图像大图
*/
@property (nonatomic, strong) UIImage *largeImage;
/**
* 图像路径
*
* @note path 由程序默认维护,您可以通过引入 TUIDefine.h 并引用 TUIKit_Image_Path 来直接获取Demo存储路径
* @note 如果您有进一步的个性化需求,也可使用其他路径
*/
@property (nonatomic, strong) NSString *path;
/**
* 图像长度(大小)
*/
@property (nonatomic, assign) NSInteger length;
/**
* 图像项目集
*
* @note items中通常存放三个imageItem,分别为 thumb(缩略图)、origin(原图)、large(大图),方便根据根据需求灵活获取图像
*
*/
@property (nonatomic, strong) NSMutableArray *items;
/**
* 缩略图加载进度
*/
@property (nonatomic, assign) NSUInteger thumbProgress;
/**
* 原图加载进度
*/
@property (nonatomic, assign) NSUInteger originProgress;
/**
* 大图加载进度
*/
@property (nonatomic, assign) NSUInteger largeProgress;
/**
* 上传(发送)进度
*/
@property (nonatomic, assign) NSUInteger uploadProgress;
/**
* 获取图像
* 本函数整合调用了 IM SDK,通过 SDK 提供的接口在线获取图像。
* 1、下载前会判断图像是否在本地,若不在本地,则在本地直接获取图像。
* 2、当图像不在本地时,通过 IM SDK 中 TIMImage 提供的 getImage 接口在线获取。
* 3-1、下载进度百分比则通过接口回调的 progress(代码块)参数进行更新。
* 3-2、代码块具有 curSize 和 totalSize 两个参数,由回调函数维护 curSize,然后通过 curSize * 100 / totalSize 计算出当前进度百分比。
* 4-1、图像消息中存放的格式为 TIMElem,图片列表需通过 TIMElem.imageList 获取,在 imalgelist 中,包含了原图、大图与缩略图,可通过 imageType 进一步获取。
* 4-2、通过 SDK 接口获取的图像为二进制文件,需先进行解码,转换为 CGIamge 进行解码操作后包装为 UIImage 才可使用。
* 5、下载成功后,会生成图像 path 并存储下来。
*/
- (void)downloadImage:(TUIImageType)type;
- (void)downloadImage:(TUIImageType)type finish:(TUIImageMessageDownloadCallback)finish;
/**
* 解码图像,并将图像赋值到对应类型的变量(缩略图、大图或者原图)中。
*
* @param type 图像类型
*/
- (void)decodeImage:(TUIImageType)type;
/**
* 获取图像路径
* 同时传入 isExist 指针,能够同时改变 isExist 标识。成功获取图像 path 后,isExist 赋值为 YES,否则赋值为 NO。
*
* @param type 图像类型
* @param isExist 是否在本地存在
*
* @return 返回路径的字符串形式。
*/
- (NSString *)getImagePath:(TUIImageType)type isExist:(BOOL *)isExist;
@end
NS_ASSUME_NONNULL_END