diff --git a/FULiveDemo.xcodeproj/project.pbxproj b/FULiveDemo.xcodeproj/project.pbxproj
index 0376b0d4..ff362110 100644
--- a/FULiveDemo.xcodeproj/project.pbxproj
+++ b/FULiveDemo.xcodeproj/project.pbxproj
@@ -4200,7 +4200,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 41;
+ CURRENT_PROJECT_VERSION = 50;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = 35A6KD62ZJ;
@@ -4267,7 +4267,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 41;
+ CURRENT_PROJECT_VERSION = 50;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = 35A6KD62ZJ;
diff --git a/FULiveDemo/AppSupportFiles/Info.plist b/FULiveDemo/AppSupportFiles/Info.plist
index 1856336e..f7ef8aa3 100644
--- a/FULiveDemo/AppSupportFiles/Info.plist
+++ b/FULiveDemo/AppSupportFiles/Info.plist
@@ -24,6 +24,8 @@
1.0
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
+ ITSAppUsesNonExemptEncryption
+
LSRequiresIPhoneOS
NSAppTransportSecurity
diff --git a/FULiveDemo/Lib/FURenderKit.framework/FURenderKit b/FULiveDemo/Lib/FURenderKit.framework/FURenderKit
index faffad18..69c59b4f 100755
Binary files a/FULiveDemo/Lib/FURenderKit.framework/FURenderKit and b/FULiveDemo/Lib/FURenderKit.framework/FURenderKit differ
diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h
index b009d67d..ab267367 100644
--- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h
+++ b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h
@@ -37,6 +37,9 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)updateMakeupPackage:(FUItem * __nullable)makeupPackage needCleanSubItem:(BOOL)needCleanSubItem;
+//修改整体妆容程度值
+@property (nonatomic, assign) double intensity;
+
////组合装对象,内部包含当前组合装所有部位子妆
//@property (nonatomic, strong, nullable) FUItem *makeupPackage;
diff --git a/FULiveDemo/Lib/FURenderKit.framework/Info.plist b/FULiveDemo/Lib/FURenderKit.framework/Info.plist
index a310e18c..01a456b7 100644
Binary files a/FULiveDemo/Lib/FURenderKit.framework/Info.plist and b/FULiveDemo/Lib/FURenderKit.framework/Info.plist differ
diff --git a/FULiveDemo/Modules/BGSegmentation/VC/FUBGSegmentationController.m b/FULiveDemo/Modules/BGSegmentation/VC/FUBGSegmentationController.m
index acfde413..f82cf078 100644
--- a/FULiveDemo/Modules/BGSegmentation/VC/FUBGSegmentationController.m
+++ b/FULiveDemo/Modules/BGSegmentation/VC/FUBGSegmentationController.m
@@ -115,6 +115,8 @@ - (void)itemsViewDidSelectedItem:(NSString *)item indexPath:(NSIndexPath *)index
image = [weak.segmentManager.segment readFirstFrame];
}
if (image) {
+ model.iconImage = image;
+ [weak.segmentManager saveModel: model];
[weak saveImg:image withName:CUSTOMBG];
} else {
//未获取当前录像的第一帧,移除自定义背景
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m
index a6a8ef74..3ea18ba0 100644
--- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m
+++ b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m
@@ -50,15 +50,26 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection
}
- BOOL selected = _selectedIndex == indexPath.row ;
-
+ BOOL selected = _selectedIndex == indexPath.row ;
+
+ if (selected) {
+ imageName = opened ? [modle.mTitle stringByAppendingString:@"-3"] : [modle.mTitle stringByAppendingString:@"-2"] ;
+ }else {
+ imageName = opened ? [modle.mTitle stringByAppendingString:@"-1"] : [modle.mTitle stringByAppendingString:@"-0"] ;
+ }
+
+ /* icon 未找到, 尝试处理 多语言图片 */
+ UIImage *imageIcon = [UIImage imageWithName:imageName];
+ if (imageIcon == nil) {
if (selected) {
- imageName = opened ? [modle.mTitle stringByAppendingString:@"-3.png"] : [modle.mTitle stringByAppendingString:@"-2.png"] ;
+ imageName = opened ? [modle.mTitle stringByAppendingString:@"-3"] : [modle.mTitle stringByAppendingString:@"-2"] ;
}else {
- imageName = opened ? [modle.mTitle stringByAppendingString:@"-1.png"] : [modle.mTitle stringByAppendingString:@"-0.png"] ;
+ imageName = opened ? [modle.mTitle stringByAppendingString:@"-1"] : [modle.mTitle stringByAppendingString:@"-0"] ;
}
+ imageIcon = [UIImage localizedImageWithName:imageName countrySimple:nil];
+ }
- cell.imageView.image = [UIImage imageWithName:imageName];
+ cell.imageView.image = imageIcon;
cell.titleLabel.text = FUNSLocalizedString(modle.mTitle,nil);
cell.titleLabel.textColor = _selectedIndex == indexPath.row ? [UIColor colorWithHexColorString:@"5EC7FE"] : [UIColor whiteColor];
}
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/Contents.json
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/Contents.json
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/Contents.json
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/demo_icon_en_style_7_nor.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/demo_icon_en_style_7_nor.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/demo_icon_en_style_7_nor@2x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@2x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/demo_icon_en_style_7_nor@2x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@2x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/demo_icon_en_style_7_nor@3x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@3x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-3.imageset/demo_icon_en_style_7_nor@3x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@3x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/Contents.json
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/Contents.json
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/Contents.json
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/demo_icon_style_7_nor.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/demo_icon_style_7_nor.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/demo_icon_style_7_nor@2x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@2x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/demo_icon_style_7_nor@2x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@2x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/demo_icon_style_7_nor@3x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@3x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0.imageset/demo_icon_style_7_nor@3x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@3x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/Contents.json
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/Contents.json
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/Contents.json
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/demo_icon_en_style_7_sel.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/demo_icon_en_style_7_sel.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/demo_icon_en_style_7_sel@2x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@2x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/demo_icon_en_style_7_sel@2x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@2x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/demo_icon_en_style_7_sel@3x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@3x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-sel.imageset/demo_icon_en_style_7_sel@3x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@3x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/Contents.json
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/Contents.json
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/Contents.json
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/demo_icon_style_7_sel.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/demo_icon_style_7_sel.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/demo_icon_style_7_sel@2x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@2x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/demo_icon_style_7_sel@2x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@2x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/demo_icon_style_7_sel@3x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@3x.png
similarity index 100%
rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2.imageset/demo_icon_style_7_sel@3x.png
rename to FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@3x.png
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h
index 8a2fdde0..ae405765 100644
--- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h
+++ b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h
@@ -11,4 +11,11 @@
@interface UIImage (demobar)
+ (UIImage *)imageWithName:(NSString *)name;
+
+/**
+ * 适配图片多语言文案问题
+ * countrySimple 国家简写标识, countrySimple == nil,获取系统分配的国家语言简写标识, countrySimple == @""表示不加国家简写后缀
+ * 多语言图片适配规则 name + '_' + countrySimple, 图片命名必须严格按照该规则 'Style7-3_en'
+ */
++ (UIImage *)localizedImageWithName:(NSString *)name countrySimple:(NSString *)countrySimple;
@end
diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.m
index 5f8d9da6..1fe843cd 100644
--- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.m
+++ b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.m
@@ -19,4 +19,29 @@ + (UIImage *)imageWithName:(NSString *)name {
return image;
}
+/**
+ * 适配图片多语言文案问题
+ * countrySimple 国家简写标识, == nil,获取系统分配的国家语言简写标识
+ */
++ (UIImage *)localizedImageWithName:(NSString *)name countrySimple:(NSString *)countrySimple {
+ UIImage *image = [UIImage imageNamed:name inBundle:[NSBundle bundleForClass:FUAPIDemoBar.class] compatibleWithTraitCollection:nil];
+ if (image) {
+ return image;
+ }
+
+ if (countrySimple == nil) {
+ NSDictionary *dic = [NSLocale componentsFromLocaleIdentifier:[NSLocale currentLocale].localeIdentifier];
+ NSString *kCFLocaleLanguageCodeKey = [dic objectForKey:NSLocaleLanguageCode];
+ countrySimple = kCFLocaleLanguageCodeKey;
+ }
+
+ if (countrySimple.length == 0) {
+ image = [UIImage imageNamed:name];
+ } else {
+ // * 多语言图片适配规则 name + '_' + countrySimple, 图片命名必须严格按照该规则 'Style7-3_en'
+ image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_%@",name,countrySimple]];
+ }
+ return image;
+}
+
@end
diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj
index 8142b190..5c233afd 100644
--- a/Pods/Pods.xcodeproj/project.pbxproj
+++ b/Pods/Pods.xcodeproj/project.pbxproj
@@ -15,6 +15,7 @@
dependencies = (
);
name = Bugly;
+ productName = Bugly;
};
/* End PBXAggregateTarget section */
@@ -75,7 +76,6 @@
301CD9395E474DE10CF30B1582E1193A /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C617A23A78E396B058A259B265DAC48 /* SDWebImagePrefetcher.m */; };
304FB2F3CB19F5C44D812D90AA2F1121 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C3D2D6321E895200A6A13F739CBB08F /* UIRefreshControl+AFNetworking.m */; };
32164C652FC5A1BE5B37AD5698C99CC9 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 397C12CB0EA11BE020D15D50E27E3EB0 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 337C8A9592224E2629F71F4759AE0DF2 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = BD36579E36D893E5C5744CAC17D9E6CA /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Project, ); }; };
33A53F28EA81B362E5E7F018F0404E0A /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 394E0E96AD11B0F576A5F7E582895B18 /* SDImageCache.m */; };
34E253EB078AE14E619398EB86C16A2F /* MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BB47D0D3E452438785E7054E9339FAE /* MJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; };
3618E67E015EEEB32EBE43CE0097FEF9 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D0DD0D1A2E351630F5444FF86ABED76 /* LOTBezierData.m */; };
@@ -118,7 +118,6 @@
551EDABAFCE6F89BB75C7174D4D9D059 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B05A506AC25AF4A4E6F706BCC44BB658 /* UIActivityIndicatorView+AFNetworking.m */; };
560772924855508A02702CAECDF31ECB /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 59706ED3A7981B3A14C85D897328289A /* FLAnimatedImage.m */; };
5607AF83703C0AEDB12115740B6672BD /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 165EDC3E6050B7D9F85C1D07ED24B562 /* AFAutoPurgingImageCache.m */; };
- 5671A72ECAB90A855ECF6F69B750B4E1 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BF0F38AF71CA66E13784BDFD29BFE20 /* UIWebView+AFNetworking.m */; };
5672C08B2E4A956A54FBBC0BFC17DC82 /* MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = D9398D8281E32547FB8913A8B69543B6 /* MJProperty.h */; settings = {ATTRIBUTES = (Project, ); }; };
572D05B146EAA3EF5530A0D0E34904A0 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A4A069CF2A03E3BB04F8A0D39FEFA1 /* MASViewConstraint.m */; };
57DE48AA24434C2275EAAC780346F9D1 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FF09B885100A0CAF2884B36AD0C01C /* LOTPathInterpolator.m */; };
@@ -405,7 +404,7 @@
1DA6EC10D0A94E417B5EB1D8470F968E /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeTrimPath.m; path = "lottie-ios/Classes/Models/LOTShapeTrimPath.m"; sourceTree = ""; };
1DEA46B9159052E599F2B737AD3E76C6 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; };
1EE8B898C6649C0E95A39CC2D947782D /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRenderGroup.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h"; sourceTree = ""; };
- 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMasonry.a; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; };
2006AD3748045C5F25E8039084B884EA /* lottie-ios-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-prefix.pch"; sourceTree = ""; };
20D0A108C721E90DBBB747DC2547D850 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; };
20F9B2DDF0E51D89980546525C2DE7FC /* FLAnimatedImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLAnimatedImage-prefix.pch"; sourceTree = ""; };
@@ -417,7 +416,7 @@
25DB2CE73DCAA4968695B626A04AFA98 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; };
265A5D04331FD078A94585D275978104 /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; };
29B4663BBEE1E1B89C7F6CF8A163690C /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; };
- 2B276B0A79173A1D6E83C9B4FB9A4A57 /* libMJExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMJExtension.a; path = libMJExtension.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2B276B0A79173A1D6E83C9B4FB9A4A57 /* libMJExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMJExtension.a; sourceTree = BUILT_PRODUCTS_DIR; };
2B2F1AC2DBBAF256533C49651E8F1DA0 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; };
2BAF5AFBDD57F9D1B535F41CE52C6DA1 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; };
2D0DD0D1A2E351630F5444FF86ABED76 /* LOTBezierData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTBezierData.m; path = "lottie-ios/Classes/AnimatableProperties/LOTBezierData.m"; sourceTree = ""; };
@@ -432,7 +431,7 @@
33746C330DE5C6937C0FD42EEB26B087 /* Bugly.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.release.xcconfig; sourceTree = ""; };
347ADE8B91F09ADDB19F0D628D257798 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJKeyValue.m"; path = "MJExtension/NSObject+MJKeyValue.m"; sourceTree = ""; };
349ABC62A616CFFFA9A38207E8BBE26C /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; };
- 3673B994EDE0CD2EC135C263D5C1BAF6 /* libPods-FULiveDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-FULiveDemo.a"; path = "libPods-FULiveDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3673B994EDE0CD2EC135C263D5C1BAF6 /* libPods-FULiveDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FULiveDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
36B8383BE996BBEFE37DED6B240D03D3 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; };
36DBDAB9A1BCFD3591AEF9F58636085D /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTMask.h; path = "lottie-ios/Classes/Models/LOTMask.h"; sourceTree = ""; };
37EE3C50B82AD40657776B2E772986EF /* LOTPointInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTPointInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m"; sourceTree = ""; };
@@ -476,7 +475,7 @@
4F956095F7D9C856D2F972135B0B797B /* SVProgressAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressAnimatedView.m; path = SVProgressHUD/SVProgressAnimatedView.m; sourceTree = ""; };
509EF0197BD44AE07D5AB0172C6429CA /* UIBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UIBezierPath.m; path = "lottie-ios/Classes/MacCompatibility/UIBezierPath.m"; sourceTree = ""; };
512483D09C19BAA9DDB0147F65F43826 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/NSButton+WebCache.h"; sourceTree = ""; };
- 51BA97E8B5085EFFB47BC9C0B785CEA7 /* liblottie-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "liblottie-ios.a"; path = "liblottie-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 51BA97E8B5085EFFB47BC9C0B785CEA7 /* liblottie-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblottie-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; };
538367BC493FDB9DE3B7285B225BFB53 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeRepeater.m; path = "lottie-ios/Classes/Models/LOTShapeRepeater.m"; sourceTree = ""; };
5390B582062C7533EAC25FCDB1708177 /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CGGeometry+LOTAdditions.h"; path = "lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h"; sourceTree = ""; };
543407BC9267CBD06558A966E03A46E3 /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeRectangle.m; path = "lottie-ios/Classes/Models/LOTShapeRectangle.m"; sourceTree = ""; };
@@ -574,7 +573,7 @@
9B1E487E943E70F9946BC1858EB02F10 /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeGroup.m; path = "lottie-ios/Classes/Models/LOTShapeGroup.m"; sourceTree = ""; };
9B5B1C58996084DBA5BC98FF6F976FFA /* LOTKeypath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTKeypath.h; path = "lottie-ios/Classes/PublicHeaders/LOTKeypath.h"; sourceTree = ""; };
9BE8B0C15A44C6C24B40D603B99A3B57 /* LOTValueCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTValueCallback.h; path = "lottie-ios/Classes/PublicHeaders/LOTValueCallback.h"; sourceTree = ""; };
- 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+ 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
9E5E72B44A01897C35302467983E9705 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; };
9E8C0828927974AEFC28F5746D529102 /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeCircle.m; path = "lottie-ios/Classes/Models/LOTShapeCircle.m"; sourceTree = ""; };
9EDE7F7E5DA3AC7A99CBF372EE12C236 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; };
@@ -585,7 +584,7 @@
A171DC951174B1D86587D987B443336C /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJKeyValue.h"; path = "MJExtension/NSObject+MJKeyValue.h"; sourceTree = ""; };
A1EC9D848909BFCA5C644AE690D119F3 /* Pods-FULiveDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FULiveDemo-acknowledgements.plist"; sourceTree = ""; };
A38795771E0B1BAA55F9A2F4945E000E /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; };
- A4FA15D44DF6BAC7550EDEED10862AA3 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libAFNetworking.a; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ A4FA15D44DF6BAC7550EDEED10862AA3 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; };
A5DF9E307B7FCF66D01B7468B7F8AB20 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; };
A6384A9C7A4B505D22EE0B97FAD48D7E /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationView_Internal.h; path = "lottie-ios/Classes/Private/LOTAnimationView_Internal.h"; sourceTree = ""; };
A8160267DF181EAD585F88F57BCC0F32 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; };
@@ -598,7 +597,7 @@
B03DB51956AF5CCBB10F7F922165D667 /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Expanded.h"; path = "lottie-ios/Classes/Extensions/UIColor+Expanded.h"; sourceTree = ""; };
B041B07321FB9FB9D40E00522991FD2E /* MJExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.debug.xcconfig; sourceTree = ""; };
B05A506AC25AF4A4E6F706BCC44BB658 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; };
- B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; };
B1D38F67415F4F75166504E3FF9A1F16 /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; };
B3127FB384E0C64EA7B819C74DBD2268 /* MJPropertyType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyType.m; path = MJExtension/MJPropertyType.m; sourceTree = ""; };
B38F64048EE686C7E7BACAF746D4CB3B /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; };
@@ -663,7 +662,7 @@
E6849C29B98E6E9E1D6CC007B644B9BA /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAsset.h; path = "lottie-ios/Classes/Models/LOTAsset.h"; sourceTree = ""; };
E6AF57F06BB4A6F60C55B97FF7AFD22F /* Bugly.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bugly.framework; sourceTree = ""; };
E7354366D89B9ADE2EC24E6297356A95 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTLayerGroup.h; path = "lottie-ios/Classes/Models/LOTLayerGroup.h"; sourceTree = ""; };
- E97D43C46A45EE515A4DA3AF94398441 /* libSVProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSVProgressHUD.a; path = libSVProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ E97D43C46A45EE515A4DA3AF94398441 /* libSVProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSVProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; };
ECF362E3B2B73D76B5B67847947090B7 /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; };
ED7B22DF4FA3B637113026E7BB0CA7F0 /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPointInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h"; sourceTree = ""; };
EDAA48BFF0D31B5965484FB75E5C38FF /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; };
@@ -680,7 +679,7 @@
FA22F35A528CC18D6A78F59D21A2860F /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; };
FA452448D31CEC31AE48B0A45EA8B8E9 /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimationView.m; path = "lottie-ios/Classes/Private/LOTAnimationView.m"; sourceTree = ""; };
FA95A3566E37272FAB1AA93FFB0BCC0A /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; };
- FAA5F2D71B90788C908800A94534AA92 /* libFLAnimatedImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFLAnimatedImage.a; path = libFLAnimatedImage.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ FAA5F2D71B90788C908800A94534AA92 /* libFLAnimatedImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFLAnimatedImage.a; sourceTree = BUILT_PRODUCTS_DIR; };
FDC8FD83687D1731A0ACC1D6919B82EB /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; };
FE6846FB412B63086F43F8A3F1733BDD /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimationCache.m; path = "lottie-ios/Classes/Private/LOTAnimationCache.m"; sourceTree = ""; };
FFEAB1FDB0A78F291B256BD92D2A3F6C /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; };
@@ -865,7 +864,6 @@
C28C0F983DE4B54D49FE44A6EB124750 /* Support Files */,
560E089C1B4E25AAA814B2D7119CC892 /* UIKit */,
);
- name = AFNetworking;
path = AFNetworking;
sourceTree = "";
};
@@ -883,7 +881,6 @@
25A65B92FBCEB98E68A15DEC3167312E /* Resources */,
FBC48AF3C79C7F1C42FBB83A585BAD99 /* Support Files */,
);
- name = SVProgressHUD;
path = SVProgressHUD;
sourceTree = "";
};
@@ -992,7 +989,6 @@
3013A1E0D9933FE960522FADD1EFC99F /* Frameworks */,
55419CD2392DD52241048BBAB05C4A6B /* Support Files */,
);
- name = Bugly;
path = Bugly;
sourceTree = "";
};
@@ -1026,7 +1022,6 @@
9F332F9612FDC500048A689B53E85A5E /* ViewController+MASAdditions.m */,
DBD42C7C031867F04773E1BF81F68AF1 /* Support Files */,
);
- name = Masonry;
path = Masonry;
sourceTree = "";
};
@@ -1202,7 +1197,6 @@
D7848CF8B1266AAE8B3B7B5A978A32EC /* UIColor+Expanded.m */,
2971FAB5B5DF85E61394705BD8D098D8 /* Support Files */,
);
- name = "lottie-ios";
path = "lottie-ios";
sourceTree = "";
};
@@ -1243,7 +1237,6 @@
5A48F7B21B3722568D75F421248CFDB8 /* NSString+MJExtension.m */,
EF1F2DE54A79CFCE7E6CEE1B59A4545F /* Support Files */,
);
- name = MJExtension;
path = MJExtension;
sourceTree = "";
};
@@ -1263,7 +1256,6 @@
8966079F7FA4A59D6B88A3513E6B779B /* FLAnimatedImageView.m */,
A46CDAAACED3BC47C53BE8476D18EF72 /* Support Files */,
);
- name = FLAnimatedImage;
path = FLAnimatedImage;
sourceTree = "";
};
@@ -1318,7 +1310,6 @@
08F0656087571314F129606B8EAD6F79 /* Core */,
3734D5FED34DCE6E902B3565AB736782 /* Support Files */,
);
- name = SDWebImage;
path = SDWebImage;
sourceTree = "";
};
@@ -1347,7 +1338,6 @@
C1EE07F0E0B54668574633B545FBCE48 /* UIKit+AFNetworking.h in Headers */,
D3DC240631E1FA883A5604B3E99BAE2B /* UIProgressView+AFNetworking.h in Headers */,
A845819E8332E3CA279E6B00EAA55366 /* UIRefreshControl+AFNetworking.h in Headers */,
- 337C8A9592224E2629F71F4759AE0DF2 /* UIWebView+AFNetworking.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1729,7 +1719,6 @@
40F9C3B7C0CCD0982FD14728F2595632 /* UIImageView+AFNetworking.m in Sources */,
894126828AF68F98598CA7B53E737AEF /* UIProgressView+AFNetworking.m in Sources */,
304FB2F3CB19F5C44D812D90AA2F1121 /* UIRefreshControl+AFNetworking.m in Sources */,
- 5671A72ECAB90A855ECF6F69B750B4E1 /* UIWebView+AFNetworking.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2167,8 +2156,7 @@
MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
STRIP_INSTALLED_PRODUCT = NO;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
SYMROOT = "${SRCROOT}/../build";
};
diff --git a/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist
index 6c9093a7..96a0373c 100644
--- a/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,47 +7,47 @@
AFNetworking.xcscheme_^#shared#^_
orderHint
- 2
+ 10
Bugly.xcscheme_^#shared#^_
orderHint
- 1
+ 9
FLAnimatedImage.xcscheme_^#shared#^_
orderHint
- 8
+ 11
MJExtension.xcscheme_^#shared#^_
orderHint
- 11
+ 6
Masonry.xcscheme_^#shared#^_
orderHint
- 4
+ 3
Pods-FULiveDemo.xcscheme_^#shared#^_
orderHint
- 9
+ 4
SDWebImage.xcscheme_^#shared#^_
orderHint
- 3
+ 5
SVProgressHUD.xcscheme_^#shared#^_
orderHint
- 10
+ 8
lottie-ios.xcscheme_^#shared#^_
orderHint
- 5
+ 1
diff --git "a/docs/\347\247\273\345\212\250\347\253\257\346\226\207\346\241\243/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md" "b/docs/\347\247\273\345\212\250\347\253\257\346\226\207\346\241\243/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md"
new file mode 100644
index 00000000..28339c9c
--- /dev/null
+++ "b/docs/\347\247\273\345\212\250\347\253\257\346\226\207\346\241\243/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md"
@@ -0,0 +1,519 @@
+# 快速集成文档
+
+## 初始化
+
+```objective-c
+// 初始化 FURenderKit
+FUSetupConfig *setupConfig = [[FUSetupConfig alloc] init];
+setupConfig.authPack = FUAuthPackMake(g_auth_package, **sizeof**(g_auth_package));
+[FURenderKit setupWithSetupConfig:setupConfig];
+```
+
+## 加载AI模型
+
+```objective-c
+// 加载人脸 AI 模型
+NSString *faceAIPath = [[NSBundle mainBundle] pathForResource:@"ai_face_processor" ofType:@"bundle"];
+[FUAIKit loadAIModeWithAIType:FUAITYPE_FACEPROCESSOR dataPath:faceAIPath];
+
+// 加载身体 AI 模型
+NSString *bodyAIPath = [[NSBundle mainBundle] pathForResource:@"ai_human_processor" ofType:@"bundle"];
+[FUAIKit loadAIModeWithAIType:FUAITYPE_HUMAN_PROCESSOR dataPath:bodyAIPath];
+
+// 加载手势 AI 模型
+NSString *handAIPath = [[NSBundle mainBundle] pathForResource:@"ai_hand_processor" ofType:@"bundle"];
+[FUAIKit loadAIModeWithAIType:FUAITYPE_HANDGESTURE dataPath:handAIPath];
+
+// 加载头发 AI 模型
+NSString *hairAIPath = [[NSBundle mainBundle] pathForResource:@"ai_hairseg" ofType:@"bundle"];
+[FUAIKit loadAIModeWithAIType:FUAITYPE_HAIRSEGMENTATION dataPath:hairAIPath];
+```
+
+
+
+## 设置显示View
+
+FURenderKit 提供了显示渲染结果的 FUGLDisplayView 类(如果使用自定义渲染可忽略本步骤),用户可直接在外部初始化一个 FUGLDisplayView 实例,并赋值给 FURenderKit 单例。FURenderKit 会将渲染结果直接绘制到该 FUGLDisplayView 实例。示例代码如下:
+
+```objective-c
+// set glDisplayView
+FUGLDisplayView *glDisplayView = [[FUGLDisplayView alloc] initWithFrame:self.view.bounds];
+[self.view addSubview:glDisplayView];
+[FURenderKit shareRenderKit].glDisplayView = glDisplayView;
+[FURenderKit shareRenderKit].glDisplayView.contentMode = FUGLDisplayViewContentModeScaleAspectFit; //设置图像适配模式
+```
+
+用户也可以不将 FUGLDisplayView 实例赋值给 FURenderKit 单例,直接在外部使用 FUGLDisplayView 的相关接口显示图像。
+
+## 内部相机
+
+FURenderKit 提供了采集图像的 FUCaptureCamera 类(如果使用外部相机可忽略本步骤),用户可直接掉用下面的函数开启或关闭内部相机功能。
+
+```objective-c
+// 开启内部相机
+[[FURenderKit shareRenderKit] startInternalCamera];
+
+// 关闭内部相机
+[[FURenderKit shareRenderKit] stopInternalCamera];
+```
+
+**FURenderKit 单例有一个 internalCameraSetting 实例,启动内部相机时会根据 internalCameraSetting 的参数配置相机,internalCameraSetting 具体属性及默认值如下,用户可以通过修改这些参数直接修改相机的相关属性:**
+
+```objective-c
+@interface FUInternalCameraSetting : NSObject
+@property (nonatomic, assign) int format; //default kCVPixelFormatType_32BGRA
+@property (nonatomic, copy) AVCaptureSessionPreset sessionPreset; // default AVCaptureSessionPreset1280x720
+@property (nonatomic, assign) AVCaptureDevicePosition position; // default AVCaptureDevicePositionFront
+@property (nonatomic, assign) int fps; // default 30
+// default NO, 需要注意的是,在打开内部虚拟相机时,用户如果使用Scene相关需要真实相机的功能,内部会自动开启真实相机,并且当用户关闭相关Scene功能时,内部会自动关闭。
+@property (nonatomic, assign) BOOL useVirtualCamera;
+
+/// 如果使用内部相机时,SDK会自动判断当前是否需要使用系统相机,如果不需相机,内部会模拟一个相机并循环输出图像。
+/// 该属性可以设置输出图像的宽高,默认宽高为:720x1280,如果设置为CGSizeZero,则会使用 sessionPreset 的宽高。
+@property (nonatomic, assign) CGSize virtualCameraResolution;
+@end
+```
+
+**用户也可以直接使用 FUCaptureCamera 在外部初始化相机实例,并通过 FUCaptureCamera 相关接口获取图像,再将图像传入 FURenderKit 的渲染接口处理图像。 **
+
+
+
+## FURenderKit 主要接口说明:
+
+### 渲染接口
+
+#### 1. 输入
+
+FURenderKit 定义了 FURenderInput 类作为输入,该类的具体定义如下:
+
+```objective-c
+@interface FURenderInput : NSObject
+
+/// 输入的纹理
+@property (nonatomic, assign) FUTexture texture;
+
+/// 输入的 pixelBuffer
+@property (nonatomic, assign) CVPixelBufferRef pixelBuffer;
+
+/// 输入的 imageBuffer,如果同时传入了 pixelBuffer,将优先使用 pixelBuffer
+/// 输入 imageBuffer,在 renderConfig 的 onlyOutputTexture 为 NO 时,render 结果会直接读会输入的 imageBuffer,大小格式与输入均保持一致。
+@property (nonatomic, assign) FUImageBuffer imageBuffer;
+
+/// 设置render相关的输入输出配置,详细参数请查看 FURenderConfig 类的接口注释。
+@property (nonatomic, strong) FURenderConfig *renderConfig;
+
+@end
+```
+
+用户可以根据自己代码中的数据,选择输入一种或多种格式的图像,如果传入多种格式时,如果同时传入了 pixelBuffer 和 imageBuffer,会优先使用 pixelBuffer 进行图像处理。FUTexture 及 FUImageBuffer相关属性,请查看相关头文件。
+
+### 2. 配置
+
+FURenderInput 中有一个 FURenderConfig 类,该类用来配置一些输入及输出的相关设置,具体定义如下:
+
+```objective-c
+@interface FURenderConfig : NSObject
+
+// 自定义输出结果的大小,当前只会对输出的纹理及pixelBuffer有效
+@property (nonatomic, assign) CGSize customOutputSize;
+
+// 当前图片是否来源于前置摄像头
+@property (nonatomic, assign) BOOL isFromFrontCamera;
+
+// 原始图像的朝向
+@property (nonatomic, assign) FUImageOrientation imageOrientation;
+
+// 重力开关,开启此功能可以根据已设置的 imageRotation 自动适配AI检测的方向。
+@property (nonatomic, assign) BOOL gravityEnable;
+
+// 设置为YES 只会生效美颜结果
+@property (nonatomic, assign) BOOL onlyRenderBeauty;
+
+// 设置输入纹理的旋转方向,设置该属性会影响输出纹理的方向。由于默认创建的纹理是倒着的,所以该参数的默认值为 CCROT0_FLIPVERTICAL,如已转正,请将该参数设置为 DEFAULT
+@property (nonatomic, assign) TRANSFORM_MATRIX textureTransform;
+
+// 设置输入pixelBuffer/imageBuffer的旋转方向,以使buffer数据与textureTransform作用后纹理的方向一致,该参数仅用于AI算法检测,不会改变buffer的方向或镜像属性
+@property (nonatomic, assign) TRANSFORM_MATRIX bufferTransform;
+
+// 是否渲染到当前的FBO,设置为YES时,返回的 FURenderOutput 内的所有数据均为空值。
+@property (nonatomic, assign) BOOL renderToCurrentFBO;
+
+// 设置为YES 且 renderToCurrentFBO 为 NO 时,只会输出纹理,不会输出CPU层的图像。
+@property (nonatomic, assign) BOOL onlyOutputTexture;
+
+@end
+
+```
+
+### 3. 输出
+
+FURenderKit 定义了 FURenderOutput 类作为输出,该类的具体定义如下: 输出的图像类型及个数与输入相同。
+
+```objective-c
+@interface FURenderOutput : NSObject
+
+// 设置输入纹理的旋转方向,设置该属性会影响输出纹理的方向。由于默认创建的纹理是倒着的,所以该参数的默认值为 CCROT0_FLIPVERTICAL,如已转正,请将该参数设置为 DEFAULT
+@property (nonatomic, assign) TRANSFORM_MATRIX textureTransform;
+
+// 设置输入pixelBuffer/imageBuffer的旋转方向,以使buffer数据与textureTransform作用后纹理的方向一致,该参数仅用于AI算法检测,不会改变buffer的方向或镜像属性
+@property (nonatomic, assign) TRANSFORM_MATRIX bufferTransform;
+
+// 设置输入pixelBuffer/imageBuffer的旋转方向,以使buffer数据与textureTransform作用后纹理的方向一致,该参数仅用于AI算法检测,不会改变buffer的方向或镜像属性
+@property (nonatomic, assign) TRANSFORM_MATRIX outputTransform;
+
+// 输出的纹理
+@property (nonatomic, assign) FUTexture texture;
+
+// 输出的 pixelBuffer
+@property (nonatomic, assign) CVPixelBufferRef pixelBuffer;
+
+// 输出的 imageBuffer,内部数据与输入的 imageBuffer 一致。
+@property (nonatomic, assign) FUImageBuffer imageBuffer;
+
+@end
+```
+
+
+
+### 内部渲染回调
+
+FURenderKit 定义了一个 FURenderKitDelegate 协议,该协议包含三个接口,一个是使用内部相机时即将处理图像时输入回调,另一个是使用内部相机时处理图像后的输出回调
+
+```objective-c
+// 使用内部相机时,即将处理图像时输入
+- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput;
+
+// 使用内部相机时,处理图像后的输出
+- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput;
+
+// 使用内部相机时,内部是否进行render处理,返回NO,renderKitDidRenderToOutput接口将直接输出原图. YES,renderKitDidRenderToOutput接口输出带渲染道具的图
+- (BOOL)renderKitShouldDoRender;
+```
+
+### 外部渲染接口
+
+FURenderKit 提供了下面的接口处理图像,用户可以在外部将图像传入该接口获取处理之后的图像。
+
+```
+- (FURenderOutput *)renderWithInput:(FURenderInput *)input;
+```
+
+示例如下:
+
+```objective-c
+FURenderInput *renderInput = [[FURenderInput alloc] init];
+renderInput.pixelBuffer = pixelBuffer;
+FURenderOutput *renderOutput = [[FURenderKit shareRenderKit] renderWithInput:renderInput];
+return renderOutput.pixelBuffer;
+```
+
+
+
+## 开启关闭相机
+
+```objective-c
+#pragma mark - internalCamera
+
+- (void)startInternalCamera;
+
+- (void)stopInternalCamera;
+```
+
+
+
+## 根据证书校验模块权限
+
+```objective-c
+/**
+ * 获取证书里面的模块权限
+ * code get i-th code, currently available for 0 and 1
+ */
++ (int)getModuleCode:(int)code;
+```
+
+
+
+## 销毁
+
+#### 内部会销毁相机、各个的渲染模型(美颜、美妆、道具贴纸等),释放ai资源以及销毁底层相关的资源
+
+```objective-c
+- (void)destroy
+```
+
+
+
+## 清除
+
+#### 和destory 区别 只会清除各个的渲染模型(美颜、美妆、道具贴纸等),其他不处理
+
+```objective-c
++ (void)clear;
+```
+
+
+
+## 录像和拍照
+
+```objective-c
+#pragma mark - Record && capture
+//手指按下录像按钮调用
++ (void)startRecordVideoWithFilePath:(NSString *)filePath;
+//手指松开录像按钮调用
++ (void)stopRecordVideoComplention:(void(^)(NSString *filePath))complention;
+//捕获当前帧作为图片
++ (UIImage *)captureImage;
+```
+
+
+
+## FUAIKit
+
+AI能力相关的功能都通过FUAIKit 加载或获取
+
+部分接口和属性介绍
+
+```objective-c
+@property (nonatomic, assign) int maxTrackFaces; // 设置最大的人脸跟踪个数 default is 1
+
+@property (nonatomic, assign, readonly) int trackedFacesCount; // 跟踪到的人脸个数
+
+@property (nonatomic, assign) FUFaceProcessorDetectMode faceProcessorDetectMode; // 图像加载模式 default is FUFaceProcessorDetectModeVideo
+
+@property (nonatomic, assign) BOOL asyncTrackFace; //设置是否进行异步人脸跟踪
+
+//加载 AI bundle
++ (void)loadAIModeWithAIType:(FUAITYPE)type dataPath:(NSString *)dataPath;
+//卸载 AI bundle
++ (void)unloadAIModeForAIType:(FUAITYPE)type;
+//卸载所有 AI bundle
++ (void)unloadAllAIMode;
+
++ (BOOL)loadedAIType:(FUAITYPE)type;
+//加载舌头驱动
++ (void)loadTongueMode:(NSString *)modePath;
+//脸部类型 单独加载
++ (void)setTrackFaceAIType:(FUAITYPE)type;
+
++ (int)trackFaceWithInput:(FUTrackFaceInput *)trackFaceInput;
+// Reset ai model HumanProcessor's tracking state.
++ (void)resetHumanProcessor;
+//get ai model HumanProcessor's tracking result.
++ (int)aiHumanProcessorNums;
+```
+
+其他接口参考 FUAIKit.h
+
+
+
+## 功能模块: 功能模块加载的bundle 名称可以自己定义,示例代码名称根据自己定义的名称来加载
+
+### 美颜
+
+#### 初始化美颜
+
+使用 FUBeauty 类初始化美颜实例,并将美颜实例赋值给 FURenderKit 即可, 内部是同步线程串行队列处理,处理会耗时。外部可以自己用线程管理。
+
+```objective-c
+NSString *path = [[NSBundle mainBundle] pathForResource:@"face_beautification" ofType:@"bundle"];
+FUBeauty *beauty = [[FUBeauty alloc] initWithPath:path name:@"face_beautification"];
+[FURenderKit shareRenderKit].beauty = beauty;
+
+```
+
+#### 修改美颜参数
+
+可以直接修改 FUBeauty 的相关属性,也可以初始化一个新的美颜实例,修改好参数后直接赋值给 FURenderKit;修改属性示例如下,属性对应的含义详见FUBeauty.h 注释:
+
+```objective-c
+beauty.blurUseMask = NO;
+滤镜FileName 对应的value 值FURenderKit 已经做了对应的映射关系,直接调用即可
+beauty.filterLevel = 1;
+beauty.filterName = FUFilterOrigin;
+
+beauty.colorLevel = 0.3;
+beauty.redLevel = 0.3;
+beauty.blurLevel = 0.7*6;
+beauty.heavyBlur = 0;
+beauty.blurType = 2;
+
+beauty.sharpen = 0.2;
+beauty.eyeBright = 0.0;
+beauty.toothWhiten = 0.0;
+
+beauty.removePouchStrength = 0.0;
+beauty.removeNasolabialFoldsStrength = 0.0;
+
+beauty.faceShapeLevel = 1.0;
+beauty.changeFrames = 0;
+beauty.faceShape = 4;
+
+beauty.eyeEnlarging = 0.4;
+beauty.cheekThinning = 0.0;
+beauty.cheekV = 0.5;
+beauty.cheekNarrow = 0;
+beauty.cheekSmall = 0;
+beauty.intensityNose = 0.5;
+beauty.intensityForehead = 0.3;
+beauty.intensityMouth = 0.4;
+beauty.intensityChin = 0.3;
+beauty.intensityPhiltrum = 0.5;
+beauty.intensityLongNose = 0.5;
+beauty.intensityEyeSpace = 0.5;
+beauty.intensityEyeRotate = 0.5;
+beauty.intensitySmile = 0.0;
+beauty.intensityCanthus = 0.5;
+beauty.intensityCheekbones = 0;
+beauty.intensityLowerJaw= 0.0;
+beauty.intensityEyeCircle = 0.0;
+```
+
+
+
+### 贴纸
+
+使用 FUSticker或其子类初始化贴纸实例,FURenderKit 内部提供了一个 FUStickerContainer 类来管理贴纸,只需将贴纸实例添加、替换到 FUStickerContainer 实例即可实现贴纸的显示,然后可以掉用 FUStickerContainer 的删除接口移除贴纸效果。示例如下:
+
+```objective-c
+// 添加
+NSString *path = [[NSBundle mainBundle] pathForResource:@"sdlu" ofType:@"bundle"];
+FUSticker *sticker = [[FUSticker alloc] initWithPath:path name:@"sticker"];
+[[FURenderKit shareRenderKit].stickerContainer addSticker:sticker];
+
+// 替换
+NSString *path1 = [[NSBundle mainBundle] pathForResource:@"gaoshiqing" ofType:@"bundle"];
+FUSticker *sticker1 = [[FUSticker alloc] initWithPath:path1 name:@"sticker"];
+[[FURenderKit shareRenderKit].stickerContainer replaceSticker:sticker withSticker:sticker1 completion:nil];
+
+// 删除
+[[FURenderKit shareRenderKit].stickerContainer removeSticker:sticker1];
+```
+
+带属性的特殊贴纸说明:
+
+```objective-c
+1. 人像分割 FUAISegment - 外轮廓bundle 的用法
+NSString *path = [[NSBundle mainBundle] pathForResource:@"human_outline" ofType:@"bundle"];
+FUAISegment *outline = [FUAISegment alloc] initWithPath:path name:@"sticker"];
+outline.lineGap = 2.8; //轮廓分割线和人之间的间距
+outline.lineSize = 2.8; //轮廓分割线宽度
+outline.lineColor = FUColorMake(255/255.0, 180/255.0, 0.0, 0.0); //线的颜色
+[[FURenderKit shareRenderKit].stickerContainer addSticker:outline];
+
+1. 人像分割 FUAISegment - 自定义背景视频
+NSString *path = [[NSBundle mainBundle] pathForResource:@"bg_segment" ofType:@"bundle"];
+FUAISegment *segment = [FUAISegment alloc] initWithPath:path name:@"sticker"];
+segment.videoPath = @“背景视频路径”;//NSURL or NSString
+[segment startVideoDecode];
+//获取视频解析的第一帧图片
+UIImage *image = [segment readFirstFrame];
+[[FURenderKit shareRenderKit].stickerContainer replaceSticker:outline withSticker:segment completion:nil];
+
+1. 人像分割 FUAISegment - 自定义背景照片
+segment.setBackgroundImage = @"自定义图片";
+
+2. FUAnimoji - 表情
+NSString *path = [[NSBundle mainBundle] pathForResource:@"animoji" ofType:@"bundle"];
+FUAnimoji *animoji = [FUAnimoji alloc] initWithPath:path name:@"animoji"];
+animoji.flowEnable = YES; //卡通表情是否跟随人物移动而移动, YES,跟随, NO 不跟随
+
+3. FUGesture -- 手势
+NSString *path = [[NSBundle mainBundle] pathForResource:@"fugesture" ofType:@"bundle"];
+FUGesture *gesture = [FUGesture alloc] initWithPath:path name:@"animoji"];
+gesture.handOffY = YES; //可以单独调整比心的偏移量,> 0 向上,< 0 向下
+
+4. FUMusicFilter - 音乐滤镜
+NSString *path = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"bundle"];
+FUMusicFilter *music = [FUMusicFilter alloc] initWithPath:path name:@"music"];
+music.musicPath = "音乐文件路径";
+```
+
+
+
+
+
+### 海报换脸
+
+使用 FUPoster 初始化一个海报换脸实例,与其他功能不同,不需要将海报换脸实例赋值给 FURenderKit,直接使用海报换脸实例掉用相关接口处理图像即可
+
+示例代码:
+
+```objective-c
+[FUAIKit shareKit].maxTrackFaces = 4;
+
+[FUAIKit shareKit].faceProcessorDetectMode = 0;
+
+NSString *path = [[NSBundle mainBundle] pathForResource:@"change_face" ofType:@"bundle"];
+FUPoster *poster = [[FUPoster alloc] initWithPath:path name:@"change_face"];
+poster.delegate = "具体实现代理的类";
+
+[poster renderWithInputImage:"需要换脸的image" templateImage: "海报image"]];
+```
+
+#### 接口说明
+
+```objective-c
+/**
+ * inputImage 需要替换包含人脸图片
+ * templateImage 背景模板包含人脸的图片
+ */
+- (void)renderWithInputImage:(UIImage *)inputImage templateImage:(UIImage *)templateImage;
+
+/**
+ * 替换背景图片
+ */
+- (void)changeTempImage:(UIImage *)tempImage;
+
+/**
+ * 计算人脸区域
+ */
++ (CGRect)cacluteRectWithIndex:(int)index height:(int)originHeight width:(int)orighnWidth;
+
+/**
+ * 选择某张具体的人脸,
+ * faceId 通过 checkPosterWithFaceIds:rectsMap 获取
+ */
+- (void)chooseFaceID:(int)faceID;
+
+
+@protocol FUPosterProtocol
+
+@optional
+/**
+ * 检测输入照片人脸结果异常调用, 用于处理异常提示 UI逻辑.
+ * code: -1, 人脸异常(检测到人脸但是角度不对返回-1),0: 未检测到人脸
+ */
+- (void)poster:(FUPoster *)poster inputImageTrackErrorCode:(int)code;
+
+/**
+ * 检测海报模版背景图片人脸结果(异常调用)
+ * code: -1, 人脸异常(检测到人脸但是角度不对返回-1) 0: 未检测到人脸
+ */
+- (void)poster:(FUPoster *)poster tempImageTrackErrorCode:(int)code;
+
+/**
+ * 输入照片检测到多张人脸回调此方法,用于UI层绘制多人脸 UI
+ */
+- (void)poster:(FUPoster *)poster trackedMultiFaceInfos:(NSArray *)faceInfos;
+
+/**
+ * inputImage 和 蒙板image 合成的结果回调
+ * data : 海报蒙板和照片合成之后的图片数据
+ */
+
+- (void)poster:(FUPoster *)poster didRenderToImage:(UIImage *)image;
+
+/**
+ * 设置模板弯曲度,需要外部传入
+ * return double 对象
+ */
+- (NSNumber *)renderOfWarp;
+```
+
+
+
+## 其他模块
+
+FURenderKit 定义了不同功能的模型类,除了贴纸和海报换脸,其他功能的使用与美颜类似,用户只需要初始化对应功能的实例,并赋值给 FURenderKit ,然后通过修改对应示例的属性或调用相关接口即可实现功能的配置,具体文档待补充。
+
+
diff --git "a/docs/\347\247\273\345\212\250\347\253\257\346\226\207\346\241\243/Nama-\344\270\232\345\212\241\346\250\241\345\236\213\346\226\207\346\241\243\350\257\264\346\230\216.md" "b/docs/\347\247\273\345\212\250\347\253\257\346\226\207\346\241\243/Nama-\344\270\232\345\212\241\346\250\241\345\236\213\346\226\207\346\241\243\350\257\264\346\230\216.md"
new file mode 100644
index 00000000..3f947210
--- /dev/null
+++ "b/docs/\347\247\273\345\212\250\347\253\257\346\226\207\346\241\243/Nama-\344\270\232\345\212\241\346\250\241\345\236\213\346\226\207\346\241\243\350\257\264\346\230\216.md"
@@ -0,0 +1,874 @@
+
+
+----
+
+创建时间: 2020-01-22
+
+----
+
+### 1.0 Nama基础模型 FUItem
+
+* 说明: 关于nama所有item部分说明: 所有业务模块item底层都基于FUItem 来实现,FUItem 实现了和公司内部库通信功能,中间有一层缓存FUParamsCacheItem 主要为了缓存FUParam ,所以后续文档需要缓存的item都会继承于FUParamsCacheItem,不需要缓存则直接继承FUItem,后续不会在每个业务模块item 里面解释一遍。
+
+* Nama Item 的属性是在键值对基础上进行属性一层封装,更加方便的设置想要的功能。***如果设置项过多建议直接使用封装的键值对setParam或setParam:forName:paramType:方法设置,目前会针对美颜、美妆等封装一层key-value接口提供方便设置,后续会在每个item做详细说明***
+
+* FURenderKit.h 文件声明了所有NamaItem的属性或容器,实际业务开发在初始化之后赋值给 FURenderKit的对应属性值即可. 不用NamaItem 需要把FURenderKit对应的item 设置为nil,FURenderKit 内部就移除对应的效果
+
+ * 示例代码
+
+ ```objective-c
+ //美颜示例
+ NSString *path = [[NSBundle mainBundle] pathForResource:@"face_beautification" ofType:@"bundle"];
+ FUBeautiItem *item = [[FUBeautiItem alloc] initWithPath:path name:@"face_beautification" autoLoad:YES];
+ self.beautiyItem = item;
+ //加载item
+ [FURenderKit shareRenderKit].beautifulItem = item;
+
+ //移除item
+ [FURenderKit shareRenderKit].beautifulItem = nil;
+
+ //道具贴纸示例
+ NSString *path = [[NSBundle mainBundle] pathForResource:@"baozi" ofType:@"bundle"];
+ FUStickerItem *item = [[FUStickerItem alloc] initWithPath:path name:@"baozi" autoLoad:YES];
+ self.arMaskItem = item;
+ //添加到stickerContainer 这个道具贴纸容器中,内部会自动处理叠加道具,
+ [[FURenderKit shareRenderKit].stickerContainer addStickerItem:item];
+
+ //如果不希望叠加 需要移除对应的道具对象
+ [[FURenderKit shareRenderKit].stickerContainer removeStickerItem:item];
+
+ //按照加载路径移除
+ [[FURenderKit shareRenderKit].stickerContainer removeStickerItemForPath:item.path];
+
+ //释放所有加载的道具
+ [[FURenderKit shareRenderKit].stickerContainer removeAllSticks];
+
+ ```
+
+
+
+
+
+#### 1.1 接口说明 ####
+
+* 根据道具路径创建道具对象,可支持自动加载
+
+``` objective-c
+/**
+* @param path 道具路径
+* @param autoLoad 是否自动加载道具
+**/
+
++ (instancetype)initWithPath:(NSString *)path name:(nullable NSString *)name autoLoad:(BOOL)autoLoad;
+
+/**
+* 实例方法
+**/
+- (instancetype)itemWithPath:(NSString *)path name:(nullable NSString *)name autoLoad:(BOOL)autoLoad;
+```
+
+* 加载ItemID
+
+```objective-c
+带回调
+- (void)loadAsync:(void (^)(BOOL successed))completion;
+
+不带回调
+- (BOOL)loadSync;
+```
+
+
+
+* 设置键值对参数,封装成 FUParam 对象
+
+```objective-c
+
+- (int)setParam:(FUParam *)param;
+```
+
+
+
+* 参数名称具体可查询对应模块的[文档](http://192.168.0.118/quanlongli/FULiveDemo/tree/master/docs)
+
+```objective-c
+ 设置键值对参数
+
+ /**
+* @param param 参数值
+* @param name 参数名称
+
+- (int)setParam:(id)param forName:(NSString *)name paramType:(FUParamType)paramType;
+```
+
+
+
+* 根据参数名称和类型来获取当前参数值
+
+```
+\- (**id**)getParamForName:(NSString *)name paramType:(FUParamType)paramType;
+```
+
+#### 1.2 属性说明 ####
+
+| 属性名 | 字段类型 | 说明 |
+| ------------- | -------- | ------------------------------------------ |
+| name | NSString | 道具名称 |
+| path | NSString | 道具绝对路径 |
+| itemID | int | 只读,内部生成的道具ID |
+| loaded | BOOL | 是否已经加载 |
+| binded | BOOL | 是否已经绑定,用于绑定到其他道具的普通道具 |
+| supportARMode | BOOL | 是否支持 AR 模式 |
+
+____
+
+____
+
+### 2.0 美颜 FUBeautiItem ###
+
+* 2.1.0 说明: 美颜模块继承自FUParamsCacheItem, 美颜模块分为主体和三个类扩展: 美肤(skin)、美型(shapre)、滤镜(Filter), 需要证书秘钥包含该功能才可以使用。
+
+* 2.1.1 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| --------- | ---- | ------------------------------------------------------------ | ---------- |
+| heavyBlur | int | 朦胧磨皮开关,0为清晰磨皮,1为朦胧磨皮 | heavy_blur |
+| blurType | int | 此参数优先级比heavyBlur低,在使用时要将heavy_blur设为0,0 清晰磨皮 1 朦胧磨皮 2精细磨皮 | blur_type |
+
+____
+
+#### 2.2 美肤 FUBeautiItem (Skin) ####
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| ----------------------------- | ------ | ------------------------------------------------------------ | -------------------------------- |
+| blurLevel | double | 精细磨皮,磨皮程度,取值范围0.0-6.0,默认6.0 | blur_level |
+| colorLevel | double | 美白 取值范围 0.0-2.0,0.0为无效果,2.0为最大效果,默认值0.2 | color_level |
+| redLevel | double | 红润 取值范围 0.0-2.0,0.0为无效果,2.0为最大效果,默认值0.5 | red_level |
+| sharpen | double | 锐化 锐化程度,取值范围0.0-1.0,默认0.2 | sharpen |
+| eyeBright | double | 亮眼 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值1.0 亮眼为高级美颜功能,需要相应证书权限才能使用 | eye_bright |
+| toothWhiten | double | 美牙 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值1.0 美牙为高级美颜功能,需要相应证书权限才能使用 | tooth_whiten |
+| removePouchStrength | double | 去黑眼圈 范围0.0~1.0, 0.0为无效果,1.0最强,默认0.0 去黑眼圈为高级美颜功能,需要相应证书权限才能使用 | remove_pouch_strength |
+| removeNasolabialFoldsStrength | double | 去法令纹 范围0.0~1.0, 0.0为无效果,1.0最强,默认0.0 去法令纹为高级美颜功能,需要相应证书权限才能使用 | remove_nasolabial_folds_strength |
+
+____
+
+#### 2.3 美型 FUBeautiItem (Shap) ####
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| -------------------- | ------ | ------------------------------------------------------------ | -------------------- |
+| faceShape | int | 变形取值 0:女神变形 1:网红变形 2:自然变形 3:默认变形 4:精细变形 | face_shape |
+| changeFrames | int | 0为关闭 ,大于0开启渐变,值为渐变所需要的帧数 change_frames | change_frames |
+| faceShapeLevel | double | 美型的整体程度由face_shape_level参数控制 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值1.0 face_shape_level | face_shape_level |
+| cheekThinning | double | 瘦脸 瘦脸程度范围0.0-1.0 默认0.5 | cheek_thinning |
+| cheekV | double | v脸程度范围0.0-1.0 默认0.0 | cheek_v |
+| cheekNarrow | double | 窄脸程度范围0.0-1.0 默认0.0 | cheek_narrow |
+| cheekSmall | double | 小脸程度范围0.0-1.0 默认0.0 | cheek_small |
+| intensityCheekbones | double | 瘦颧骨程度范围0.0~1.0 1.0程度最强 默认0.0 | intensity_cheekbones |
+| intensityLowerJaw | double | 瘦下颌骨程度范围0.0~1.0 1.0程度最强 默认0.0 | intensity_lower_jaw |
+| eyeEnlarging | double | 大眼程度范围0.0-1.0 默认0.5 | eye_enlarging |
+| intensityChin | double | 下巴调整程度范围0.0-1.0,0-0.5是变小,0.5-1是变大 默认0.5 | intensity_chin |
+| intensityForehead | double | 额头调整程度范围0.0-1.0,0-0.5是变小,0.5-1是变大 默认0.5 | intensity_forehead |
+| intensityNose | double | 瘦鼻程度范围0.0-1.0 默认0.0 | intensity_nose |
+| intensityMouth | double | 嘴巴调整程度范围0.0-1.0,0-0.5是变大,0.5-1是变小 默认0.5 | intensity_mouth |
+| intensityCanthus | double | 开眼角程度范围0.0~1.0 1.0程度最强 默认0.0 | intensity_canthus |
+| intensityEyeSpace | double | 眼距调节范围0.0~1.0, 0.5-0.0变长,0.5-1.0变短 默认0.5 | intensity_eye_space |
+| intensityEyeRotate | double | 眼睛角度调节范围0.0~1.0, 0.5-0.0逆时针旋转,0.5-1.0顺时针旋转 默认0.5 | intensity_eye_rotate |
+| intensityLongNose | double | 鼻子长度调节范围0.0~1.0, 0.5-0.0变长,0.5-1.0变短 默认0.5 | intensity_long_nose |
+| intensityPhiltrum | double | 人中调节范围0.0~1.0, 0.5-1.0变长,0.5-0.0变短 默认0.5 | intensity_philtrum |
+| intensitySmile | double | 微笑嘴角程度范围0.0~1.0 1.0程度最强 默认0.0 | intensity_smile |
+| intensity_eye_circle | double | 圆眼程度范围0.0~1.0 1.0程度最强 | intensity_eye_circle |
+
+____
+
+#### 2.4 滤镜 ####
+
+* 属性说明
+
+| 属性名 | 类型 | 说明 | key |
+| ----------- | -------- | ------------------------------------------------------------ | ------------ |
+| filterName | NSString | 取值为一个字符串,默认值为 “origin” ,origin即为使用原图效果 | filter_name |
+| filterLevel | double | filter_level 取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值1.0 | filter_level |
+
+* 接口说明
+
+ key-value 设置属性
+
+ ```objective-c
+ - (void)setFilterValue:(double)value forKey:(FUFilter)filterKey;
+ ```
+
+ 通过key名称获取对应的value值
+
+ ````objective-c
+ - (double)filterValueForKey:(NSString *)filterForKey;
+ ````
+
+ 获取所有的key名称
+
+ ````objective-c
+ - (NSArray *)allFilterKeys;
+ ````
+
+* 滤镜键Key 可选范围
+
+ | Key |
+ | ------------ |
+ | origin |
+ | ziran1 |
+ | ziran2 |
+ | ziran3 |
+ | ziran4 |
+ | ziran5 |
+ | ziran6 |
+ | ziran7 |
+ | ziran8 |
+ | zhiganhui1 |
+ | zhiganhui2 |
+ | zhiganhui3 |
+ | zhiganhui4 |
+ | zhiganhui5 |
+ | zhiganhui6 |
+ | zhiganhui7 |
+ | zhiganhui8 |
+ | mitao1 |
+ | mitao2 |
+ | mitao3 |
+ | mitao4 |
+ | mitao5 |
+ | mitao6 |
+ | mitao7 |
+ | mitao8 |
+ | bailiang1 |
+ | bailiang2 |
+ | bailiang3 |
+ | bailiang4 |
+ | bailiang5 |
+ | bailiang6 |
+ | bailiang7 |
+ | fennen1 |
+ | fennen2 |
+ | fennen3 |
+ | fennen5 |
+ | fennen6 |
+ | fennen7 |
+ | fennen8 |
+ | lengsediao1 |
+ | lengsediao2 |
+ | lengsediao3 |
+ | lengsediao4 |
+ | lengsediao7 |
+ | lengsediao8 |
+ | lengsediao11 |
+ | nuansediao1 |
+ | nuansediao2 |
+ | gexing1 |
+ | gexing2 |
+ | gexing3 |
+ | gexing4 |
+ | gexing5 |
+ | gexing7 |
+ | gexing10 |
+ | gexing11 |
+ | xiaoqingxin1 |
+ | xiaoqingxin3 |
+ | xiaoqingxin4 |
+ | xiaoqingxin6 |
+ | heibai1 |
+ | heibai2 |
+ | heibai3 |
+ | heibai4 |
+
+
+
+----
+
+___
+
+### 3.0 美妆 (FUMakeUpItem)
+
+* 3.1.0 整体说明: 美妆模块包含组合妆和子妆,当业务层选中某组合装时候直接添加该组合妆对象(FUMakeUpSubject)实例赋值给美妆(FUMakeUpItem)实例的subjectItem属性即可。粉底、腮红、这些属性在美妆(FUMakeUpItem)实例上设置。
+* 3.1.1 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| ------------- | ---- | ------------------------------------------------------------ | --------------- |
+| isMakeUpOn | Int | 美妆开关,1开 0关 | is_makeup_on |
+| isClearMakeup | int | 在解绑妆容时是否清空除口红以外的妆容,0表示不清空,1表示清空,口红可由强度进行设置 | is_clear_makeup |
+| lipType | int | 口红类型 0雾面 2润泽 3珠光 6高性能(不支持双色) | lip_type |
+| isTwoColor | int | 口红双色开关,0为关闭,1为开启,如果想使用咬唇,开启双色开关,并且将makeup_lip_color2的值都设置为0 | is_two_color |
+| isFlipPoints | int | 点位镜像,0为关闭,1为开启 | is_flip_points |
+| browWarpType | int | 眉毛变形类型 0柳叶眉 1一字眉 2远山眉 3标准眉 4扶形眉 5日常风 6日系风 | brow_warp_type |
+| browWarp | int | 是否使用眉毛变形 ,1为开 0为关 | brow_warp |
+
+* 3.2 主题妆 FUMakeUpItem (Subject)
+
+ * 属性说明
+
+ | 属性名称 | 类型 | 说明 |
+ | ------------- | --------------- | ------------------------------------------------------------ |
+ | subjectItem | FUMakeUpSubject | 组合装对象,通过bundle文件路径生成,此bundle包含该妆的所有局部妆(眼影、眉毛等)资源 |
+ | texBrow | FUItem | 眉毛对象 |
+ | texEye1 | FUItem | 眼影1对象 |
+ | texEye2 | FUItem | 眼影2对象 |
+ | texEye3 | FUItem | 眼影3对象 |
+ | texEye4 | FUItem | 眼影4对象 |
+ | texPupil | FUItem | 美瞳对象 |
+ | texEyeLash | FUItem | 睫毛对象 |
+ | texEyeLiner | FUItem | 眼线对象 |
+ | texBlusher1 | FUItem | 腮红1对象 |
+ | texBlusher2 | FUItem | 腮红2对象 |
+ | texFoundation | FUItem | 粉底对象 |
+ | texHighlight | FUItem | 高光对象 |
+ | texShadow | FUItem | 阴影对象 |
+
+* 3.3,0 图层混合 FUMakeUpItem (blend)
+
+ * 属性说明
+
+ 统一说明: 所有眼妆和腮红妆容支持更改图层混合模式,现在的图层混合模式有两种,0为正片叠底,1为正常混合(alpha混合),2为叠加,3为柔光,默认为0。
+
+ | 属性名称 | 类型 | 说明 | key |
+ | ---------------- | ---- | ------------------- | ----------------------- |
+ | blendTexEye1 | int | 第1层眼影的混合模式 | blend_type_tex_eye |
+ | blendTexEye2 | int | 第2层眼影的混合模式 | blend_type_tex_eye2 |
+ | blendTexEye3 | int | 第3层眼影的混合模式 | blend_type_tex_eye3 |
+ | blendTexEye4 | int | 第4层眼影的混合模式 | blend_type_tex_eye4 |
+ | blendTexEyeLash | int | 睫毛的混合模式 | blend_type_tex_eyeLash |
+ | blendTexEyeLiner | int | 眼线的混合模式 | blend_type_tex_eyeLiner |
+ | blendTexBlusher1 | int | 第1层腮红的混合模式 | blend_type_tex_blusher |
+ | blendTexBlusher2 | int | 第2层腮红的混合模式 | blend_type_tex_blusher2 |
+ | blendTexTexPupil | int | 美瞳的混合模式 | blend_type_tex_pupil |
+
+
+
+* 3.4.0 子妆 FUMakeUpItem (Child)
+
+ * 3.4.1 属性说明
+
+ | 属性名称 | 类型 | 说明 | key |
+ | ------------------- | ------ | -------- | --------------------------- |
+ | intensityFoundation | double | 粉底强度 | makeup_intensity_foundation |
+ | intensityBlusher | double | 腮红强度 | makeup_intensity_blusher |
+ | intensityEye | double | 眼影强度 | makeup_intensity_eyeBrow |
+ | intensityEyelash | double | 睫毛强度 | makeup_intensity_eyelash |
+ | intensityHighlight | double | 高光强度 | makeup_intensity_highlight |
+ | intensityShadow | double | 阴影强度 | makeup_intensity_shadow |
+ | intensityPupil | double | 美瞳强度 | makeup_intensity_pupil |
+
+ * 3.4.2 接口说明
+
+ ````objective-c
+ /**
+ * 设置眉毛需 需要额外特殊处理,
+ * type : 眉毛变形类型 0柳叶眉 1一字眉 2远山眉 3标准眉 4扶形眉 5日常风 6日系风
+ * enable, 眉毛是否变形开关, 0 关闭变形,1 开启变形
+ */
+ - (void)setEyeBrowValue:(double)value
+ eyeBrowtype:(int)type
+ enable:(int)enable;
+ ````
+
+ ```objective-c
+ /**
+ * 口红特殊处理
+ * type: 0雾面 2润泽 3珠光 6高性能(不支持双色)
+ * enable 口红双色开关,0为关闭,1为开启,如果想使用咬唇,开启双色开关,并且将makeup_lip_color2的值都设置为0
+ */
+ - (void)setLipValue:(double)value
+ lipType:(int)type
+ enable:(int)enable
+ ```
+
+ ```objective-c
+ //键值对的形式设置 子妆的属性,主要是为了多个属性的情况下方便设置。效果和属性一致
+ - (void)setChildValue:(double)value forKey:(FUMakeUpChildStrengthKey)key;
+ ```
+
+ ```objective-c
+ //获取当前所有子妆强度key值数组
+ - (NSArray *)allMakeUpChildKeys;
+ ```
+
+ ***
+
+
+
+* 3.5.0 颜色 FUMakeUpItem (Color)
+
+ * 3.5.1 属性说明
+
+ | 属性名称 | 类型 | 说明 | key |
+ | --------------- | ------- | ------------------------------------------------------------ | ----------------------- |
+ | foundationColor | FUColor | 粉底调色参数,数组的第四个值(对应alpha)为0时,会关闭粉底的调色功能,大于0时会开启 | makeup_foundation_color |
+ | lipColor | FUColor | 为口红颜色 | makeup_lip_color |
+ | lipColor2 | FUColor | 如果is_two_color为1,会启用这个颜色,外圈颜色为makeup_lip_color2,内圈颜色为makeup_lip_color,如果makeup_lip_color2都为0,则外圈为透明,即为咬唇效果 | makeup_lip_color2 |
+ | blusherColor | FUColor | 第一层腮红调色参数,数组的第四个值(对应alpha)为0时,会关闭这一层腮红的调色功能,大于0时会开启 | makeup_blusher_color |
+ | eyeBrowColor | FUColor | 眉毛调色参数,数组的第四个值(对应alpha)为0时,会关闭眉毛的调色功能,大于0时会开启 | makeup_eyeBrow_color |
+ | eyeLinerColor | FUColor | 眼线调色参数,数组的第四个值(对应alpha)为0时,会关闭眼线的调色功能,大于0时会开启 | makeup_eyeLiner_color |
+ | eyelashColor | FUColor | 睫毛调色参数,数组的第四个值(对应alpha)为0时,会关闭睫毛的调色功能,大于0时会开启 | makeup_eyelash_color |
+ | highlightColor | FUColor | 高光调色参数,数组的第四个值(对应alpha)为0时,会关闭高光的调色功能,大于0时会开启 | makeup_highlight_color |
+ | shadowColor | FUColor | 阴影调色参数,数组的第四个值(对应alpha)为0时,会关闭阴影的调色功能,大于0时会开启 | makeup_shadow_color |
+ | pupilColor | FUColor | 美瞳调色参数,数组的第四个值(对应alpha)为0时,会关闭美瞳的调色功能,大于0时会开启 | makeup_pupil_color |
+
+ * 3.5.2 接口说明
+
+ ```objective-c
+ /**
+ * 眼影特殊处理
+ * //如果is_two_color为1,会启用这个颜色,外圈颜色为makeup_lip_color2,内圈颜色为makeup_lip_color,如果makeup_lip_color2都为0,则外圈为透明,即为咬唇效果
+ * makeup_eye_color:[0.0,0.0,0.0,0.0],//第一层眼影调色参数,数组的第四个值(对应alpha)为0时,会关闭这层的调色功能,大于0时会开启
+ * makeup_eye_color2:[0.0,0.0,0.0,0.0],//第二层眼影调色参数,数组的第四个值(对应alpha)为0时,会关闭这层的调色功能,大于0时会开启
+ * makeup_eye_color3:[0.0,0.0,0.0,0.0],//第三层眼影调色参数,数组的第四个值(对应alpha)为0时,会关闭这层的调色功能,大于0时会开启
+ * makeup_eye_color4:[0.0,0.0,0.0,0.0],//第四层眼影调色参数,数组的第四个值(对应alpha)为0时,会关闭这层的调色功能,大于0时会开启
+ */
+ - (void)setEyeColor:(FUColor)color
+ color1:(FUColor)color1
+ color2:(FUColor)color2
+ color3:(FUColor)color3;
+ ```
+
+ ```objective-c
+ //键值对的形式设置颜色属性
+ - (void)setColor:(FUColor)color forKey:(FUMakeUpColor)colorKey
+ ```
+
+ ```objective-c
+ //获取当前所有colorKey数组
+ - (NSArray *)allFUMakeUpColorKeys;
+ ```
+
+ * 3.6.0 人脸点位 FULightMakeUpItem (landMark)
+
+ * 属性说明
+
+ | 属性名称 | 类型 | 说明 | key |
+ | ------------- | ---------- | ------------------------------------------------------------ | --------------- |
+ | isUserFix | int | 这个参数控制是否使用修改过得landmark点,如果设为1为使用,0为不使用 | is_use_fix |
+ | fixMakeUpData | FULandMark | 这个参数为一个数组,需要客户端传递一个数组进去,传递的数组的长度为 150*人脸数,也就是将所有的点位信息存储的数组中传递进来。 | fix_makeup_data |
+
+
+
+***
+
+***
+
+### 4.0 轻美妆 (FULightMakeUpItem)
+
+* 4.1.0属性说明
+
+ | 属性名称 | 类型 | 说明 | key |
+ | --------------- | ---- | ------------------------------------------------------------ | --------------- |
+ | isMakeUpOn | int | 美妆开关 1 开 0 关 | is_makeup_on |
+ | lipType | int | 口红类型 0雾面 2润泽 3珠光 6高性能(不支持双色) | lip_type |
+ | isTwoColor | int | 口红双色开关,0为关闭,1为开启,如果想使用咬唇,开启双色开关,并且将makeup_lip_color2的值都设置为0 | is_two_color |
+ | makeup_lip_mask | int | 嘴唇优化效果开关,1 开 0 关 | makeup_lip_mask |
+
+* 接口说明
+
+ ```objective-c
+ //图片纹理形式添加,底部调用fuCreateTexForItem接口
+ - (void)setLightMakeUpImage:(UIImage *)image forKey:(FULightMakeUpTextureKey)key;
+ ```
+
+ ```objective-c
+ //获取所有纹理图片key数组
+ - (NSArray *)allImageMakeUpKeys;
+ ```
+
+* 4.2.0 子妆 FULightMakeUpItem (Child)
+
+ * 4.2.1 属性说明
+
+ | 属性说明 | 类型 | 说明 | key |
+ | ----------------- | ------ | -------- | ------------------------- |
+ | intensityBlusher | double | 腮红强度 | makeup_intensity_blusher |
+ | intensityEye | double | 眼影强度 | makeup_intensity_eye |
+ | intensityEyeLiner | double | 眼线强度 | makeup_intensity_eyeLiner |
+ | intensityEyelash | double | 睫毛强度 | makeup_intensity_eyelash |
+ | intensityPupil | double | 美瞳强度 | makeup_intensity_pupil |
+ | intensityEyeBrow | double | 眉毛强度 | makeup_intensity_eyeBrow |
+
+ * 4.2.2 接口说明
+
+ ```objective-c
+ /**
+ * 口红特殊处理
+ * type: 0雾面 2润泽 3珠光 6高性能(不支持双色)
+ * enable 口红双色开关,0为关闭,1为开启,如果想使用咬唇,开启双色开关,并且将makeup_lip_color2的值都设置为0
+ */
+ - (void)setLipType:(int)type enable:(int)enable;
+ ```
+
+* 4.3.0 FULightMakeUpItem (Color)
+
+ * 属性说明
+
+ | 属性说明 | 类型类型 | 说明 | key |
+ | -------------- | -------- | --------------------------------------- | ---------------- |
+ | makeUpLipColor | double | [0,0,0,0] //长度为4的数组,rgba颜色值 | makeup_lip_color |
+
+
+
+* 4.4.0 人脸点位 FUMakeUpItem (landMark)
+
+ * 属性说明
+
+ | 属性名称 | 类型 | 说明 | key |
+ | ------------- | ---------- | ------------------------------------------------------------ | --------------- |
+ | isUserFix | int | 这个参数控制是否使用修改过得landmark点,如果设为1为使用,0为不使用 | is_use_fix |
+ | fixMakeUpData | FULandMark | 这个参数为一个数组,需要客户端传递一个数组进去,传递的数组的长度为 150*人脸数,也就是将所有的点位信息存储的数组中传递进来。 | fix_makeup_data |
+
+
+
+***
+
+***
+
+### 5.0 海报换脸 FUPoster ###
+
+* 接口说明
+
+```objective-c
+/**
+ * inputImage 需要替换包含人脸图片
+ * templateImage 背景模板包含人脸的图片
+ * 特殊说明:该方法内部会自动检测需要替换的图像inputImage 和 templateImage海报模板的图片人脸是否合法,如果都合法并且都只有一张人脸,自动进行人脸替换合成操作,调用者可以直接在renderResultWithImageData代理方法里面直接获取到已经渲染融合后的UIImage,
+ 其他情况(多人脸)会根据协议FUPosterProtocol的回调方法进行业务处理。
+ */
+- (void)renderWithInputImage:(UIImage *)inputImage templateImage:(UIImage *)templateImage
+```
+
+
+
+```objective-c
+/**
+ * 替换海报蒙版背景图片
+ */
+- (void)changeTempImage:(UIImage *)tempImage;
+
+```
+
+```objective-c
+/**
+ * 选择某张具体的人脸,
+ * faceId 通过 checkPosterWithFaceIds:rectsMap获取
+ */
+- (void)chooseFaceIds:(int)faceId;
+```
+
+```objective-c
+/**
+ * 特殊蒙板需要设置弯曲度
+ */
+@property (nonatomic, copy) void(^WarpBlock)(NSNumber *warp);
+```
+
+```objective-c
+/**
+ * 检测输入照片人脸结果异常调用, 用于处理异常提示 UI逻辑.
+ * code: -1, 人脸异常(检测到人脸但是角度不对返回-1),0: 未检测到人脸
+ */
+- (void)checkInputFaceWithResultCode:(int)code;
+```
+
+```objective-c
+/**
+ * 输入照片检测到多张人脸回调此方法,用于UI层绘制多人脸 UI
+ */
+- (void)checkPosterWithFaceInfos:(NSArray *)faceInfos;
+```
+
+```objective-c
+/**
+ * 检测海报模版背景图片人脸结果(异常调用)
+ * code: -1, 人脸异常(检测到人脸但是角度不对返回-1) 0: 未检测到人脸
+ */
+- (void)checkTempImageWithResultCode:(int)code;
+```
+
+```objective-c
+/**
+ * inputImage图片 和 海报蒙板图片合成的结果回调
+ * data : inputImage图片和海报蒙板图片合成之后的图片数据
+ */
+- (void)renderResultWithImageData:(UIImage *)data;
+```
+
+***
+
+***
+
+### 6.0 绿幕 FUGreenScreenItem
+
+* 接口说明
+
+```objective-c
+/**
+ * 根据传入的图进和点位进行取色,获取到的颜色需要生效直接设置 self.keyColor
+ */
++ (UIColor *)pixelColorWithmage:(UIImage *)originImage point:(CGPoint)point;
+```
+
+```objective-c
+/**
+ * 根据传入的CVPixelBufferRef和点位进行取色
+ */
++ (UIColor *)pixelColorWithPixelBuffer:(CVPixelBufferRef)buffer point:(CGPoint)point;
+```
+
+```objective-c
+/**
+ * 绿幕背景视频设置,内部逐帧解析渲染。
+ */
+- (void)setUpVideoDecodeWithUrl:(NSURL *)url;
+
+```
+
+```objective-c
+/**
+ * 取消视频播放,内部停止渲染视频帧
+ */
+- (void)stopVideoDecode;
+```
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| ------------ | ------- | ------------------------------------------------------------ | ---------------- |
+| keyColor | FUColor | 设置绿幕取色, 颜色值按照十六进制大小设置 ex: RGBA (255.0, 255.0, 255.0, 1.0) | key_color |
+| chromaThres | double | | chroma_thres |
+| chromaThrest | double | | chroma_thres_T |
+| alphal | double | | alpha_L |
+| center | CGPoint | 当前图片偏移量 | start_x、start_y |
+| scale | float | 图片宽高放大值 | end_x、end_y |
+| rotationMode | int | 当前设备方向0、1、2、3 | rotation_mode |
+| isBgra | int | | is_bgra |
+| cutouting | BOOL | 当前是否正在进行抠图,抠图就停止绿慕渲染 | |
+
+***
+
+***
+
+### 7.0 道具贴纸 FUStickerItem
+
+* 说明
+
+ 无特殊设置项的道具直接使用此类实例化
+
+ FUMusicFilterItem音乐滤镜、FUAnimojiItem 表情、FUGestureItem手势道具、FUAISegmentItem 人像分割 用各自具体子类实例化
+
+***
+
+***
+
+### 8.0 音乐滤镜 FUMusicFilterItem :FUStickerItem
+
+* 接口说明
+
+```objective-c
+/**
+ * 立即播放音乐
+ */
+- (void)playWithMusicName:(NSString *)music;
+```
+
+```objective-c
+/**
+ * 设置音乐名称,但不播放,等到乐滤镜在底层苦渲染时自动播放音乐
+ * 同步音乐和渲染效果
+ */
+- (void)setMusicName:(NSString *)music;
+```
+
+```objective-c
+/**
+ * 播放当前已经设置的音乐
+ */
+- (void)play;
+
+/**
+ * 继续播放
+ */
+- (void)resume;
+/**
+ * 停止播放
+ */
+- (void)stop;
+/**
+ * 暂停
+ */
+- (void)pause;
+/**
+ * 获取播放进度
+ */
+- (float)playProgress;
+/**
+ * 获取当前媒体播放时间
+ */
+- (NSTimeInterval)currentTime;
+```
+
+***
+
+***
+
+### 9.0 表情 FUAnimojiItem
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| ---------- | ---- | ---------------- | ------------------------------------------------ |
+| flowEnable | int | 表情是否跟随人脸 | @"{\"thing\":\"\",\"param\":\"follow\"}" |
+
+***
+
+***
+
+### 10.0 手势道具 FUGestureItem
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| -------- | ------ | ---------------------- | -------- |
+| rotMode | double | 设备方向参数 | rotMode |
+| handOffY | double | 调整手部比星的位置参数 | handOffY |
+
+***
+
+***
+
+### 11.0 人像分割 FUAISegmentItem
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| ---------- | ---- | -------------- | ----------- |
+| cameraMode | int | 设置相机前后置 | camera_mode |
+
+***
+
+***
+
+### 12.0 道具叠加容器 FUStickerContainer
+
+* 接口说明
+
+```objective-c
+/**
+ * 添加item,移除当前已经加载的所有item
+ * flag: YES 移除,NO 叠加(不移除)
+ */
+- (void)addStickerItem:(FUStickerItem *)item removeCurrent:(BOOL)flag;
+/**
+* 单个FUStickerItem操作接口
+* 内部已经加锁,外部无序需处理
+*/
+- (void)addStickerItem:(FUStickerItem *)item;
+- (void)removeStickerItem:(FUStickerItem *)item;
+- (void)updateStickerItem:(FUStickerItem *)item;
+//按照路径移除
+- (void)removeStickerItemForPath:(NSString *)itemPath;
+```
+
+```objective-c
+/**
+* 多个FUStickerItem操作接口
+* 内部已经加锁,外部无序需处理
+*/
+- (void)addStickerItems:(NSArray *)items;
+- (void)removeStickerItems:(NSArray *)items;
+- (void)updateStickerItems:(NSArray *)items;
+- (void)removeStickerItemsForPaths:(NSArray *)itemPaths;
+```
+
+```objective-c
+/**
+* 移除所有已经添加的FUStickerItem
+* 内部已经枷锁,外部无需处理
+*/
+- (void)removeAllSticks;
+/**
+* 获取所有已经添加的FUStickerItem
+*/
+- (NSArray *)allStickerItemItems;
+```
+
+***
+
+***
+
+### 13.0 动漫滤镜 FUAnimationFilterItem
+
+* 接口说明
+
+| 属性名称 | 类型 | 说明 | key |
+| -------- | ------ | -------------------------------------- | ----- |
+| style | double | 范围 0.0 - 7.0,对应不同的动漫滤镜效果 | style |
+
+* style 值介绍
+
+ | style | Value |
+ | ----- | ---------------------- |
+ | -1 | 移除滤镜,使用原图效果 |
+ | 0 | 动漫 |
+ | 1 | 素描 |
+ | 2 | 人像 |
+ | 3 | 油画 |
+ | 4 | 沙画 |
+ | 5 | 钢笔画 |
+ | 6 | 铅笔画 |
+ | 7 | 涂鸦 |
+
+***
+
+***
+
+### 14.0 美发 FUHairItem
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| -------------- | ---------- | ------------------------------------------------------------ | ---------------------- |
+| index | int | 单色美发道具 index 对应的值范围 0 - 7,渐变色美发道具,index对应的值范围 0 - 4 | Index |
+| strength | double | 0对应无效果,1对应最强效果,中间连续过渡。 | Strength |
+| normalColor | FULABColor | 内部会分别设置LAB颜色色值 | Col_L、Col_A、Col_B |
+| shine | double | 正常头发的亮度值 | Shine |
+| gradientColor0 | FULABColor | 渐变色头发颜色设置,内部会分别设置LAB颜色色值 | Col0_L、Col0_A、Col0_B |
+| gradientColor1 | FULABColor | | Col1_L、Col1_A、Col1_B |
+| shine0 | double | | Shine0 |
+| shine1 | double | | Shine1 |
+
+***
+
+***
+
+### 15.0 美体 FUBodyBeautyItem
+
+* 属性说明
+
+| 属性名称 | 类型 | 说明 | key |
+| -------------------- | ------ | ------------------------------------------------------------ | -------------------- |
+| bodySlimStrength | double | 瘦身:0.0表示强度为0,值越大,强度越大,瘦身效果越明显,默认为0.0 | bodySlimStrength |
+| LegSlimStrength | double | 长腿:0.0表示强度为0,值越大,腿越长,默认为0.0 | LegSlimStrength |
+| WaistSlimStrength | double | 瘦腰:0.0表示强度为0,值越大,腰越细,默认为0.0 | WaistSlimStrength |
+| ShoulderSlimStrength | double | 美肩:0.5表示强度为0,0.5到1.0,值越大,肩膀越宽,0.5到0.0,值越小,肩膀越窄,0.5为默认值 | ShoulderSlimStrength |
+| HipSlimStrength | double | 美臀:0.0表示强度为0,值越大,强度越大, 提臀效果越明显,默认为0.0 | HipSlimStrength |
+| clearSlim | int | 重置:清空所有的美体效果,恢复为默认值 | clearSlim |
+| Debug | int | 是否开启debug点位,0表示关闭,1表示开启,默认关闭 | Debug |
+| HeadSlim | double | 小头:0.0表示强度为0,值越大,小头效果越明显,默认为0.0 | HeadSlim |
+| orientation | int | 方向参数 取值范围 0 - 3 | Orientation |
+
+***
+
+***
+
+### 16.0 动作识别 FUActionRecognition
+
+* 直接初始化实例即可,无需设置额外参数
+
+
+
+
+