云旺im自定義表情有2種佩脊,一種是固定的验庙,也就是你項目在開發(fā)時就配置好的資源,上線后不可修改过牙,第2種是動態(tài)的甥厦,可以自定義分組,以及添加表情到指定分組
思路:
在沙盒目錄下 ?創(chuàng)建emo文件夾 用來存儲圖片以及一些配置文件
NSFileManager *fileManager = [NSFileManager defaultManager];
? ? //? ? 創(chuàng)建總目錄
? ? NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
? ? NSString * emodir? = [docsdir stringByAppendingPathComponent:@"emo"];
? ? [fileManager createDirectoryAtPath:emodir withIntermediateDirectories:YES attributes:nil error:nil];
在沙盒目錄下 創(chuàng)建emotemp文件夾寇钉,用來存儲后面生成的emo文件
NSString * emodirtemp = [docsdir stringByAppendingPathComponent:@"emotemp"];
? ? [fileManager createDirectoryAtPath:emodirtemp withIntermediateDirectories:YES attributes:nil error:nil];
在emo文件目錄下根據(jù)分組名刀疙,創(chuàng)建屬于某分組的文件夾
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{
? ? //? ? 創(chuàng)建xml文件
? ? GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"xparam"];
? ? GDataXMLElement *element = [GDataXMLNode elementWithName:@"dir" stringValue:xmlName];
? ? // 把標(biāo)簽與屬性添加到根標(biāo)簽中
? ? [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張是 ?云旺默認(rèn)最少需要2張
// 目錄里面有一張圖片
? ? NSData *data? = UIImageJPEGRepresentation([UIImage imageNamed:@"001"],.000000005);
? ? NSString *imgFileName = [NSString stringWithFormat:@"/EmotionGroupIcon@2x.png"];
? ? [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];
創(chuàng)建最里面的xml
[self newXMLWithDocPath:groupdirc]
- (void)newXMLWithDocPath:(NSString *)path{
? ? //? ? 創(chuàng)建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];
? ? // 把標(biāo)簽與屬性添加到根標(biāo)簽中
? ? [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];// 關(guān)鍵是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]; }
現(xiàn)在你已經(jīng)成功的生成了emo文件镊辕,根據(jù)官網(wǎng)文檔上所說的 ?添加到項目中就好了