云旺im自定义表情有2种,一种是固定的,也就是你项目在开发时就配置好的资源,上线后不可修改,第2种是动态的,可以自定义分组,以及添加表情到指定分组
思路:
在沙盒目录下 创建emo文件夹 用来存储图片以及一些配置文件
NSFileManager *fileManager = [NSFileManager defaultManager];
// 创建总目录
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString * emodir = [docsdir stringByAppendingPathComponent:@"emo"];
[fileManager createDirectoryAtPath:emodir withIntermediateDirectories:YES attributes:nil error:nil];
在沙盒目录下 创建emotemp文件夹,用来存储后面生成的emo文件
NSString * emodirtemp = [docsdir stringByAppendingPathComponent:@"emotemp"];
[fileManager createDirectoryAtPath:emodirtemp withIntermediateDirectories:YES attributes:nil error:nil];
在emo文件目录下根据分组名,创建属于某分组的文件夹
NSString *groupdir = [emodir stringByAppendingPathComponent:groupName];
[fileManager createDirectoryAtPath:groupdir withIntermediateDirectories:YES attributes:nil error:nil];
// 每个目录下有一个文件夹和一个xml文件
NSString *groupdirc= [groupdir stringByAppendingPathComponent:groupName];
[fileManager createDirectoryAtPath:groupdirc withIntermediateDirectories:YES attributes:nil error:nil];
[self newXMLWithDocPath:groupdir Name:groupName];
生成第一个xml配置文件,这里使用了GDataXML
- (void)newXMLWithDocPath:(NSString *)path Name:(NSString *)xmlName{
// 创建xml文件
GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"xparam"];
GDataXMLElement *element = [GDataXMLNode elementWithName:@"dir" stringValue:xmlName];
// 把标签与属性添加到根标签中
[rootElement addChild:element];
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithRootElement:rootElement];
NSData *xmlData = [doc XMLData];
NSString *xmlpathName = [NSString stringWithFormat:@"config.xml"];
NSString *filePath = [path stringByAppendingPathComponent:xmlpathName];
[xmlData writeToFile:filePath atomically:YES];
}
分组名下面,有3张图片,一张是表情分组组icon,其余2张是 云旺默认最少需要2张
// 目录里面有一张图片
NSData *data = UIImageJPEGRepresentation([UIImage imageNamed:@"001"],.000000005);
NSString *imgFileName = [NSString stringWithFormat:@"/[email protected]"];
[fileManager createFileAtPath:[groupdirc stringByAppendingString:imgFileName] contents:data attributes:nil];
// 以及一个xml文件
NSData *data2 = UIImageJPEGRepresentation([UIImage imageNamed:@"001"],.000000005);
NSString *imgFileName2 = [NSString stringWithFormat:@"/1.png"];
[fileManager createFileAtPath:[groupdirc stringByAppendingString:imgFileName2] contents:data2 attributes:nil];
NSData *data3 = UIImageJPEGRepresentation([UIImage imageNamed:@"002"],.000000005);
NSString *imgFileName3 = [NSString stringWithFormat:@"/2.png"];
[fileManager createFileAtPath:[groupdirc stringByAppendingString:imgFileName3] contents:data3 attributes:nil];
创建最里面的xml
[self newXMLWithDocPath:groupdirc]
- (void)newXMLWithDocPath:(NSString *)path{
// 创建xml文件
GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"xparam"];
GDataXMLElement *element = [GDataXMLNode elementWithName:@"Item"];
GDataXMLElement *ShortCut = [GDataXMLNode elementWithName:@"ShortCut" stringValue:@""];
GDataXMLElement *Meaning = [GDataXMLNode elementWithName:@"Meaning" stringValue:@"gi"];
GDataXMLElement *OriginalFile = [GDataXMLNode elementWithName:@"OriginalFile" stringValue:@"1.png"];
GDataXMLElement *FixedFile = [GDataXMLNode elementWithName:@"FixedFile" stringValue:@"1.png"];
GDataXMLElement *GroupName = [GDataXMLNode elementWithName:@"GroupName" stringValue:@"name"];
GDataXMLElement *IsSys = [GDataXMLNode elementWithName:@"IsSys" stringValue:@"0"];
GDataXMLElement *ShortCut2 = [GDataXMLNode elementWithName:@"ShortCut" stringValue:@""];
GDataXMLElement *Meaning2 = [GDataXMLNode elementWithName:@"Meaning" stringValue:@"nan"];
GDataXMLElement *OriginalFile2 = [GDataXMLNode elementWithName:@"OriginalFile" stringValue:@"2.png"];
GDataXMLElement *FixedFile2 = [GDataXMLNode elementWithName:@"FixedFile" stringValue:@"2.png"];
GDataXMLElement *GroupName2 = [GDataXMLNode elementWithName:@"GroupName" stringValue:@"name"];
GDataXMLElement *IsSys2 = [GDataXMLNode elementWithName:@"IsSys" stringValue:@"0"];
[element addChild:ShortCut];
[element addChild:Meaning];
[element addChild:OriginalFile];
[element addChild:FixedFile];
[element addChild:GroupName];
[element addChild:IsSys];
GDataXMLElement *element2 = [GDataXMLNode elementWithName:@"Item"];
[element2 addChild:ShortCut2];
[element2 addChild:Meaning2];
[element2 addChild:OriginalFile2];
[element2 addChild:FixedFile2];
[element2 addChild:GroupName2];
[element2 addChild:IsSys2];
// 把标签与属性添加到根标签中
[rootElement addChild:element];
[rootElement addChild:element2];
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithRootElement:rootElement];
NSData *xmlData = [doc XMLData];
NSString *xmlpathName = @"EmotionConfig.xml";
NSString *filePath = [path stringByAppendingPathComponent:xmlpathName];
[xmlData writeToFile:filePath atomically:YES];
}
将存放xml和图片文件夹压缩成emo文件
NSArray *pathArray = @[groupdirc,[NSString stringWithFormat:@"%@/config.xml",groupdir]]
[self zipWithArray:pathArray withZipPath:groupdir pathName:[NSString stringWithFormat:@"%@/%@.emo",emodirtemp,groupName]];
- (BOOL)isDirectory:(NSString *)filePath { BOOL isDirectory = NO; [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDirectory]; return isDirectory; }
- (void)zipWithArray:(NSArray *)pathArray withZipPath:(NSString *)sourcePath pathName:(NSString *)pathName{
NSFileManager *fileManager = [NSFileManager defaultManager];
ZipArchive * zipArchive = [ZipArchive new];
[zipArchive CreateZipFile2:pathName];
for (NSString *path in pathArray) {
if ([self isDirectory:path])
{ // 是文件夹
NSArray *subPaths = [fileManager subpathsAtPath:sourcePath];// 关键是subpathsAtPath方法
for(NSString *subPath in subPaths)
{ NSString *fullPath = [sourcePath stringByAppendingPathComponent:subPath];
BOOL isDir;
if([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir)// 只处理文件 { [zipArchive addFileToZip:fullPath newname:subPath]; } } } }
[zipArchive CloseZipFile2]; }
现在你已经成功的生成了emo文件,根据官网文档上所说的 添加到项目中就好了