diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 8b63abba..00000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index e39c2226..0fcc7b58 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,68 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore -FULiveDemo/.DS_Store +## Build generated +build/ +DerivedData/ -*/xcuserdata/* +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ -*.xcuserstate -*.DS_Store -FULiveDemo/DemoCode/.DS_Store +## Other +*.moved-aside +*.xccheckout +*.xcscmblueprint +.DS_Store +*/.DS_Store -FULiveDemo/DemoCode/.DS_Store +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM -FULiveDemo/Faceunity/.DS_Store +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace -FULiveDemo/Faceunity/FaceUnity-SDK-iOS/.DS_Store -fastlane/* -Gemfile -Gemfile.lock -FULiveDemo.ipa -FULiveDemo.app.dSYM.zip +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ diff --git a/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.pbxproj b/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.pbxproj new file mode 100644 index 00000000..24b0ae1b --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.pbxproj @@ -0,0 +1,546 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + E30500B42891364700C9408B /* FUBeautySkinViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E30500B22891364700C9408B /* FUBeautySkinViewModel.h */; }; + E30500B52891364700C9408B /* FUBeautySkinViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E30500B32891364700C9408B /* FUBeautySkinViewModel.m */; }; + E30500B82891365300C9408B /* FUBeautyShapeViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E30500B62891365300C9408B /* FUBeautyShapeViewModel.h */; }; + E30500B92891365300C9408B /* FUBeautyShapeViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E30500B72891365300C9408B /* FUBeautyShapeViewModel.m */; }; + E32C6DCE2877DEDC008A9C08 /* FUBeautySkinModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E32C6DCC2877DEDC008A9C08 /* FUBeautySkinModel.h */; }; + E32C6DCF2877DEDC008A9C08 /* FUBeautySkinModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E32C6DCD2877DEDC008A9C08 /* FUBeautySkinModel.m */; }; + E32C6DD22877DEEC008A9C08 /* FUBeautyShapeModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E32C6DD02877DEEC008A9C08 /* FUBeautyShapeModel.h */; }; + E32C6DD32877DEEC008A9C08 /* FUBeautyShapeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E32C6DD12877DEEC008A9C08 /* FUBeautyShapeModel.m */; }; + E32C6DD62877E114008A9C08 /* FUBeautyShapeView.h in Headers */ = {isa = PBXBuildFile; fileRef = E32C6DD42877E114008A9C08 /* FUBeautyShapeView.h */; }; + E32C6DD72877E114008A9C08 /* FUBeautyShapeView.m in Sources */ = {isa = PBXBuildFile; fileRef = E32C6DD52877E114008A9C08 /* FUBeautyShapeView.m */; }; + E32D08E928758C5600884AE5 /* FUBeautyComponentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E32D08E828758C5600884AE5 /* FUBeautyComponentManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E32D09192876CEF300884AE5 /* FUBeautyFilterViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E32D09172876CEF300884AE5 /* FUBeautyFilterViewModel.h */; }; + E32D091A2876CEF300884AE5 /* FUBeautyFilterViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E32D09182876CEF300884AE5 /* FUBeautyFilterViewModel.m */; }; + E32D091D2876CF0F00884AE5 /* FUBeautyFilterModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E32D091B2876CF0F00884AE5 /* FUBeautyFilterModel.h */; }; + E32D091E2876CF0F00884AE5 /* FUBeautyFilterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E32D091C2876CF0F00884AE5 /* FUBeautyFilterModel.m */; }; + E32D09222876CFDE00884AE5 /* beauty_filter.json in Resources */ = {isa = PBXBuildFile; fileRef = E32D09212876CFDE00884AE5 /* beauty_filter.json */; }; + E32D09242876D01C00884AE5 /* beauty_skin.json in Resources */ = {isa = PBXBuildFile; fileRef = E32D09232876D01C00884AE5 /* beauty_skin.json */; }; + E32D09262876D02E00884AE5 /* beauty_shape.json in Resources */ = {isa = PBXBuildFile; fileRef = E32D09252876D02E00884AE5 /* beauty_shape.json */; }; + E33834A12861772B0023482D /* FUBeautySkinView.h in Headers */ = {isa = PBXBuildFile; fileRef = E338349F2861772B0023482D /* FUBeautySkinView.h */; }; + E33834A22861772B0023482D /* FUBeautySkinView.m in Sources */ = {isa = PBXBuildFile; fileRef = E33834A02861772B0023482D /* FUBeautySkinView.m */; }; + E33834A52861838A0023482D /* FUBeautyStyleModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E33834A32861838A0023482D /* FUBeautyStyleModel.h */; }; + E33834A62861838A0023482D /* FUBeautyStyleModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E33834A42861838A0023482D /* FUBeautyStyleModel.m */; }; + E33834A8286186880023482D /* beauty_style.json in Resources */ = {isa = PBXBuildFile; fileRef = E33834A7286186880023482D /* beauty_style.json */; }; + E33834AB286192A60023482D /* FUBeautyStyleViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E33834A9286192A60023482D /* FUBeautyStyleViewModel.h */; }; + E33834AC286192A60023482D /* FUBeautyStyleViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E33834AA286192A60023482D /* FUBeautyStyleViewModel.m */; }; + E33834BA2861BE8C0023482D /* FUBeautyFilterView.h in Headers */ = {isa = PBXBuildFile; fileRef = E33834B82861BE8C0023482D /* FUBeautyFilterView.h */; }; + E33834BB2861BE8C0023482D /* FUBeautyFilterView.m in Sources */ = {isa = PBXBuildFile; fileRef = E33834B92861BE8C0023482D /* FUBeautyFilterView.m */; }; + E33834BE2861BE990023482D /* FUBeautyStyleView.h in Headers */ = {isa = PBXBuildFile; fileRef = E33834BC2861BE990023482D /* FUBeautyStyleView.h */; }; + E33834BF2861BE990023482D /* FUBeautyStyleView.m in Sources */ = {isa = PBXBuildFile; fileRef = E33834BD2861BE990023482D /* FUBeautyStyleView.m */; }; + E34C47EE285338080040093C /* FUBeautyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = E34C47ED285338080040093C /* FUBeautyComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E34C47FC2853381E0040093C /* FUBeautyDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = E34C47F52853381E0040093C /* FUBeautyDefine.h */; }; + E34C4804285338550040093C /* FUBeautyComponent.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E34C4803285338550040093C /* FUBeautyComponent.xcassets */; }; + E34C48052853387A0040093C /* FUBeautyComponent.strings in Resources */ = {isa = PBXBuildFile; fileRef = E34C48072853387A0040093C /* FUBeautyComponent.strings */; }; + E34C4831285347100040093C /* FUBeautyComponentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E34C482F285347100040093C /* FUBeautyComponentManager.m */; }; + E3618FEC28583B9B00E7D8D2 /* FUBeautyDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = E3618FEB28583B9B00E7D8D2 /* FUBeautyDefine.m */; }; + E369F8D028D851550036AC5A /* FURenderKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8CF28D851550036AC5A /* FURenderKit.framework */; }; + E3DC948D28900EE60016C9B1 /* FUCommonUIComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E338349B286173C10023482D /* FUCommonUIComponent.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + E30500B22891364700C9408B /* FUBeautySkinViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautySkinViewModel.h; sourceTree = ""; }; + E30500B32891364700C9408B /* FUBeautySkinViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautySkinViewModel.m; sourceTree = ""; }; + E30500B62891365300C9408B /* FUBeautyShapeViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyShapeViewModel.h; sourceTree = ""; }; + E30500B72891365300C9408B /* FUBeautyShapeViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyShapeViewModel.m; sourceTree = ""; }; + E32C6DCC2877DEDC008A9C08 /* FUBeautySkinModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautySkinModel.h; sourceTree = ""; }; + E32C6DCD2877DEDC008A9C08 /* FUBeautySkinModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautySkinModel.m; sourceTree = ""; }; + E32C6DD02877DEEC008A9C08 /* FUBeautyShapeModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyShapeModel.h; sourceTree = ""; }; + E32C6DD12877DEEC008A9C08 /* FUBeautyShapeModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyShapeModel.m; sourceTree = ""; }; + E32C6DD42877E114008A9C08 /* FUBeautyShapeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyShapeView.h; sourceTree = ""; }; + E32C6DD52877E114008A9C08 /* FUBeautyShapeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyShapeView.m; sourceTree = ""; }; + E32D08E828758C5600884AE5 /* FUBeautyComponentManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBeautyComponentManager.h; sourceTree = ""; }; + E32D09172876CEF300884AE5 /* FUBeautyFilterViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyFilterViewModel.h; sourceTree = ""; }; + E32D09182876CEF300884AE5 /* FUBeautyFilterViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyFilterViewModel.m; sourceTree = ""; }; + E32D091B2876CF0F00884AE5 /* FUBeautyFilterModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyFilterModel.h; sourceTree = ""; }; + E32D091C2876CF0F00884AE5 /* FUBeautyFilterModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyFilterModel.m; sourceTree = ""; }; + E32D09212876CFDE00884AE5 /* beauty_filter.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = beauty_filter.json; sourceTree = ""; }; + E32D09232876D01C00884AE5 /* beauty_skin.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = beauty_skin.json; sourceTree = ""; }; + E32D09252876D02E00884AE5 /* beauty_shape.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = beauty_shape.json; sourceTree = ""; }; + E338349B286173C10023482D /* FUCommonUIComponent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = FUCommonUIComponent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E338349F2861772B0023482D /* FUBeautySkinView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautySkinView.h; sourceTree = ""; }; + E33834A02861772B0023482D /* FUBeautySkinView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautySkinView.m; sourceTree = ""; }; + E33834A32861838A0023482D /* FUBeautyStyleModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyStyleModel.h; sourceTree = ""; }; + E33834A42861838A0023482D /* FUBeautyStyleModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyStyleModel.m; sourceTree = ""; }; + E33834A7286186880023482D /* beauty_style.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = beauty_style.json; sourceTree = ""; }; + E33834A9286192A60023482D /* FUBeautyStyleViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyStyleViewModel.h; sourceTree = ""; }; + E33834AA286192A60023482D /* FUBeautyStyleViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyStyleViewModel.m; sourceTree = ""; }; + E33834B82861BE8C0023482D /* FUBeautyFilterView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyFilterView.h; sourceTree = ""; }; + E33834B92861BE8C0023482D /* FUBeautyFilterView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyFilterView.m; sourceTree = ""; }; + E33834BC2861BE990023482D /* FUBeautyStyleView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyStyleView.h; sourceTree = ""; }; + E33834BD2861BE990023482D /* FUBeautyStyleView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyStyleView.m; sourceTree = ""; }; + E34C47EA285338080040093C /* FUBeautyComponent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FUBeautyComponent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E34C47ED285338080040093C /* FUBeautyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyComponent.h; sourceTree = ""; }; + E34C47F52853381E0040093C /* FUBeautyDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBeautyDefine.h; sourceTree = ""; }; + E34C4803285338550040093C /* FUBeautyComponent.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = FUBeautyComponent.xcassets; sourceTree = ""; }; + E34C48062853387A0040093C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FUBeautyComponent.strings; sourceTree = ""; }; + E34C4808285338920040093C /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FUBeautyComponent.strings"; sourceTree = ""; }; + E34C482F285347100040093C /* FUBeautyComponentManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyComponentManager.m; sourceTree = ""; }; + E3618FEB28583B9B00E7D8D2 /* FUBeautyDefine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyDefine.m; sourceTree = ""; }; + E369F8CF28D851550036AC5A /* FURenderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FURenderKit.framework; path = ../FULiveDemo/FURenderKit/FURenderKit.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E34C47E7285338080040093C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E369F8D028D851550036AC5A /* FURenderKit.framework in Frameworks */, + E3DC948D28900EE60016C9B1 /* FUCommonUIComponent.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + E338349A286173C10023482D /* Frameworks */ = { + isa = PBXGroup; + children = ( + E369F8CF28D851550036AC5A /* FURenderKit.framework */, + E338349B286173C10023482D /* FUCommonUIComponent.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E34C47E0285338080040093C = { + isa = PBXGroup; + children = ( + E34C47EC285338080040093C /* FUBeautyComponent */, + E34C47EB285338080040093C /* Products */, + E338349A286173C10023482D /* Frameworks */, + ); + sourceTree = ""; + }; + E34C47EB285338080040093C /* Products */ = { + isa = PBXGroup; + children = ( + E34C47EA285338080040093C /* FUBeautyComponent.framework */, + ); + name = Products; + sourceTree = ""; + }; + E34C47EC285338080040093C /* FUBeautyComponent */ = { + isa = PBXGroup; + children = ( + E34C47F42853381E0040093C /* Model */, + E34C47F92853381E0040093C /* View */, + E34C47F62853381E0040093C /* ViewModel */, + E3A787302859AB0000FBDAFF /* Resource */, + E34C47F52853381E0040093C /* FUBeautyDefine.h */, + E3618FEB28583B9B00E7D8D2 /* FUBeautyDefine.m */, + E32D08E828758C5600884AE5 /* FUBeautyComponentManager.h */, + E34C482F285347100040093C /* FUBeautyComponentManager.m */, + E34C47ED285338080040093C /* FUBeautyComponent.h */, + ); + path = FUBeautyComponent; + sourceTree = ""; + }; + E34C47F42853381E0040093C /* Model */ = { + isa = PBXGroup; + children = ( + E32C6DCC2877DEDC008A9C08 /* FUBeautySkinModel.h */, + E32C6DCD2877DEDC008A9C08 /* FUBeautySkinModel.m */, + E32C6DD02877DEEC008A9C08 /* FUBeautyShapeModel.h */, + E32C6DD12877DEEC008A9C08 /* FUBeautyShapeModel.m */, + E32D091B2876CF0F00884AE5 /* FUBeautyFilterModel.h */, + E32D091C2876CF0F00884AE5 /* FUBeautyFilterModel.m */, + E33834A32861838A0023482D /* FUBeautyStyleModel.h */, + E33834A42861838A0023482D /* FUBeautyStyleModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E34C47F62853381E0040093C /* ViewModel */ = { + isa = PBXGroup; + children = ( + E30500B22891364700C9408B /* FUBeautySkinViewModel.h */, + E30500B32891364700C9408B /* FUBeautySkinViewModel.m */, + E30500B62891365300C9408B /* FUBeautyShapeViewModel.h */, + E30500B72891365300C9408B /* FUBeautyShapeViewModel.m */, + E32D09172876CEF300884AE5 /* FUBeautyFilterViewModel.h */, + E32D09182876CEF300884AE5 /* FUBeautyFilterViewModel.m */, + E33834A9286192A60023482D /* FUBeautyStyleViewModel.h */, + E33834AA286192A60023482D /* FUBeautyStyleViewModel.m */, + ); + path = ViewModel; + sourceTree = ""; + }; + E34C47F92853381E0040093C /* View */ = { + isa = PBXGroup; + children = ( + E338349F2861772B0023482D /* FUBeautySkinView.h */, + E33834A02861772B0023482D /* FUBeautySkinView.m */, + E32C6DD42877E114008A9C08 /* FUBeautyShapeView.h */, + E32C6DD52877E114008A9C08 /* FUBeautyShapeView.m */, + E33834B82861BE8C0023482D /* FUBeautyFilterView.h */, + E33834B92861BE8C0023482D /* FUBeautyFilterView.m */, + E33834BC2861BE990023482D /* FUBeautyStyleView.h */, + E33834BD2861BE990023482D /* FUBeautyStyleView.m */, + ); + path = View; + sourceTree = ""; + }; + E3A787302859AB0000FBDAFF /* Resource */ = { + isa = PBXGroup; + children = ( + E34C48072853387A0040093C /* FUBeautyComponent.strings */, + E34C4803285338550040093C /* FUBeautyComponent.xcassets */, + E32D09232876D01C00884AE5 /* beauty_skin.json */, + E32D09252876D02E00884AE5 /* beauty_shape.json */, + E32D09212876CFDE00884AE5 /* beauty_filter.json */, + E33834A7286186880023482D /* beauty_style.json */, + ); + path = Resource; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + E34C47E5285338080040093C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E30500B82891365300C9408B /* FUBeautyShapeViewModel.h in Headers */, + E30500B42891364700C9408B /* FUBeautySkinViewModel.h in Headers */, + E33834BE2861BE990023482D /* FUBeautyStyleView.h in Headers */, + E32D08E928758C5600884AE5 /* FUBeautyComponentManager.h in Headers */, + E33834AB286192A60023482D /* FUBeautyStyleViewModel.h in Headers */, + E32C6DD22877DEEC008A9C08 /* FUBeautyShapeModel.h in Headers */, + E33834A52861838A0023482D /* FUBeautyStyleModel.h in Headers */, + E32C6DCE2877DEDC008A9C08 /* FUBeautySkinModel.h in Headers */, + E32C6DD62877E114008A9C08 /* FUBeautyShapeView.h in Headers */, + E33834BA2861BE8C0023482D /* FUBeautyFilterView.h in Headers */, + E32D09192876CEF300884AE5 /* FUBeautyFilterViewModel.h in Headers */, + E33834A12861772B0023482D /* FUBeautySkinView.h in Headers */, + E34C47FC2853381E0040093C /* FUBeautyDefine.h in Headers */, + E32D091D2876CF0F00884AE5 /* FUBeautyFilterModel.h in Headers */, + E34C47EE285338080040093C /* FUBeautyComponent.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + E34C47E9285338080040093C /* FUBeautyComponent */ = { + isa = PBXNativeTarget; + buildConfigurationList = E34C47F1285338080040093C /* Build configuration list for PBXNativeTarget "FUBeautyComponent" */; + buildPhases = ( + E34C47E5285338080040093C /* Headers */, + E34C47E6285338080040093C /* Sources */, + E34C47E7285338080040093C /* Frameworks */, + E34C47E8285338080040093C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FUBeautyComponent; + productName = FUBeautyComponent; + productReference = E34C47EA285338080040093C /* FUBeautyComponent.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E34C47E1285338080040093C /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1330; + TargetAttributes = { + E34C47E9285338080040093C = { + CreatedOnToolsVersion = 13.3.1; + }; + }; + }; + buildConfigurationList = E34C47E4285338080040093C /* Build configuration list for PBXProject "FUBeautyComponent" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + "zh-Hans", + Base, + ); + mainGroup = E34C47E0285338080040093C; + productRefGroup = E34C47EB285338080040093C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E34C47E9285338080040093C /* FUBeautyComponent */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E34C47E8285338080040093C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E33834A8286186880023482D /* beauty_style.json in Resources */, + E32D09242876D01C00884AE5 /* beauty_skin.json in Resources */, + E32D09222876CFDE00884AE5 /* beauty_filter.json in Resources */, + E34C4804285338550040093C /* FUBeautyComponent.xcassets in Resources */, + E34C48052853387A0040093C /* FUBeautyComponent.strings in Resources */, + E32D09262876D02E00884AE5 /* beauty_shape.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E34C47E6285338080040093C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E34C4831285347100040093C /* FUBeautyComponentManager.m in Sources */, + E33834A62861838A0023482D /* FUBeautyStyleModel.m in Sources */, + E32C6DD32877DEEC008A9C08 /* FUBeautyShapeModel.m in Sources */, + E33834A22861772B0023482D /* FUBeautySkinView.m in Sources */, + E32D091A2876CEF300884AE5 /* FUBeautyFilterViewModel.m in Sources */, + E33834AC286192A60023482D /* FUBeautyStyleViewModel.m in Sources */, + E32D091E2876CF0F00884AE5 /* FUBeautyFilterModel.m in Sources */, + E30500B92891365300C9408B /* FUBeautyShapeViewModel.m in Sources */, + E30500B52891364700C9408B /* FUBeautySkinViewModel.m in Sources */, + E33834BB2861BE8C0023482D /* FUBeautyFilterView.m in Sources */, + E32C6DCF2877DEDC008A9C08 /* FUBeautySkinModel.m in Sources */, + E32C6DD72877E114008A9C08 /* FUBeautyShapeView.m in Sources */, + E33834BF2861BE990023482D /* FUBeautyStyleView.m in Sources */, + E3618FEC28583B9B00E7D8D2 /* FUBeautyDefine.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + E34C48072853387A0040093C /* FUBeautyComponent.strings */ = { + isa = PBXVariantGroup; + children = ( + E34C48062853387A0040093C /* en */, + E34C4808285338920040093C /* zh-Hans */, + ); + name = FUBeautyComponent.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E34C47EF285338080040093C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E34C47F0285338080040093C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E34C47F2285338080040093C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 35A6KD62ZJ; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../FULiveDemo/FURenderKit", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = faceunity.FUBeautyComponent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E34C47F3285338080040093C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 35A6KD62ZJ; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../FULiveDemo/FURenderKit", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = faceunity.FUBeautyComponent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E34C47E4285338080040093C /* Build configuration list for PBXProject "FUBeautyComponent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E34C47EF285338080040093C /* Debug */, + E34C47F0285338080040093C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E34C47F1285338080040093C /* Build configuration list for PBXNativeTarget "FUBeautyComponent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E34C47F2285338080040093C /* Debug */, + E34C47F3285338080040093C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E34C47E1285338080040093C /* Project object */; +} diff --git a/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/FUBeautyComponent/FUBeautyComponent.xcodeproj/xcshareddata/xcschemes/FUBeautyComponent.xcscheme b/FUBeautyComponent/FUBeautyComponent.xcodeproj/xcshareddata/xcschemes/FUBeautyComponent.xcscheme new file mode 100644 index 00000000..ec328f07 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent.xcodeproj/xcshareddata/xcschemes/FUBeautyComponent.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FUBeautyComponent/FUBeautyComponent/FUBeautyComponent.h b/FUBeautyComponent/FUBeautyComponent/FUBeautyComponent.h new file mode 100644 index 00000000..193df4f7 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/FUBeautyComponent.h @@ -0,0 +1,17 @@ +// +// FUBeautyComponent.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/10. +// + +#import +#import "FUBeautyComponentManager.h" + +//! Project version number for FUBeautyComponent. +FOUNDATION_EXPORT double FUBeautyComponentVersionNumber; + +//! Project version string for FUBeautyComponent. +FOUNDATION_EXPORT const unsigned char FUBeautyComponentVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import diff --git a/FUBeautyComponent/FUBeautyComponent/FUBeautyComponentManager.h b/FUBeautyComponent/FUBeautyComponent/FUBeautyComponentManager.h new file mode 100644 index 00000000..d0a7ab85 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/FUBeautyComponentManager.h @@ -0,0 +1,56 @@ +// +// FUBeautyComponentManager.h +// FUBeautyComponentManager +// +// Created by 项林平 on 2022/6/10. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUBeautyComponentDelegate + +@optional +- (void)beautyComponentViewHeightDidChange:(CGFloat)height; + +- (void)beautyComponentDidTouchDownComparison; + +- (void)beautyComponentDidTouchUpComparison; +/// 提示 +- (void)beautyComponentNeedsDisplayPromptContent:(NSString *)content; + +@end + +@interface FUBeautyComponentManager : NSObject + +@property (nonatomic, weak) id delegate; +/// 美颜视图总高度 +@property (nonatomic, assign, readonly) CGFloat componentViewHeight; +/// 美颜视图选中功能索引,默认-1,-1表示未选中 +@property (nonatomic, assign, readonly) NSInteger selectedIndex; + ++ (instancetype)sharedManager; + +/// 销毁 ++ (void)destory; + +/// 在目标视图中添加美颜组件视图(固定位置为目标视图底部) +/// @param view 目标视图 +- (void)addComponentViewToView:(UIView *)view; + +/// 在父视图中移除美颜组件视图 +- (void)removeComponentView; + +/// 加载美颜效果 +- (void)loadBeauty; + +/// 卸载当前加载的美颜 +- (void)unloadBeauty; + +/// 保存当前美颜数据到本地 +- (void)saveBeauty; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/FUBeautyComponentManager.m b/FUBeautyComponent/FUBeautyComponent/FUBeautyComponentManager.m new file mode 100644 index 00000000..c601c5fd --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/FUBeautyComponentManager.m @@ -0,0 +1,381 @@ +// +// FUBeautyComponentManager.m +// FUBeautyComponentManager +// +// Created by 项林平 on 2022/6/10. +// + +#import "FUBeautyComponentManager.h" +#import "FUBeautyDefine.h" + +#import "FUBeautySkinView.h" +#import "FUBeautyShapeView.h" +#import "FUBeautyFilterView.h" +#import "FUBeautyStyleView.h" + +#import +#import + +static FUBeautyComponentManager *beautyComponentManager = nil; +static dispatch_once_t onceToken; + +@interface FUBeautyComponentManager () + +@property (nonatomic, weak) UIView *targetView; + +@property (nonatomic, strong) FUSegmentBar *categoryView; +@property (nonatomic, strong) UIButton *compareButton; + +@property (nonatomic, strong) FUBeautySkinView *beautySkinView; +@property (nonatomic, strong) FUBeautyShapeView *beautyShapeView; +@property (nonatomic, strong) FUBeautyFilterView *beautyFilterView; +@property (nonatomic, strong) FUBeautyStyleView *beautyStyleView; + +@property (nonatomic, strong) FUBeautySkinViewModel *beautySkinViewModel; +@property (nonatomic, strong) FUBeautyShapeViewModel *beautyShapeViewModel; +@property (nonatomic, strong) FUBeautyFilterViewModel *beautyFilterViewModel; +@property (nonatomic, strong) FUBeautyStyleViewModel *beautyStyleViewModel; + +@property (nonatomic, assign) NSInteger selectedIndex; + +@end + +@implementation FUBeautyComponentManager + +#pragma mark - Class methods + ++ (instancetype)sharedManager { + dispatch_once(&onceToken, ^{ + beautyComponentManager = [[FUBeautyComponentManager alloc] init]; + }); + return beautyComponentManager; +} + ++ (void)destory { + onceToken = 0; + beautyComponentManager = nil; +} + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + self.selectedIndex = FUBeautyCategoryNone; + } + return self; +} + +#pragma mark - Instance methods + +- (void)addComponentViewToView:(UIView *)view { + NSAssert(view != nil, @"FUBeautyComponent: view can not be nil!"); + self.targetView = view; + [self.targetView addSubview:self.compareButton]; + [self.targetView addSubview:self.beautySkinView]; + [self.targetView addSubview:self.beautyShapeView]; + [self.targetView addSubview:self.beautyFilterView]; + [self.targetView addSubview:self.beautyStyleView]; + [self.targetView addSubview:self.categoryView]; + + if (self.beautyStyleViewModel.selectedIndex > 0) { + // 选中了风格推荐 + self.categoryView.selectedIndex = FUBeautyCategoryPreset; + } +} + +- (void)removeComponentView { + if (self.compareButton.superview) { + [self.compareButton removeFromSuperview]; + } + if (self.beautySkinView.superview) { + [self.beautySkinView removeFromSuperview]; + } + if (self.beautyShapeView.superview) { + [self.beautyShapeView removeFromSuperview]; + } + if (self.beautyFilterView.superview) { + [self.beautyFilterView removeFromSuperview]; + } + if (self.beautyStyleView.superview) { + [self.beautyStyleView removeFromSuperview]; + } + if (self.categoryView.superview) { + [self.categoryView removeFromSuperview]; + } +} + +- (void)loadBeauty { + if (![FURenderKit shareRenderKit].beauty) { + FUBeauty *beauty = [self defaultBeauty]; + [FURenderKit shareRenderKit].beauty = beauty; + } + // 设置当前美颜数据 + if (self.beautyStyleViewModel.selectedIndex > 0) { + // 选择了风格推荐,只需要设置风格推荐 + self.beautyStyleViewModel.selectedIndex = self.beautyStyleViewModel.selectedIndex; + } else { + // 分别设置美肤、美型、滤镜 + [self.beautySkinViewModel setAllSkinValues]; + [self.beautyShapeViewModel setAllShapeValues]; + [self.beautyFilterViewModel setCurrentFilter]; + } +} + +- (void)unloadBeauty { + [FURenderKit shareRenderKit].beauty = nil; +} + +- (void)saveBeauty { + [self.beautySkinViewModel saveSkinsPersistently]; + [self.beautyShapeViewModel saveShapesPersistently]; + [self.beautyFilterViewModel saveFitersPersistently]; + [self.beautyStyleViewModel saveStylesPersistently]; +} + +#pragma mark - Private methods + +/// 默认美颜 +- (FUBeauty *)defaultBeauty { + NSString *path = [[NSBundle mainBundle] pathForResource:@"face_beautification" ofType:@"bundle"]; + FUBeauty *beauty = [[FUBeauty alloc] initWithPath:path name:@"FUBeauty"]; + beauty.heavyBlur = 0; + // 默认均匀磨皮 + beauty.blurType = 3; + // 默认精细变形 + beauty.faceShape = 4; + // 高性能设备设置去黑眼圈、去法令纹、大眼、嘴型最新效果 + if ([FURenderKit devicePerformanceLevel] == FUDevicePerformanceLevelHigh) { + [beauty addPropertyMode:FUBeautyPropertyMode2 forKey:FUModeKeyRemovePouchStrength]; + [beauty addPropertyMode:FUBeautyPropertyMode2 forKey:FUModeKeyRemoveNasolabialFoldsStrength]; + [beauty addPropertyMode:FUBeautyPropertyMode3 forKey:FUModeKeyEyeEnlarging]; + [beauty addPropertyMode:FUBeautyPropertyMode3 forKey:FUModeKeyIntensityMouth]; + } + return beauty; +} + +- (void)showEffectView:(UIView *)view animated:(BOOL)animated { + view.hidden = NO; + self.compareButton.hidden = NO; + if (animated) { + [UIView animateWithDuration:0.2 animations:^{ + view.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(view.frame)); + self.compareButton.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(view.frame)); + } completion:^(BOOL finished) { + }]; + } else { + view.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(view.frame)); + self.compareButton.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(view.frame)); + } + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyComponentViewHeightDidChange:)]) { + [self.delegate beautyComponentViewHeightDidChange:CGRectGetHeight(view.frame) + CGRectGetHeight(self.categoryView.frame)]; + } +} + +- (void)hideEffectView:(UIView *)view animated:(BOOL)animated { + if (animated) { + [UIView animateWithDuration:0.2 animations:^{ + view.transform = CGAffineTransformIdentity; + } completion:^(BOOL finished) { + view.hidden = YES; + }]; + } else { + view.transform = CGAffineTransformIdentity; + view.hidden = YES; + } +} + +- (UIView *)showingView { + UIView *view; + switch (self.selectedIndex) { + case FUBeautyCategorySkin:{ + view = self.beautySkinView; + } + break; + case FUBeautyCategoryShape:{ + view = self.beautyShapeView; + } + break; + case FUBeautyCategoryFilter:{ + view = self.beautyFilterView; + } + break; + case FUBeautyCategoryPreset:{ + view = self.beautyStyleView; + } + break; + default: + break; + } + return view; +} + +#pragma mark - Event response + +- (void)compareTouchDownAction { + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyComponentDidTouchDownComparison)]) { + [self.delegate beautyComponentDidTouchDownComparison]; + } +} + +- (void)compareTouchUpAction { + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyComponentDidTouchUpComparison)]) { + [self.delegate beautyComponentDidTouchUpComparison]; + } +} + +#pragma mark - FUSegmentBarDelegate + +- (BOOL)segmentBar:(FUSegmentBar *)segmentBar shouldSelectItemAtIndex:(NSInteger)index { + if (self.beautyStyleViewModel.selectedIndex > 0 && index < FUBeautyCategoryPreset) { + // 取消风格推荐提示 + NSArray *categories = @[FUBeautyStringWithKey(@"skin"), FUBeautyStringWithKey(@"shape"), FUBeautyStringWithKey(@"filter")]; + NSString *tipString = [NSString stringWithFormat:FUBeautyStringWithKey(@"To use, cancel Presets first."), categories[index]]; + [FUTipHUD showTips:tipString dismissWithDelay:1.5]; + return NO; + } + return YES; +} + +- (BOOL)segmentBar:(FUSegmentBar *)segmentBar shouldDisableItemAtIndex:(NSInteger)index { + return self.beautyStyleViewModel.selectedIndex > 0 && index < FUBeautyCategoryPreset; +} + +- (void)segmentBar:(FUSegmentBar *)segmentBar didSelectItemAtIndex:(NSUInteger)index { + if (index == self.selectedIndex) { + // 隐藏 + [self hideEffectView:[self showingView] animated:YES]; + self.compareButton.transform = CGAffineTransformIdentity; + self.compareButton.hidden = YES; + segmentBar.selectedIndex = -1; + self.selectedIndex = FUBeautyCategoryNone; + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyComponentViewHeightDidChange:)]) { + [self.delegate beautyComponentViewHeightDidChange:CGRectGetHeight(self.categoryView.frame)]; + } + } else { + if (self.selectedIndex > FUBeautyCategoryNone) { + [self hideEffectView:[self showingView] animated:NO]; + } + self.selectedIndex = index; + [self showEffectView:[self showingView] animated:YES]; + } +} + +#pragma mark - FUBeautyFilterViewDelegate + +- (void)beautyFilterViewDidChangeFilter:(NSString *)name { + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyComponentNeedsDisplayPromptContent:)]) { + [self.delegate beautyComponentNeedsDisplayPromptContent:name]; + } +} + +#pragma mark - FUBeautyStyleViewDelegate + +- (void)beautyStyleViewDidSelectStyle { + [self.categoryView refresh]; +} + +- (void)beautyStyleViewDidCancelStyle { + [self.categoryView refresh]; + // 取消风格推荐,恢复美肤、美型、滤镜效果 + [self.beautySkinViewModel setAllSkinValues]; + [self.beautyShapeViewModel setAllShapeValues]; + [self.beautyFilterViewModel setCurrentFilter]; +} + +#pragma mark - Getters + +- (FUSegmentBar *)categoryView { + if (!_categoryView) { + NSArray *categories = @[FUBeautyStringWithKey(@"skin"), FUBeautyStringWithKey(@"shape"), FUBeautyStringWithKey(@"filter"), FUBeautyStringWithKey(@"preset")]; + FUSegmentBarConfigurations *configurations = [[FUSegmentBarConfigurations alloc] init]; + configurations.titleFont = [UIFont systemFontOfSize:15]; + _categoryView = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.targetView.bounds) - FUBeautyHeightIncludeBottomSafeArea(FUBeautyCategoryViewHeight), CGRectGetWidth(self.targetView.bounds), FUBeautyHeightIncludeBottomSafeArea(FUBeautyCategoryViewHeight)) titles:categories configuration:configurations]; + _categoryView.delegate = self; + } + return _categoryView; +} + +- (UIButton *)compareButton { + if (!_compareButton) { + _compareButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _compareButton.frame = CGRectMake(15, CGRectGetMinY(self.categoryView.frame) - 54, 44, 44); + [_compareButton setImage:FUBeautyImageNamed(@"demo_icon_contrast") forState:UIControlStateNormal]; + [_compareButton addTarget:self action:@selector(compareTouchDownAction) forControlEvents:UIControlEventTouchDown]; + [_compareButton addTarget:self action:@selector(compareTouchUpAction) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; + _compareButton.hidden = YES; + } + return _compareButton; +} + +- (FUBeautySkinView *)beautySkinView { + if (!_beautySkinView) { + _beautySkinView = [[FUBeautySkinView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.categoryView.frame), CGRectGetWidth(self.targetView.bounds), FUBeautyFunctionViewOverallHeight) viewModel:self.beautySkinViewModel]; + _beautySkinView.hidden = YES; + } + return _beautySkinView; +} + +- (FUBeautyShapeView *)beautyShapeView { + if (!_beautyShapeView) { + _beautyShapeView = [[FUBeautyShapeView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.categoryView.frame), CGRectGetWidth(self.targetView.bounds), FUBeautyFunctionViewOverallHeight) viewModel:self.beautyShapeViewModel]; + _beautyShapeView.hidden = YES; + } + return _beautyShapeView; +} + +- (FUBeautyFilterView *)beautyFilterView { + if (!_beautyFilterView) { + _beautyFilterView = [[FUBeautyFilterView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.categoryView.frame), CGRectGetWidth(self.targetView.bounds), FUBeautyFunctionViewOverallHeight) viewModel:self.beautyFilterViewModel]; + _beautyFilterView.hidden = YES; + _beautyFilterView.delegate = self; + } + return _beautyFilterView; +} + +- (FUBeautyStyleView *)beautyStyleView { + if (!_beautyStyleView) { + _beautyStyleView = [[FUBeautyStyleView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.categoryView.frame), CGRectGetWidth(self.targetView.bounds), FUBeautyFunctionViewOverallHeight) viewModel:self.beautyStyleViewModel]; + _beautyStyleView.hidden = YES; + _beautyStyleView.delegate = self; + } + return _beautyStyleView; +} + +- (FUBeautySkinViewModel *)beautySkinViewModel { + if (!_beautySkinViewModel) { + _beautySkinViewModel = [[FUBeautySkinViewModel alloc] init]; + } + return _beautySkinViewModel; +} + +- (FUBeautyShapeViewModel *)beautyShapeViewModel { + if (!_beautyShapeViewModel) { + _beautyShapeViewModel = [[FUBeautyShapeViewModel alloc] init]; + } + return _beautyShapeViewModel; +} + +- (FUBeautyFilterViewModel *)beautyFilterViewModel { + if (!_beautyFilterViewModel) { + _beautyFilterViewModel = [[FUBeautyFilterViewModel alloc] init]; + } + return _beautyFilterViewModel; +} + +- (FUBeautyStyleViewModel *)beautyStyleViewModel { + if (!_beautyStyleViewModel) { + _beautyStyleViewModel = [[FUBeautyStyleViewModel alloc] init]; + } + return _beautyStyleViewModel; +} + +- (CGFloat)componentViewHeight { + if (self.selectedIndex == FUBeautyCategoryNone) { + return FUBeautyHeightIncludeBottomSafeArea(FUBeautyCategoryViewHeight); + } else { + return FUBeautyHeightIncludeBottomSafeArea(FUBeautyCategoryViewHeight) + FUBeautyFunctionViewOverallHeight; + } +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/FUBeautyDefine.h b/FUBeautyComponent/FUBeautyComponent/FUBeautyDefine.h new file mode 100644 index 00000000..37a3bb50 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/FUBeautyDefine.h @@ -0,0 +1,113 @@ +// +// FUBeautyDefine.h +// FUBeautyUIComponent +// +// Created by 项林平 on 2022/6/9. +// + +#import +#import + +#ifndef FUBeautyDefine_h +#define FUBeautyDefine_h + +#pragma mark - Const + +extern const CGFloat FUBeautyCategoryViewHeight; + +extern const CGFloat FUBeautyFunctionViewOverallHeight; + +extern const CGFloat FUBeautyFunctionSliderHeight; + +extern NSString * const FUPersistentBeautySkinKey; + +extern NSString * const FUPersistentBeautyShapeKey; + +extern NSString * const FUPersistentBeautyFilterKey; + +extern NSString * const FUPersistentBeautySelectedFilterIndexKey; + +extern NSString * const FUPersistentBeautySelectedStyleIndexKey; + +#pragma mark - Enum + +typedef NS_ENUM(NSInteger, FUBeautyCategory) { + FUBeautyCategoryNone = -1, + FUBeautyCategorySkin = 0, //美肤 + FUBeautyCategoryShape = 1, //美型 + FUBeautyCategoryFilter = 2, //滤镜 + FUBeautyCategoryPreset = 3 //风格推荐 +}; + +typedef NS_ENUM(NSUInteger, FUBeautySkin) { + FUBeautySkinBlurLevel = 0, + FUBeautySkinColorLevel, + FUBeautySkinRedLevel, + FUBeautySkinSharpen, + FUBeautySkinFaceThreed, + FUBeautySkinEyeBright, + FUBeautySkinToothWhiten, + FUBeautySkinRemovePouchStrength, + FUBeautySkinRemoveNasolabialFoldsStrength +}; + +typedef NS_ENUM(NSUInteger, FUBeautyShape) { + FUBeautyShapeCheekThinning = 0, + FUBeautyShapeCheekV, + FUBeautyShapeCheekNarrow, + FUBeautyShapeCheekShort, + FUBeautyShapeCheekSmall, + FUBeautyShapeCheekbones, + FUBeautyShapeLowerJaw, + FUBeautyShapeEyeEnlarging, + FUBeautyShapeEyeCircle, + FUBeautyShapeChin, + FUBeautyShapeForehead, + FUBeautyShapeNose, + FUBeautyShapeMouth, + FUBeautyShapeLipThick, + FUBeautyShapeEyeHeight, + FUBeautyShapeCanthus, + FUBeautyShapeEyeLid, + FUBeautyShapeEyeSpace, + FUBeautyShapeEyeRotate, + FUBeautyShapeLongNose, + FUBeautyShapePhiltrum, + FUBeautyShapeSmile, + FUBeautyShapeBrowHeight, + FUBeautyShapeBrowSpace, + FUBeautyShapeBrowThick +}; + +#pragma mark - Inline methods + +static inline CGFloat FUBeautyHeightIncludeBottomSafeArea(CGFloat height) { + if (@available(iOS 11.0, *)) { + height += [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom; + } + return height; +} + +static inline UIImage * FUBeautyImageNamed(NSString *name) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"FUBeautyComponent" ofType:@"framework" inDirectory:@"Frameworks"]; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + return [UIImage imageNamed:name inBundle:bundle compatibleWithTraitCollection:nil];; +} + +static inline NSString * FUBeautyStringWithKey(NSString *key) { + NSString *framePath = [[NSBundle mainBundle] pathForResource:@"FUBeautyComponent" ofType:@"framework" inDirectory:@"Frameworks"]; + NSBundle *frameBundle = [NSBundle bundleWithPath:framePath]; + NSArray *languages = [NSLocale preferredLanguages]; + NSString *currentLanguage = languages.firstObject; + if ([currentLanguage hasPrefix:@"zh-Hans"]) { + currentLanguage =@"zh-Hans"; + } else { + currentLanguage = @"en"; + } + NSString *path = [frameBundle pathForResource:currentLanguage ofType:@"lproj"]; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + NSString *value = [bundle localizedStringForKey:key value:nil table:@"FUBeautyComponent"]; + return value; +} + +#endif /* FUBeautyDefine_h */ diff --git a/FUBeautyComponent/FUBeautyComponent/FUBeautyDefine.m b/FUBeautyComponent/FUBeautyComponent/FUBeautyDefine.m new file mode 100644 index 00000000..d91f86ab --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/FUBeautyDefine.m @@ -0,0 +1,25 @@ +// +// FUBeautyDefine.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/14. +// + +#import "FUBeautyDefine.h" + +const CGFloat FUBeautyCategoryViewHeight = 49.f; + +const CGFloat FUBeautyFunctionViewOverallHeight = 141.f; + +const CGFloat FUBeautyFunctionSliderHeight = 30.f; + +NSString * const FUPersistentBeautySkinKey = @"FUPersistentBeautySkin"; + +NSString * const FUPersistentBeautyShapeKey = @"FUPersistentBeautyShape"; + +NSString * const FUPersistentBeautyFilterKey = @"FUPersistentBeautyFilter"; + +NSString * const FUPersistentBeautySelectedFilterIndexKey = @"FUPersistentBeautySelectedFilterIndex"; + +NSString * const FUPersistentBeautySelectedStyleIndexKey = @"FUPersistentBeautySelectedStyleIndex"; + diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyFilterModel.h b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyFilterModel.h new file mode 100644 index 00000000..1d0ef217 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyFilterModel.h @@ -0,0 +1,20 @@ +// +// FUBeautyFilterModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/7. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyFilterModel : NSObject + +@property (nonatomic, assign) NSInteger filterIndex; +@property (nonatomic, copy) NSString *filterName; +@property (nonatomic, assign) double filterLevel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyFilterModel.m b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyFilterModel.m new file mode 100644 index 00000000..9c178fb6 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyFilterModel.m @@ -0,0 +1,12 @@ +// +// FUBeautyFilterModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/7. +// + +#import "FUBeautyFilterModel.h" + +@implementation FUBeautyFilterModel + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyShapeModel.h b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyShapeModel.h new file mode 100644 index 00000000..cdd12849 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyShapeModel.h @@ -0,0 +1,29 @@ +// +// FUBeautyShapeModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/8. +// + +#import +#import "FUBeautyDefine.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyShapeModel : NSObject + +@property (nonatomic, copy) NSString *name; +/// 美型类型 +@property (nonatomic, assign) FUBeautyShape type; +/// 当前值 +@property (nonatomic) double currentValue; +/// 默认值 +@property (nonatomic) double defaultValue; +/// 默认值是否中位数 +@property (nonatomic, assign) BOOL defaultValueInMiddle; +/// 是否区分设备性能 +@property (nonatomic, assign) BOOL differentiateDevicePerformance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyShapeModel.m b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyShapeModel.m new file mode 100644 index 00000000..71651c41 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyShapeModel.m @@ -0,0 +1,12 @@ +// +// FUBeautyShapeModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/8. +// + +#import "FUBeautyShapeModel.h" + +@implementation FUBeautyShapeModel + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautySkinModel.h b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautySkinModel.h new file mode 100644 index 00000000..6f29f4d4 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautySkinModel.h @@ -0,0 +1,29 @@ +// +// FUBeautySkinModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/8. +// + +#import +#import "FUBeautyDefine.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautySkinModel : NSObject + +@property (nonatomic, copy) NSString *name; +/// 美肤类型 +@property (nonatomic, assign) FUBeautySkin type; +/// 当前值 +@property (nonatomic, assign) double currentValue; +/// 默认值 +@property (nonatomic, assign) double defaultValue; +/// 默认值是否中位数 +@property (nonatomic, assign) BOOL defaultValueInMiddle; +/// 实际值对应0.0-1.0的倍率 +@property (nonatomic, assign) NSInteger ratio; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautySkinModel.m b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautySkinModel.m new file mode 100644 index 00000000..104cb37e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautySkinModel.m @@ -0,0 +1,12 @@ +// +// FUBeautySkinModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/8. +// + +#import "FUBeautySkinModel.h" + +@implementation FUBeautySkinModel + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyStyleModel.h b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyStyleModel.h new file mode 100644 index 00000000..714b8037 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyStyleModel.h @@ -0,0 +1,57 @@ +// +// FUBeautyStyleModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyStyleModel : NSObject + +@property (nonatomic, copy) NSString *name; + +@property (nonatomic, assign) double blurLevel; +@property (nonatomic, assign) double colorLevel; +@property (nonatomic, assign) double redLevel; +@property (nonatomic, assign) double sharpen; +@property (nonatomic, assign) double faceThreed; +@property (nonatomic, assign) double eyeBright; +@property (nonatomic, assign) double toothWhiten; +@property (nonatomic, assign) double removePouchStrength; +@property (nonatomic, assign) double removeNasolabialFoldsStrength; + +@property (nonatomic, assign) double cheekThinning; +@property (nonatomic, assign) double cheekV; +@property (nonatomic, assign) double cheekNarrow; +@property (nonatomic, assign) double cheekShort; +@property (nonatomic, assign) double cheekSmall; +@property (nonatomic, assign) double cheekbones; +@property (nonatomic, assign) double lowerJaw; +@property (nonatomic, assign) double eyeEnlarging; +@property (nonatomic, assign) double eyeCircle; +@property (nonatomic, assign) double chin; +@property (nonatomic, assign) double forehead; +@property (nonatomic, assign) double nose; +@property (nonatomic, assign) double mouth; +@property (nonatomic, assign) double lipThick; +@property (nonatomic, assign) double eyeHeight; +@property (nonatomic, assign) double canthus; +@property (nonatomic, assign) double eyeLid; +@property (nonatomic, assign) double eyeSpace; +@property (nonatomic, assign) double eyeRotate; +@property (nonatomic, assign) double longNose; +@property (nonatomic, assign) double philtrum; +@property (nonatomic, assign) double smile; +@property (nonatomic, assign) double browHeight; +@property (nonatomic, assign) double browSpace; +@property (nonatomic, assign) double browThick; + +@property (nonatomic, copy) NSString *filterName; +@property (nonatomic, assign) double filterLevel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyStyleModel.m b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyStyleModel.m new file mode 100644 index 00000000..a80ad638 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Model/FUBeautyStyleModel.m @@ -0,0 +1,12 @@ +// +// FUBeautyStyleModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import "FUBeautyStyleModel.h" + +@implementation FUBeautyStyleModel + +@end diff --git a/FULiveDemo/Assets.xcassets/Avatar/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/Contents.json rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/Contents.json rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/Contents.json diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/Contents.json new file mode 100644 index 00000000..e18e12fc --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/bailiang1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/bailiang1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/bailiang1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/bailiang1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/bailiang1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/bailiang1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/bailiang1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/bailiang1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/bailiang1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/bailiang1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/bailiang1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang1.imageset/bailiang1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/Contents.json new file mode 100644 index 00000000..abd09e54 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/bailiang2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/bailiang2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/bailiang2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/bailiang2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/bailiang2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/bailiang2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/bailiang2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/bailiang2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/bailiang2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/bailiang2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/bailiang2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang2.imageset/bailiang2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/Contents.json new file mode 100644 index 00000000..b7c64d88 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/bailiang3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/bailiang3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/bailiang3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/bailiang3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/bailiang3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/bailiang3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/bailiang3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/bailiang3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/bailiang3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/bailiang3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/bailiang3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang3.imageset/bailiang3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/Contents.json new file mode 100644 index 00000000..12c26a60 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/bailiang4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/bailiang4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/bailiang4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/bailiang4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/bailiang4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/bailiang4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/bailiang4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/bailiang4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/bailiang4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/bailiang4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/bailiang4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang4.imageset/bailiang4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/Contents.json new file mode 100644 index 00000000..3db3d46e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/bailiang5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/bailiang5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/bailiang5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/bailiang5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/bailiang5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/bailiang5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/bailiang5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/bailiang5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/bailiang5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/bailiang5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/bailiang5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang5.imageset/bailiang5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/Contents.json new file mode 100644 index 00000000..8790506f --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/bailiang6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/bailiang6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/bailiang6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/bailiang6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/bailiang6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/bailiang6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/bailiang6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/bailiang6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/bailiang6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/bailiang6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/bailiang6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang6.imageset/bailiang6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/Contents.json new file mode 100644 index 00000000..01438894 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bailiang7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bailiang7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bailiang7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/bailiang7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/bailiang7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/bailiang7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/bailiang7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/bailiang7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/bailiang7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/bailiang7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/bailiang7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/bailiang7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/bailiang7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/bailiang7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/bailiang7.imageset/bailiang7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/Contents.json new file mode 100644 index 00000000..86298c70 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/fennen1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/fennen1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/fennen1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/fennen1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/fennen1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/fennen1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/fennen1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/fennen1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/fennen1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/fennen1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/fennen1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen1.imageset/fennen1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/Contents.json new file mode 100644 index 00000000..77e76c30 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/fennen2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/fennen2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/fennen2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/fennen2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/fennen2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/fennen2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/fennen2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/fennen2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/fennen2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/fennen2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/fennen2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen2.imageset/fennen2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/Contents.json new file mode 100644 index 00000000..c4fc0974 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/fennen3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/fennen3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/fennen3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/fennen3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/fennen3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/fennen3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/fennen3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/fennen3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/fennen3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/fennen3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/fennen3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen3.imageset/fennen3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/Contents.json new file mode 100644 index 00000000..f25e701a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/fennen4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/fennen4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/fennen4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/fennen4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/fennen4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/fennen4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/fennen4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/fennen4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/fennen4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/fennen4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/fennen4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen4.imageset/fennen4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/Contents.json new file mode 100644 index 00000000..465d643b --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/fennen5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/fennen5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/fennen5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/fennen5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/fennen5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/fennen5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/fennen5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/fennen5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/fennen5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/fennen5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/fennen5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen5.imageset/fennen5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/Contents.json new file mode 100644 index 00000000..e0a0b113 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/fennen6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/fennen6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/fennen6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/fennen6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/fennen6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/fennen6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/fennen6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/fennen6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/fennen6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/fennen6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/fennen6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen6.imageset/fennen6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/Contents.json new file mode 100644 index 00000000..e1b688d4 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/fennen7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/fennen7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/fennen7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/fennen7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/fennen7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/fennen7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/fennen7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/fennen7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/fennen7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/fennen7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/fennen7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen7.imageset/fennen7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/Contents.json new file mode 100644 index 00000000..c3575e7c --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fennen8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fennen8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fennen8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/fennen8.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/fennen8.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/fennen8.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/fennen8.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/fennen8@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/fennen8@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/fennen8@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/fennen8@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/fennen8@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/fennen8@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/fennen8@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/fennen8.imageset/fennen8@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/Contents.json new file mode 100644 index 00000000..3b83706d --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/gexing1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/gexing1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/gexing1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/gexing1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/gexing1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/gexing1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/gexing1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/gexing1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/gexing1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/gexing1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/gexing1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing1.imageset/gexing1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/Contents.json new file mode 100644 index 00000000..a7e7c3c8 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing10.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing10@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing10@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/gexing10.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/gexing10.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/gexing10.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/gexing10.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/gexing10@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/gexing10@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/gexing10@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/gexing10@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/gexing10@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/gexing10@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/gexing10@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing10.imageset/gexing10@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/Contents.json new file mode 100644 index 00000000..21637303 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_gexing11.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_gexing11@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_gexing11@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/demo_icon_gexing11.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/demo_icon_gexing11.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/demo_icon_gexing11.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/demo_icon_gexing11.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/demo_icon_gexing11@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/demo_icon_gexing11@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/demo_icon_gexing11@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/demo_icon_gexing11@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/demo_icon_gexing11@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/demo_icon_gexing11@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/demo_icon_gexing11@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing11.imageset/demo_icon_gexing11@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/Contents.json new file mode 100644 index 00000000..baa078a0 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/gexing2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/gexing2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/gexing2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/gexing2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/gexing2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/gexing2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/gexing2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/gexing2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/gexing2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/gexing2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/gexing2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing2.imageset/gexing2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/Contents.json new file mode 100644 index 00000000..00d0253c --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/gexing3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/gexing3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/gexing3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/gexing3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/gexing3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/gexing3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/gexing3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/gexing3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/gexing3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/gexing3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/gexing3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing3.imageset/gexing3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/Contents.json new file mode 100644 index 00000000..c508e970 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/gexing4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/gexing4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/gexing4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/gexing4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/gexing4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/gexing4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/gexing4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/gexing4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/gexing4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/gexing4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/gexing4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing4.imageset/gexing4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/Contents.json new file mode 100644 index 00000000..40885b21 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/gexing5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/gexing5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/gexing5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/gexing5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/gexing5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/gexing5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/gexing5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/gexing5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/gexing5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/gexing5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/gexing5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing5.imageset/gexing5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/Contents.json new file mode 100644 index 00000000..d85e955f --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/gexing6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/gexing6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/gexing6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/gexing6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/gexing6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/gexing6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/gexing6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/gexing6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/gexing6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/gexing6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/gexing6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing6.imageset/gexing6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/Contents.json new file mode 100644 index 00000000..c19d4279 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/gexing7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/gexing7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/gexing7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/gexing7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/gexing7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/gexing7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/gexing7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/gexing7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/gexing7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/gexing7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/gexing7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing7.imageset/gexing7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/Contents.json new file mode 100644 index 00000000..eeaf60f1 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/gexing8.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/gexing8.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/gexing8.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/gexing8.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/gexing8@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/gexing8@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/gexing8@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/gexing8@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/gexing8@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/gexing8@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/gexing8@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing8.imageset/gexing8@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/Contents.json new file mode 100644 index 00000000..32670319 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "gexing9.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gexing9@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gexing9@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/gexing9.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/gexing9.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/gexing9.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/gexing9.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/gexing9@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/gexing9@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/gexing9@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/gexing9@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/gexing9@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/gexing9@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/gexing9@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/gexing9.imageset/gexing9@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/Contents.json new file mode 100644 index 00000000..45b8facc --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heibai1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heibai1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heibai1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/heibai1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/heibai1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/heibai1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/heibai1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/heibai1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/heibai1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/heibai1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/heibai1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/heibai1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/heibai1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/heibai1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai1.imageset/heibai1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/Contents.json new file mode 100644 index 00000000..ef615757 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heibai2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heibai2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heibai2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/heibai2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/heibai2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/heibai2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/heibai2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/heibai2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/heibai2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/heibai2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/heibai2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/heibai2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/heibai2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/heibai2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai2.imageset/heibai2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/Contents.json new file mode 100644 index 00000000..35ac9c23 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heibai3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heibai3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heibai3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/heibai3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/heibai3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/heibai3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/heibai3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/heibai3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/heibai3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/heibai3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/heibai3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/heibai3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/heibai3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/heibai3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai3.imageset/heibai3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/Contents.json new file mode 100644 index 00000000..e417a815 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heibai4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heibai4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heibai4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/heibai4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/heibai4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/heibai4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/heibai4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/heibai4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/heibai4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/heibai4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/heibai4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/heibai4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/heibai4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/heibai4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai4.imageset/heibai4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/Contents.json new file mode 100644 index 00000000..0a888120 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heibai5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heibai5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heibai5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/heibai5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/heibai5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/heibai5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/heibai5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/heibai5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/heibai5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/heibai5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/heibai5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/heibai5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/heibai5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/heibai5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/heibai5.imageset/heibai5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/Contents.json new file mode 100644 index 00000000..468fa8c0 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/lengsediao1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/lengsediao1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/lengsediao1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/lengsediao1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/lengsediao1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/lengsediao1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/lengsediao1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/lengsediao1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/lengsediao1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/lengsediao1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/lengsediao1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao1.imageset/lengsediao1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/Contents.json new file mode 100644 index 00000000..273246e9 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao10.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao10@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao10@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/lengsediao10.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/lengsediao10.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/lengsediao10.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/lengsediao10.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/lengsediao10@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/lengsediao10@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/lengsediao10@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/lengsediao10@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/lengsediao10@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/lengsediao10@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/lengsediao10@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao10.imageset/lengsediao10@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/Contents.json new file mode 100644 index 00000000..b840a209 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao11.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao11@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao11@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/lengsediao11.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/lengsediao11.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/lengsediao11.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/lengsediao11.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/lengsediao11@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/lengsediao11@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/lengsediao11@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/lengsediao11@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/lengsediao11@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/lengsediao11@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/lengsediao11@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao11.imageset/lengsediao11@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/Contents.json new file mode 100644 index 00000000..e2f4c5ef --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/lengsediao2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/lengsediao2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/lengsediao2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/lengsediao2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/lengsediao2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/lengsediao2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/lengsediao2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/lengsediao2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/lengsediao2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/lengsediao2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/lengsediao2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao2.imageset/lengsediao2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/Contents.json new file mode 100644 index 00000000..e171657e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/lengsediao3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/lengsediao3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/lengsediao3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/lengsediao3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/lengsediao3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/lengsediao3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/lengsediao3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/lengsediao3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/lengsediao3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/lengsediao3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/lengsediao3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao3.imageset/lengsediao3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/Contents.json new file mode 100644 index 00000000..f61f8a27 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/lengsediao4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/lengsediao4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/lengsediao4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/lengsediao4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/lengsediao4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/lengsediao4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/lengsediao4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/lengsediao4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/lengsediao4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/lengsediao4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/lengsediao4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao4.imageset/lengsediao4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/Contents.json new file mode 100644 index 00000000..9b800d0c --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/lengsediao5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/lengsediao5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/lengsediao5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/lengsediao5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/lengsediao5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/lengsediao5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/lengsediao5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/lengsediao5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/lengsediao5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/lengsediao5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/lengsediao5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao5.imageset/lengsediao5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/Contents.json new file mode 100644 index 00000000..dd33d239 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/lengsediao6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/lengsediao6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/lengsediao6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/lengsediao6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/lengsediao6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/lengsediao6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/lengsediao6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/lengsediao6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/lengsediao6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/lengsediao6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/lengsediao6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao6.imageset/lengsediao6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/Contents.json new file mode 100644 index 00000000..bd45ed9f --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/lengsediao7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/lengsediao7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/lengsediao7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/lengsediao7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/lengsediao7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/lengsediao7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/lengsediao7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/lengsediao7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/lengsediao7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/lengsediao7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/lengsediao7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao7.imageset/lengsediao7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/Contents.json new file mode 100644 index 00000000..4e8df445 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/lengsediao8.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/lengsediao8.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/lengsediao8.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/lengsediao8.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/lengsediao8@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/lengsediao8@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/lengsediao8@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/lengsediao8@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/lengsediao8@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/lengsediao8@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/lengsediao8@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao8.imageset/lengsediao8@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/Contents.json new file mode 100644 index 00000000..7296c744 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lengsediao9.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lengsediao9@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lengsediao9@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/lengsediao9.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/lengsediao9.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/lengsediao9.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/lengsediao9.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/lengsediao9@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/lengsediao9@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/lengsediao9@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/lengsediao9@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/lengsediao9@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/lengsediao9@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/lengsediao9@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/lengsediao9.imageset/lengsediao9@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/Contents.json new file mode 100644 index 00000000..71f35bf7 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/demo_icon_peach1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/demo_icon_peach1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/demo_icon_peach1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/demo_icon_peach1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/demo_icon_peach1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/demo_icon_peach1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/demo_icon_peach1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/demo_icon_peach1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/demo_icon_peach1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/demo_icon_peach1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/demo_icon_peach1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao1.imageset/demo_icon_peach1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/Contents.json new file mode 100644 index 00000000..edc922ac --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/demo_icon_peach2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/demo_icon_peach2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/demo_icon_peach2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/demo_icon_peach2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/demo_icon_peach2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/demo_icon_peach2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/demo_icon_peach2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/demo_icon_peach2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/demo_icon_peach2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/demo_icon_peach2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/demo_icon_peach2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao2.imageset/demo_icon_peach2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/Contents.json new file mode 100644 index 00000000..1c3ff112 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/demo_icon_peach3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/demo_icon_peach3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/demo_icon_peach3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/demo_icon_peach3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/demo_icon_peach3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/demo_icon_peach3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/demo_icon_peach3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/demo_icon_peach3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/demo_icon_peach3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/demo_icon_peach3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/demo_icon_peach3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao3.imageset/demo_icon_peach3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/Contents.json new file mode 100644 index 00000000..b7d0f13a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/demo_icon_peach4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/demo_icon_peach4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/demo_icon_peach4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/demo_icon_peach4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/demo_icon_peach4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/demo_icon_peach4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/demo_icon_peach4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/demo_icon_peach4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/demo_icon_peach4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/demo_icon_peach4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/demo_icon_peach4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao4.imageset/demo_icon_peach4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/Contents.json new file mode 100644 index 00000000..f4b807d2 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/demo_icon_peach5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/demo_icon_peach5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/demo_icon_peach5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/demo_icon_peach5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/demo_icon_peach5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/demo_icon_peach5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/demo_icon_peach5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/demo_icon_peach5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/demo_icon_peach5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/demo_icon_peach5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/demo_icon_peach5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao5.imageset/demo_icon_peach5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/Contents.json new file mode 100644 index 00000000..ce2aec9e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/demo_icon_peach6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/demo_icon_peach6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/demo_icon_peach6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/demo_icon_peach6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/demo_icon_peach6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/demo_icon_peach6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/demo_icon_peach6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/demo_icon_peach6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/demo_icon_peach6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/demo_icon_peach6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/demo_icon_peach6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao6.imageset/demo_icon_peach6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/Contents.json new file mode 100644 index 00000000..2cec328a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/demo_icon_peach7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/demo_icon_peach7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/demo_icon_peach7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/demo_icon_peach7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/demo_icon_peach7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/demo_icon_peach7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/demo_icon_peach7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/demo_icon_peach7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/demo_icon_peach7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/demo_icon_peach7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/demo_icon_peach7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao7.imageset/demo_icon_peach7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/Contents.json new file mode 100644 index 00000000..732d07c4 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_peach8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_peach8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_peach8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/demo_icon_peach8.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/demo_icon_peach8.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/demo_icon_peach8.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/demo_icon_peach8.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/demo_icon_peach8@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/demo_icon_peach8@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/demo_icon_peach8@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/demo_icon_peach8@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/demo_icon_peach8@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/demo_icon_peach8@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/demo_icon_peach8@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/mitao8.imageset/demo_icon_peach8@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/Contents.json new file mode 100644 index 00000000..c298d3cd --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "nuansediao1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "nuansediao1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "nuansediao1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/nuansediao1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/nuansediao1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/nuansediao1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/nuansediao1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/nuansediao1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/nuansediao1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/nuansediao1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/nuansediao1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/nuansediao1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/nuansediao1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/nuansediao1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao1.imageset/nuansediao1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/Contents.json new file mode 100644 index 00000000..57b0b299 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "nuansediao2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "nuansediao2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "nuansediao2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/nuansediao2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/nuansediao2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/nuansediao2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/nuansediao2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/nuansediao2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/nuansediao2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/nuansediao2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/nuansediao2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/nuansediao2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/nuansediao2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/nuansediao2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao2.imageset/nuansediao2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/Contents.json new file mode 100644 index 00000000..97d92102 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "nuansediao3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "nuansediao3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "nuansediao3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/nuansediao3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/nuansediao3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/nuansediao3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/nuansediao3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/nuansediao3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/nuansediao3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/nuansediao3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/nuansediao3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/nuansediao3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/nuansediao3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/nuansediao3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/nuansediao3.imageset/nuansediao3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/Contents.json new file mode 100644 index 00000000..ce349b36 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "cancel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "cancel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "cancel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/cancel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/cancel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/cancel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/cancel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/cancel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/cancel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/cancel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/cancel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/cancel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/cancel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/cancel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/origin.imageset/cancel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/Contents.json new file mode 100644 index 00000000..043b5eae --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "xiaoqingxin1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoqingxin1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xiaoqingxin1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/xiaoqingxin1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/xiaoqingxin1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/xiaoqingxin1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/xiaoqingxin1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/xiaoqingxin1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/xiaoqingxin1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/xiaoqingxin1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/xiaoqingxin1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/xiaoqingxin1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/xiaoqingxin1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/xiaoqingxin1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin1.imageset/xiaoqingxin1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/Contents.json new file mode 100644 index 00000000..5d8f129b --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "xiaoqingxin2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoqingxin2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xiaoqingxin2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/xiaoqingxin2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/xiaoqingxin2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/xiaoqingxin2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/xiaoqingxin2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/xiaoqingxin2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/xiaoqingxin2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/xiaoqingxin2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/xiaoqingxin2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/xiaoqingxin2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/xiaoqingxin2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/xiaoqingxin2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin2.imageset/xiaoqingxin2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/Contents.json new file mode 100644 index 00000000..2da79cb3 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "xiaoqingxin3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoqingxin3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xiaoqingxin3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/xiaoqingxin3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/xiaoqingxin3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/xiaoqingxin3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/xiaoqingxin3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/xiaoqingxin3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/xiaoqingxin3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/xiaoqingxin3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/xiaoqingxin3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/xiaoqingxin3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/xiaoqingxin3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/xiaoqingxin3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin3.imageset/xiaoqingxin3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/Contents.json new file mode 100644 index 00000000..57750cd3 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "xiaoqingxin4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoqingxin4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xiaoqingxin4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/xiaoqingxin4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/xiaoqingxin4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/xiaoqingxin4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/xiaoqingxin4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/xiaoqingxin4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/xiaoqingxin4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/xiaoqingxin4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/xiaoqingxin4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/xiaoqingxin4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/xiaoqingxin4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/xiaoqingxin4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin4.imageset/xiaoqingxin4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/Contents.json new file mode 100644 index 00000000..f8516f8a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "xiaoqingxin5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoqingxin5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xiaoqingxin5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/xiaoqingxin5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/xiaoqingxin5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/xiaoqingxin5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/xiaoqingxin5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/xiaoqingxin5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/xiaoqingxin5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/xiaoqingxin5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/xiaoqingxin5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/xiaoqingxin5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/xiaoqingxin5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/xiaoqingxin5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin5.imageset/xiaoqingxin5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/Contents.json new file mode 100644 index 00000000..1a48bc40 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "xiaoqingxin6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoqingxin6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "xiaoqingxin6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/xiaoqingxin6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/xiaoqingxin6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/xiaoqingxin6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/xiaoqingxin6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/xiaoqingxin6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/xiaoqingxin6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/xiaoqingxin6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/xiaoqingxin6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/xiaoqingxin6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/xiaoqingxin6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/xiaoqingxin6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/xiaoqingxin6.imageset/xiaoqingxin6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/Contents.json new file mode 100644 index 00000000..71c9ee00 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/zhiganhui1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/zhiganhui1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/zhiganhui1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/zhiganhui1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/zhiganhui1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/zhiganhui1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/zhiganhui1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/zhiganhui1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/zhiganhui1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/zhiganhui1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/zhiganhui1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui1.imageset/zhiganhui1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/Contents.json new file mode 100644 index 00000000..fbbc6792 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/zhiganhui2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/zhiganhui2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/zhiganhui2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/zhiganhui2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/zhiganhui2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/zhiganhui2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/zhiganhui2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/zhiganhui2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/zhiganhui2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/zhiganhui2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/zhiganhui2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui2.imageset/zhiganhui2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/Contents.json new file mode 100644 index 00000000..3bef0062 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/zhiganhui3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/zhiganhui3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/zhiganhui3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/zhiganhui3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/zhiganhui3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/zhiganhui3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/zhiganhui3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/zhiganhui3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/zhiganhui3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/zhiganhui3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/zhiganhui3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui3.imageset/zhiganhui3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/Contents.json new file mode 100644 index 00000000..46eb9744 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/zhiganhui4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/zhiganhui4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/zhiganhui4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/zhiganhui4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/zhiganhui4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/zhiganhui4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/zhiganhui4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/zhiganhui4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/zhiganhui4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/zhiganhui4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/zhiganhui4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui4.imageset/zhiganhui4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/Contents.json new file mode 100644 index 00000000..cd937b03 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/zhiganhui5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/zhiganhui5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/zhiganhui5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/zhiganhui5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/zhiganhui5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/zhiganhui5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/zhiganhui5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/zhiganhui5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/zhiganhui5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/zhiganhui5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/zhiganhui5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui5.imageset/zhiganhui5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/Contents.json new file mode 100644 index 00000000..e8584f15 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/zhiganhui6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/zhiganhui6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/zhiganhui6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/zhiganhui6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/zhiganhui6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/zhiganhui6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/zhiganhui6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/zhiganhui6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/zhiganhui6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/zhiganhui6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/zhiganhui6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui6.imageset/zhiganhui6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/Contents.json new file mode 100644 index 00000000..b392d24a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/zhiganhui7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/zhiganhui7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/zhiganhui7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/zhiganhui7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/zhiganhui7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/zhiganhui7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/zhiganhui7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/zhiganhui7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/zhiganhui7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/zhiganhui7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/zhiganhui7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui7.imageset/zhiganhui7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/Contents.json new file mode 100644 index 00000000..48f2cab8 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "zhiganhui8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "zhiganhui8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "zhiganhui8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/zhiganhui8.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/zhiganhui8.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/zhiganhui8.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/zhiganhui8.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/zhiganhui8@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/zhiganhui8@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/zhiganhui8@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/zhiganhui8@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/zhiganhui8@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/zhiganhui8@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/zhiganhui8@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/zhiganhui8.imageset/zhiganhui8@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/Contents.json new file mode 100644 index 00000000..e1648c6a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/demo_icon_natural_1.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/demo_icon_natural_1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/demo_icon_natural_1.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/demo_icon_natural_1.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/demo_icon_natural_1@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/demo_icon_natural_1@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/demo_icon_natural_1@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/demo_icon_natural_1@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/demo_icon_natural_1@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/demo_icon_natural_1@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/demo_icon_natural_1@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran1.imageset/demo_icon_natural_1@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/Contents.json new file mode 100644 index 00000000..5c47d996 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/demo_icon_natural_2.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/demo_icon_natural_2.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/demo_icon_natural_2.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/demo_icon_natural_2.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/demo_icon_natural_2@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/demo_icon_natural_2@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/demo_icon_natural_2@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/demo_icon_natural_2@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/demo_icon_natural_2@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/demo_icon_natural_2@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/demo_icon_natural_2@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran2.imageset/demo_icon_natural_2@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/Contents.json new file mode 100644 index 00000000..3a88f0c6 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/demo_icon_natural_3.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/demo_icon_natural_3.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/demo_icon_natural_3.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/demo_icon_natural_3.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/demo_icon_natural_3@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/demo_icon_natural_3@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/demo_icon_natural_3@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/demo_icon_natural_3@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/demo_icon_natural_3@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/demo_icon_natural_3@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/demo_icon_natural_3@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran3.imageset/demo_icon_natural_3@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/Contents.json new file mode 100644 index 00000000..7c2f4dbd --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/demo_icon_natural_4.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/demo_icon_natural_4.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/demo_icon_natural_4.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/demo_icon_natural_4.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/demo_icon_natural_4@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/demo_icon_natural_4@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/demo_icon_natural_4@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/demo_icon_natural_4@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/demo_icon_natural_4@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/demo_icon_natural_4@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/demo_icon_natural_4@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran4.imageset/demo_icon_natural_4@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/Contents.json new file mode 100644 index 00000000..a782753c --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/demo_icon_natural_5.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/demo_icon_natural_5.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/demo_icon_natural_5.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/demo_icon_natural_5.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/demo_icon_natural_5@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/demo_icon_natural_5@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/demo_icon_natural_5@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/demo_icon_natural_5@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/demo_icon_natural_5@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/demo_icon_natural_5@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/demo_icon_natural_5@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran5.imageset/demo_icon_natural_5@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/Contents.json new file mode 100644 index 00000000..f34120d5 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/demo_icon_natural_6.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/demo_icon_natural_6.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/demo_icon_natural_6.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/demo_icon_natural_6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/demo_icon_natural_6@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/demo_icon_natural_6@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/demo_icon_natural_6@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/demo_icon_natural_6@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/demo_icon_natural_6@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/demo_icon_natural_6@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/demo_icon_natural_6@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran6.imageset/demo_icon_natural_6@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/Contents.json new file mode 100644 index 00000000..c8c3035a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/demo_icon_natural_7.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/demo_icon_natural_7.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/demo_icon_natural_7.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/demo_icon_natural_7.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/demo_icon_natural_7@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/demo_icon_natural_7@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/demo_icon_natural_7@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/demo_icon_natural_7@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/demo_icon_natural_7@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/demo_icon_natural_7@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/demo_icon_natural_7@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran7.imageset/demo_icon_natural_7@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/Contents.json new file mode 100644 index 00000000..87b924ad --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_natural_8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_natural_8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_natural_8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/demo_icon_natural_8.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/demo_icon_natural_8.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/demo_icon_natural_8.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/demo_icon_natural_8.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/demo_icon_natural_8@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/demo_icon_natural_8@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/demo_icon_natural_8@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/demo_icon_natural_8@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/demo_icon_natural_8@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/demo_icon_natural_8@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/demo_icon_natural_8@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Filter/ziran8.imageset/demo_icon_natural_8@3x.png diff --git a/FULiveDemo/Assets.xcassets/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Contents.json rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/Contents.json diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/Contents.json new file mode 100644 index 00000000..a9d6c123 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_contrast.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_contrast@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_contrast@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@2x.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/demo_icon_contrast.imageset/demo_icon_contrast@3x.png diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/Contents.json" new file mode 100644 index 00000000..0a642d9b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "恢复-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "恢复-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "恢复-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/\346\201\242\345\244\215-0.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/\346\201\242\345\244\215-0.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/\346\201\242\345\244\215-0.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/\346\201\242\345\244\215-0.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/\346\201\242\345\244\215-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/\346\201\242\345\244\215-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/\346\201\242\345\244\215-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/\346\201\242\345\244\215-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/\346\201\242\345\244\215-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/\346\201\242\345\244\215-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/\346\201\242\345\244\215-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Others/\346\201\242\345\244\215.imageset/\346\201\242\345\244\215-0@3x.png" diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/Contents.json rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/Contents.json diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/Contents.json" new file mode 100644 index 00000000..60063a21 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "v脸-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "v脸-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "v脸-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/v\350\204\270-0.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/v\350\204\270-0.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/v\350\204\270-0.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/v\350\204\270-0.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/v\350\204\270-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/v\350\204\270-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/v\350\204\270-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/v\350\204\270-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/v\350\204\270-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/v\350\204\270-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/v\350\204\270-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-0.imageset/v\350\204\270-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/Contents.json" new file mode 100644 index 00000000..8b69e320 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "v脸-1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "v脸-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "v脸-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/v\350\204\270-1.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/v\350\204\270-1.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/v\350\204\270-1.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/v\350\204\270-1.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/v\350\204\270-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/v\350\204\270-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/v\350\204\270-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/v\350\204\270-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/v\350\204\270-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/v\350\204\270-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/v\350\204\270-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-1.imageset/v\350\204\270-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/Contents.json" new file mode 100644 index 00000000..b893910d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "v脸-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "v脸-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "v脸-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/v\350\204\270-2.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/v\350\204\270-2.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/v\350\204\270-2.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/v\350\204\270-2.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/v\350\204\270-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/v\350\204\270-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/v\350\204\270-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/v\350\204\270-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/v\350\204\270-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/v\350\204\270-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/v\350\204\270-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-2.imageset/v\350\204\270-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/Contents.json" new file mode 100644 index 00000000..6de4cc6e --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "v脸-3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "v脸-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "v脸-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/v\350\204\270-3.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/v\350\204\270-3.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/v\350\204\270-3.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/v\350\204\270-3.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/v\350\204\270-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/v\350\204\270-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/v\350\204\270-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/v\350\204\270-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/v\350\204\270-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/v\350\204\270-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/v\350\204\270-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/v\350\204\270-3.imageset/v\350\204\270-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/Contents.json" new file mode 100644 index 00000000..2ac9dc69 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "下巴-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "下巴-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-0.imageset/\344\270\213\345\267\264-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/Contents.json" new file mode 100644 index 00000000..7d23f881 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "下巴-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "下巴-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-1.imageset/\344\270\213\345\267\264-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/Contents.json" new file mode 100644 index 00000000..4d54d4f4 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "下巴-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "下巴-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-2.imageset/\344\270\213\345\267\264-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/Contents.json" new file mode 100644 index 00000000..c359c0bb --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "下巴-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "下巴-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\344\270\213\345\267\264-3.imageset/\344\270\213\345\267\264-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/Contents.json" new file mode 100644 index 00000000..8fddb6b2 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_mouth_thickness_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_mouth_thickness_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_mouth_thickness_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor.png" new file mode 100644 index 00000000..1b058cf1 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor@2x.png" new file mode 100644 index 00000000..18bd7993 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor@3x.png" new file mode 100644 index 00000000..8ff13a26 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-0.imageset/demo_icon_mouth_thickness_nor@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/Contents.json" new file mode 100644 index 00000000..70189a4d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_mouth_thickness_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_mouth_thickness_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_mouth_thickness_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open.png" new file mode 100644 index 00000000..f1c5eecc Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open@2x.png" new file mode 100644 index 00000000..f8059271 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open@3x.png" new file mode 100644 index 00000000..4fa5a8df Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-1.imageset/demo_icon_mouth_thickness_nor_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/Contents.json" new file mode 100644 index 00000000..97954bcc --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_mouth_thickness_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_mouth_thickness_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_mouth_thickness_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel.png" new file mode 100644 index 00000000..3e8356c4 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel@2x.png" new file mode 100644 index 00000000..446c6b5e Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel@3x.png" new file mode 100644 index 00000000..a9b09bf4 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-2.imageset/demo_icon_mouth_thickness_sel@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/Contents.json" new file mode 100644 index 00000000..2ceb6e3e --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_mouth_thickness_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_mouth_thickness_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_mouth_thickness_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open.png" new file mode 100644 index 00000000..388870e4 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open@2x.png" new file mode 100644 index 00000000..a7abe0c0 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open@3x.png" new file mode 100644 index 00000000..483f97f3 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\224\207\345\216\232\345\272\246-3.imageset/demo_icon_mouth_thickness_sel_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/Contents.json" new file mode 100644 index 00000000..e442a49b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "嘴型-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "嘴型-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-0.imageset/\345\230\264\345\236\213-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/Contents.json" new file mode 100644 index 00000000..2ab146c9 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "嘴型-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "嘴型-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-1.imageset/\345\230\264\345\236\213-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/Contents.json" new file mode 100644 index 00000000..8f6b10c6 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "嘴型-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "嘴型-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-2.imageset/\345\230\264\345\236\213-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/Contents.json" new file mode 100644 index 00000000..aa6c0eab --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "嘴型-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "嘴型-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\230\264\345\236\213-3.imageset/\345\230\264\345\236\213-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/Contents.json" new file mode 100644 index 00000000..19ad3727 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_round_eye_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_round_eye_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_round_eye_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-0.imageset/demo_icon_round_eye_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/Contents.json" new file mode 100644 index 00000000..de6fc58f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_round_eye_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_round_eye_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_round_eye_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-1.imageset/demo_icon_round_eye_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/Contents.json" new file mode 100644 index 00000000..b86efed1 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_round_eye_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_round_eye_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_round_eye_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-2.imageset/demo_icon_round_eye_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/Contents.json" new file mode 100644 index 00000000..17fafd31 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_round_eye_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_round_eye_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_round_eye_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\234\206\347\234\274-3.imageset/demo_icon_round_eye_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/Contents.json" new file mode 100644 index 00000000..5d071e55 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "大眼-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "大眼-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-0.imageset/\345\244\247\347\234\274-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/Contents.json" new file mode 100644 index 00000000..394cfb6b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "大眼-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "大眼-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-1.imageset/\345\244\247\347\234\274-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/Contents.json" new file mode 100644 index 00000000..2acf45b2 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "大眼-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "大眼-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-2.imageset/\345\244\247\347\234\274-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/Contents.json" new file mode 100644 index 00000000..405aef50 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "大眼-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "大眼-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\244\247\347\234\274-3.imageset/\345\244\247\347\234\274-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/Contents.json" new file mode 100644 index 00000000..1904077e --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "鹅蛋脸-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "鹅蛋脸-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "鹅蛋脸-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-0.imageset/\351\271\205\350\233\213\350\204\270-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/Contents.json" new file mode 100644 index 00000000..fdeab8c3 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "鹅蛋脸-1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "鹅蛋脸-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "鹅蛋脸-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-1.imageset/\351\271\205\350\233\213\350\204\270-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/Contents.json" new file mode 100644 index 00000000..e8f2fd60 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "鹅蛋脸-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "鹅蛋脸-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "鹅蛋脸-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-2.imageset/\351\271\205\350\233\213\350\204\270-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/Contents.json" new file mode 100644 index 00000000..36113b20 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "鹅蛋脸-3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "鹅蛋脸-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "鹅蛋脸-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\260\217\350\204\270-3.imageset/\351\271\205\350\233\213\350\204\270-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/Contents.json" new file mode 100644 index 00000000..641655e6 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_open_eyes_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_open_eyes_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_open_eyes_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-0.imageset/demo_icon_open_eyes_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/Contents.json" new file mode 100644 index 00000000..2a9d4aa9 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_open_eyes_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_open_eyes_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_open_eyes_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-1.imageset/demo_icon_open_eyes_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/Contents.json" new file mode 100644 index 00000000..d0a609f9 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_open_eyes_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_open_eyes_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_open_eyes_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-2.imageset/demo_icon_open_eyes_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/Contents.json" new file mode 100644 index 00000000..1a383b4d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_open_eyes_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_open_eyes_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_open_eyes_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\274\200\347\234\274\350\247\222-3.imageset/demo_icon_open_eyes_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/Contents.json" new file mode 100644 index 00000000..888f1dfa --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smile_mouth_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smile_mouth_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smile_mouth_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/demo_icon_smile_mouth_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/Contents.json" new file mode 100644 index 00000000..1c73de7f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smile_mouth_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smile_mouth_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smile_mouth_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/demo_icon_smile_mouth_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/Contents.json" new file mode 100644 index 00000000..47115e7b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smile_mouth_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smile_mouth_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smile_mouth_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/demo_icon_smile_mouth_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/Contents.json" new file mode 100644 index 00000000..8c0b1bb2 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smile_mouth_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smile_mouth_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smile_mouth_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/demo_icon_smile_mouth_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/Contents.json" new file mode 100644 index 00000000..d4f5dda5 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_lower_jaw_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_lower_jaw_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_lower_jaw_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/demo_icon_lower_jaw_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/Contents.json" new file mode 100644 index 00000000..45e2220b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_lower_jaw_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_lower_jaw_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_lower_jaw_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/demo_icon_lower_jaw_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/Contents.json" new file mode 100644 index 00000000..f8f12575 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_lower_jaw_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_lower_jaw_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_lower_jaw_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/demo_icon_lower_jaw_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/Contents.json" new file mode 100644 index 00000000..87575088 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_lower_jaw_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_lower_jaw_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_lower_jaw_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/demo_icon_lower_jaw_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/Contents.json" new file mode 100644 index 00000000..f27187ae --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦脸-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦脸-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-0.imageset/\347\230\246\350\204\270-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/Contents.json" new file mode 100644 index 00000000..b858fe73 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦脸-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦脸-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-1.imageset/\347\230\246\350\204\270-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/Contents.json" new file mode 100644 index 00000000..2c7641c8 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "瘦脸-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦脸-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦脸-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-2.imageset/\347\230\246\350\204\270-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/Contents.json" new file mode 100644 index 00000000..0523b01b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦脸-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦脸-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\350\204\270-3.imageset/\347\230\246\350\204\270-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/Contents.json" new file mode 100644 index 00000000..f3998065 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_cheekbones_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_cheekbones_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_cheekbones_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-0.imageset/demo_icon_cheekbones_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/Contents.json" new file mode 100644 index 00000000..7e481a3f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_cheekbones_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_cheekbones_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_cheekbones_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-1.imageset/demo_icon_cheekbones_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/Contents.json" new file mode 100644 index 00000000..90e05d2d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_cheekbones_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_cheekbones_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_cheekbones_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-2.imageset/demo_icon_cheekbones_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/Contents.json" new file mode 100644 index 00000000..58c55974 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_cheekbones_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_cheekbones_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_cheekbones_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\242\247\351\252\250-3.imageset/demo_icon_cheekbones_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/Contents.json" new file mode 100644 index 00000000..9588355b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦鼻-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦鼻-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-0.imageset/\347\230\246\351\274\273-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/Contents.json" new file mode 100644 index 00000000..5d6e7bec --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦鼻-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦鼻-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-1.imageset/\347\230\246\351\274\273-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/Contents.json" new file mode 100644 index 00000000..47a03a3f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦鼻-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦鼻-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-2.imageset/\347\230\246\351\274\273-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/Contents.json" new file mode 100644 index 00000000..826dfead --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "瘦鼻-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "瘦鼻-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\230\246\351\274\273-3.imageset/\347\230\246\351\274\273-3@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-0.imageset/demo_icon_eyebrow_position_nor@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-1.imageset/demo_icon_eyebrow_position_nor_open@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-2.imageset/demo_icon_eyebrow_position_sel@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\344\270\212\344\270\213-3.imageset/demo_icon_eyebrow_position_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/Contents.json" new file mode 100644 index 00000000..8fcb805c --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyebrow_thickness_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor.png" new file mode 100644 index 00000000..3e708a59 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor@2x.png" new file mode 100644 index 00000000..12694ecf Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor@3x.png" new file mode 100644 index 00000000..783a329f Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-0.imageset/demo_icon_eyebrow_thickness_nor@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/Contents.json" new file mode 100644 index 00000000..c98a15ab --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyebrow_thickness_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open.png" new file mode 100644 index 00000000..c592c904 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open@2x.png" new file mode 100644 index 00000000..7f1da706 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open@3x.png" new file mode 100644 index 00000000..a8cf62f9 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-1.imageset/demo_icon_eyebrow_thickness_nor_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/Contents.json" new file mode 100644 index 00000000..3084ee3d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyebrow_thickness_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel.png" new file mode 100644 index 00000000..966867ac Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel@2x.png" new file mode 100644 index 00000000..3359095b Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel@3x.png" new file mode 100644 index 00000000..bacad163 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-2.imageset/demo_icon_eyebrow_thickness_sel@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/Contents.json" new file mode 100644 index 00000000..57c18596 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyebrow_thickness_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyebrow_thickness_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open.png" new file mode 100644 index 00000000..ee4f1b51 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open@2x.png" new file mode 100644 index 00000000..fe5f5633 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open@3x.png" new file mode 100644 index 00000000..9621535f Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\346\257\233\347\262\227\347\273\206-3.imageset/demo_icon_eyebrow_thickness_sel_open@3x.png" differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-0.imageset/demo_icon_eyebrow_spacing_nor@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-1.imageset/demo_icon_eyebrow_spacing_nor_open@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-2.imageset/demo_icon_eyebrow_spacing_sel@3x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/Contents.json" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/Contents.json" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/Contents.json" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\211\351\227\264\350\267\235-3.imageset/demo_icon_eyebrow_spacing_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/Contents.json" new file mode 100644 index 00000000..7f32c38d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyelid_down_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyelid_down_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyelid_down_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor.png" new file mode 100644 index 00000000..a4d485d5 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor@2x.png" new file mode 100644 index 00000000..7acb94cb Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor@3x.png" new file mode 100644 index 00000000..03064d22 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-0.imageset/demo_icon_eyelid_down_nor@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/Contents.json" new file mode 100644 index 00000000..1dc27fd0 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyelid_down_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyelid_down_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyelid_down_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open.png" new file mode 100644 index 00000000..865a2bc7 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open@2x.png" new file mode 100644 index 00000000..596d10d8 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open@3x.png" new file mode 100644 index 00000000..6b8d25a5 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-1.imageset/demo_icon_eyelid_down_nor_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/Contents.json" new file mode 100644 index 00000000..1c0dfab4 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyelid_down_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyelid_down_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyelid_down_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel.png" new file mode 100644 index 00000000..2fee29fd Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel@2x.png" new file mode 100644 index 00000000..487eeb57 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel@3x.png" new file mode 100644 index 00000000..3be44e62 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-2.imageset/demo_icon_eyelid_down_sel@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/Contents.json" new file mode 100644 index 00000000..12cb6a2c --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eyelid_down_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eyelid_down_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eyelid_down_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open.png" new file mode 100644 index 00000000..dd8c3843 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open@2x.png" new file mode 100644 index 00000000..cf62ed26 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open@3x.png" new file mode 100644 index 00000000..0aa26c37 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\221\344\270\213\350\207\263-3.imageset/demo_icon_eyelid_down_sel_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/Contents.json" new file mode 100644 index 00000000..5103a918 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_position_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_position_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_position_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor.png" new file mode 100644 index 00000000..f4030072 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor@2x.png" new file mode 100644 index 00000000..a753cfe3 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor@3x.png" new file mode 100644 index 00000000..db167e11 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-0.imageset/demo_icon_eye_position_nor@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/Contents.json" new file mode 100644 index 00000000..83aae8c0 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_position_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_position_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_position_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open.png" new file mode 100644 index 00000000..e25a3d08 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open@2x.png" new file mode 100644 index 00000000..d175bbad Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open@3x.png" new file mode 100644 index 00000000..871c840b Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-1.imageset/demo_icon_eye_position_nor_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/Contents.json" new file mode 100644 index 00000000..d9f3d090 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_position_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_position_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_position_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel.png" new file mode 100644 index 00000000..85fc7742 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel@2x.png" new file mode 100644 index 00000000..5a77585c Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel@3x.png" new file mode 100644 index 00000000..c06b8027 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-2.imageset/demo_icon_eye_position_sel@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/Contents.json" new file mode 100644 index 00000000..9d3b5fa6 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_position_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_position_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_position_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open.png" new file mode 100644 index 00000000..7a9078e6 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open@2x.png" new file mode 100644 index 00000000..7d725bd7 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open@3x.png" new file mode 100644 index 00000000..892cd805 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\344\275\215\347\275\256-3.imageset/demo_icon_eye_position_sel_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/Contents.json" new file mode 100644 index 00000000..83c25857 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_angle_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_angle_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_angle_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/demo_icon_eye_angle_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/Contents.json" new file mode 100644 index 00000000..155a380c --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_angle_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_angle_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_angle_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/demo_icon_eye_angle_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/Contents.json" new file mode 100644 index 00000000..bca2aa54 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_angle_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_angle_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_angle_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/demo_icon_eye_angle_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/Contents.json" new file mode 100644 index 00000000..644256d6 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_angle_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_angle_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_angle_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/demo_icon_eye_angle_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/Contents.json" new file mode 100644 index 00000000..784b2238 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_distance_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_distance_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_distance_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-0.imageset/demo_icon_eye_distance_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/Contents.json" new file mode 100644 index 00000000..de01dd06 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_distance_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_distance_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_distance_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-1.imageset/demo_icon_eye_distance_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/Contents.json" new file mode 100644 index 00000000..421edb90 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_distance_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_distance_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_distance_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-2.imageset/demo_icon_eye_distance_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/Contents.json" new file mode 100644 index 00000000..98787311 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_eye_distance_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_eye_distance_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_eye_distance_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\234\274\350\267\235-3.imageset/demo_icon_eye_distance_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/Contents.json" new file mode 100644 index 00000000..a40b0885 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "小脸-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "小脸-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "小脸-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-0.imageset/\345\260\217\350\204\270-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/Contents.json" new file mode 100644 index 00000000..90a0d264 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "小脸-1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "小脸-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "小脸-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-1.imageset/\345\260\217\350\204\270-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/Contents.json" new file mode 100644 index 00000000..74208174 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "小脸-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "小脸-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "小脸-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-2.imageset/\345\260\217\350\204\270-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/Contents.json" new file mode 100644 index 00000000..cd360bff --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "小脸-3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "小脸-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "小脸-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\237\255\350\204\270-3.imageset/\345\260\217\350\204\270-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/Contents.json" new file mode 100644 index 00000000..e75291b3 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "窄脸-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "窄脸-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "窄脸-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-0.imageset/\347\252\204\350\204\270-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/Contents.json" new file mode 100644 index 00000000..cf2e13f8 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "窄脸-1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "窄脸-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "窄脸-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-1.imageset/\347\252\204\350\204\270-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/Contents.json" new file mode 100644 index 00000000..8c3e9968 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "窄脸-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "窄脸-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "窄脸-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-2.imageset/\347\252\204\350\204\270-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/Contents.json" new file mode 100644 index 00000000..b58231cd --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "窄脸-3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "窄脸-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "窄脸-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\252\204\350\204\270-3.imageset/\347\252\204\350\204\270-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/Contents.json" new file mode 100644 index 00000000..0e2d12e3 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shrinking_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shrinking_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shrinking_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-0.imageset/demo_icon_shrinking_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/Contents.json" new file mode 100644 index 00000000..1f8f11a7 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shrinking_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shrinking_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shrinking_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-1.imageset/demo_icon_shrinking_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/Contents.json" new file mode 100644 index 00000000..e3da453a --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shrinking_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shrinking_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shrinking_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-2.imageset/demo_icon_shrinking_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/Contents.json" new file mode 100644 index 00000000..071173ed --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shrinking_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shrinking_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shrinking_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\347\274\251\344\272\272\344\270\255-3.imageset/demo_icon_shrinking_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/Contents.json" new file mode 100644 index 00000000..230b9a0a --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_proboscis_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_proboscis_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_proboscis_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-0.imageset/demo_icon_proboscis_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/Contents.json" new file mode 100644 index 00000000..67e29d08 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_proboscis_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_proboscis_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_proboscis_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-1.imageset/demo_icon_proboscis_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/Contents.json" new file mode 100644 index 00000000..59380419 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_proboscis_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_proboscis_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_proboscis_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-2.imageset/demo_icon_proboscis_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/Contents.json" new file mode 100644 index 00000000..1200928d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_proboscis_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_proboscis_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_proboscis_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\225\277\351\274\273-3.imageset/demo_icon_proboscis_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/Contents.json" new file mode 100644 index 00000000..235fd05d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "额头-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "额头-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-0.imageset/\351\242\235\345\244\264-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/Contents.json" new file mode 100644 index 00000000..07a81e56 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "额头-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "额头-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-1.imageset/\351\242\235\345\244\264-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/Contents.json" new file mode 100644 index 00000000..19a29072 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "额头-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "额头-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-2.imageset/\351\242\235\345\244\264-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/Contents.json" new file mode 100644 index 00000000..800db95a --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "额头-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "额头-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Shape/\351\242\235\345\244\264-3.imageset/\351\242\235\345\244\264-3@3x.png" diff --git a/FULiveDemo/Assets.xcassets/Homepage/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/Contents.json rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/Contents.json diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/Contents.json" new file mode 100644 index 00000000..466f2df7 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stereoscopic_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stereoscopic_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stereoscopic_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor.png" new file mode 100644 index 00000000..35584196 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor@2x.png" new file mode 100644 index 00000000..8d8fb0ca Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor@3x.png" new file mode 100644 index 00000000..b8ed131e Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-0.imageset/demo_icon_stereoscopic_nor@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/Contents.json" new file mode 100644 index 00000000..34e57050 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stereoscopic_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stereoscopic_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stereoscopic_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open.png" new file mode 100644 index 00000000..fc123dea Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open@2x.png" new file mode 100644 index 00000000..a58ce723 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open@3x.png" new file mode 100644 index 00000000..99b58f09 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-1.imageset/demo_icon_stereoscopic_nor_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/Contents.json" new file mode 100644 index 00000000..be90c951 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stereoscopic_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stereoscopic_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stereoscopic_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel.png" new file mode 100644 index 00000000..d33d8553 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel@2x.png" new file mode 100644 index 00000000..7d0961b7 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel@3x.png" new file mode 100644 index 00000000..7c79c7c0 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-2.imageset/demo_icon_stereoscopic_sel@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/Contents.json" new file mode 100644 index 00000000..08919eb8 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stereoscopic_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stereoscopic_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stereoscopic_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open.png" new file mode 100644 index 00000000..a20ca2d6 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open@2x.png" new file mode 100644 index 00000000..3f5ccd98 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open@2x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open@3x.png" new file mode 100644 index 00000000..30050dd7 Binary files /dev/null and "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\224\345\256\230\347\253\213\344\275\223-3.imageset/demo_icon_stereoscopic_sel_open@3x.png" differ diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/Contents.json" new file mode 100644 index 00000000..77260577 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "亮眼-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "亮眼-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-0.imageset/\344\272\256\347\234\274-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/Contents.json" new file mode 100644 index 00000000..72ddd297 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "亮眼-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "亮眼-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-1.imageset/\344\272\256\347\234\274-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/Contents.json" new file mode 100644 index 00000000..b9f5e203 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "亮眼-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "亮眼-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-2.imageset/\344\272\256\347\234\274-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/Contents.json" new file mode 100644 index 00000000..22c4d388 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "亮眼-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "亮眼-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\344\272\256\347\234\274-3.imageset/\344\272\256\347\234\274-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/Contents.json" new file mode 100644 index 00000000..72f59e2d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_wrinkle_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_wrinkle_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_wrinkle_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/demo_icon_wrinkle_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/Contents.json" new file mode 100644 index 00000000..d43c4ffb --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_wrinkle_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_wrinkle_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_wrinkle_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/demo_icon_wrinkle_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/Contents.json" new file mode 100644 index 00000000..50a00d38 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_wrinkle_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_wrinkle_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_wrinkle_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/demo_icon_wrinkle_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/Contents.json" new file mode 100644 index 00000000..43339918 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_wrinkle_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_wrinkle_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_wrinkle_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/demo_icon_wrinkle_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/Contents.json" new file mode 100644 index 00000000..26d7ec79 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_dark_circles_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_dark_circles_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_dark_circles_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/demo_icon_dark_circles_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/Contents.json" new file mode 100644 index 00000000..729aef72 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_dark_circles_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_dark_circles_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_dark_circles_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/demo_icon_dark_circles_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/Contents.json" new file mode 100644 index 00000000..239d9ad6 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_dark_circles_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_dark_circles_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_dark_circles_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/demo_icon_dark_circles_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/Contents.json" new file mode 100644 index 00000000..82afaf17 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_dark_circles_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_dark_circles_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_dark_circles_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/demo_icon_dark_circles_sel_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/Contents.json" new file mode 100644 index 00000000..cb230970 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "磨皮-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "磨皮-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "磨皮-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-0.imageset/\347\243\250\347\232\256-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/Contents.json" new file mode 100644 index 00000000..e8ccc16f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "磨皮-1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "磨皮-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "磨皮-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-1.imageset/\347\243\250\347\232\256-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/Contents.json" new file mode 100644 index 00000000..5589216b --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "磨皮-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "磨皮-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "磨皮-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-2.imageset/\347\243\250\347\232\256-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/Contents.json" new file mode 100644 index 00000000..d41332c5 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "磨皮-3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "磨皮-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "磨皮-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\243\250\347\232\256-3.imageset/\347\243\250\347\232\256-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/Contents.json" new file mode 100644 index 00000000..7f654258 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "红润-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "红润-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-0.imageset/\347\272\242\346\266\246-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/Contents.json" new file mode 100644 index 00000000..239ab46f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "红润-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "红润-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-1.imageset/\347\272\242\346\266\246-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/Contents.json" new file mode 100644 index 00000000..9c6632b3 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "红润-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "红润-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-2.imageset/\347\272\242\346\266\246-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/Contents.json" new file mode 100644 index 00000000..dfd47ec5 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "红润-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "红润-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\272\242\346\266\246-3.imageset/\347\272\242\346\266\246-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/Contents.json" new file mode 100644 index 00000000..f07a33b9 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美牙-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美牙-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-0.imageset/\347\276\216\347\211\231-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/Contents.json" new file mode 100644 index 00000000..b269f31c --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美牙-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美牙-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-1.imageset/\347\276\216\347\211\231-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/Contents.json" new file mode 100644 index 00000000..d1c8e2e0 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美牙-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美牙-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-2.imageset/\347\276\216\347\211\231-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/Contents.json" new file mode 100644 index 00000000..c6ca775f --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美牙-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美牙-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\211\231-3.imageset/\347\276\216\347\211\231-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/Contents.json" new file mode 100644 index 00000000..2d5b603a --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美白-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美白-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-0.imageset/\347\276\216\347\231\275-0@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/Contents.json" new file mode 100644 index 00000000..3d0791b3 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美白-1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美白-1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-1.imageset/\347\276\216\347\231\275-1@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/Contents.json" new file mode 100644 index 00000000..bf9bcc96 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美白-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美白-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-2.imageset/\347\276\216\347\231\275-2@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/Contents.json" new file mode 100644 index 00000000..a52aba33 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美白-3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美白-3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\347\276\216\347\231\275-3.imageset/\347\276\216\347\231\275-3@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/Contents.json" new file mode 100644 index 00000000..76ff931d --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_sharpen_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_sharpen_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_sharpen_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-0.imageset/demo_icon_sharpen_nor@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/Contents.json" new file mode 100644 index 00000000..2e8dc131 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_sharpen_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_sharpen_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_sharpen_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-1.imageset/demo_icon_sharpen_nor_open@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/Contents.json" new file mode 100644 index 00000000..f3fd759c --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_sharpen_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_sharpen_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_sharpen_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-2.imageset/demo_icon_sharpen_sel@3x.png" diff --git "a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/Contents.json" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/Contents.json" new file mode 100644 index 00000000..ef403810 --- /dev/null +++ "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_sharpen_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_sharpen_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_sharpen_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@2x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@2x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@2x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@2x.png" diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@3x.png" "b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@3x.png" similarity index 100% rename from "FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@3x.png" rename to "FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Skin/\351\224\220\345\214\226-3.imageset/demo_icon_sharpen_sel_open@3x.png" diff --git a/FULiveDemo/Assets.xcassets/Makeup/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Contents.json rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Contents.json diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/Contents.json new file mode 100644 index 00000000..e09bdcff --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_null _nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_null _nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_null _nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/demo_icon_null _nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/demo_icon_null _nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/demo_icon_null _nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/demo_icon_null _nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/demo_icon_null _nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/demo_icon_null _nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/demo_icon_null _nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/demo_icon_null _nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/demo_icon_null _nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/demo_icon_null _nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/demo_icon_null _nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-0.imageset/demo_icon_null _nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/Contents.json new file mode 100644 index 00000000..b29c60c0 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_null _sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_null _sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_null _sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/demo_icon_null _sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/demo_icon_null _sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/demo_icon_null _sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/demo_icon_null _sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/demo_icon_null _sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/demo_icon_null _sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/demo_icon_null _sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/demo_icon_null _sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/demo_icon_null _sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/demo_icon_null _sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/demo_icon_null _sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/None-2.imageset/demo_icon_null _sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/Contents.json new file mode 100644 index 00000000..57320985 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_1_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_1_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_1_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/demo_icon_style_1_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/demo_icon_style_1_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/demo_icon_style_1_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/demo_icon_style_1_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/demo_icon_style_1_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/demo_icon_style_1_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/demo_icon_style_1_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/demo_icon_style_1_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/demo_icon_style_1_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/demo_icon_style_1_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/demo_icon_style_1_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-0.imageset/demo_icon_style_1_nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/Contents.json new file mode 100644 index 00000000..310d64fc --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_1_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_1_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_1_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/demo_icon_style_1_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/demo_icon_style_1_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/demo_icon_style_1_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/demo_icon_style_1_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/demo_icon_style_1_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/demo_icon_style_1_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/demo_icon_style_1_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/demo_icon_style_1_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/demo_icon_style_1_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/demo_icon_style_1_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/demo_icon_style_1_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style1-2.imageset/demo_icon_style_1_sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/Contents.json new file mode 100644 index 00000000..1bfa886e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_2_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_2_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_2_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/demo_icon_style_2_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/demo_icon_style_2_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/demo_icon_style_2_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/demo_icon_style_2_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/demo_icon_style_2_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/demo_icon_style_2_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/demo_icon_style_2_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/demo_icon_style_2_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/demo_icon_style_2_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/demo_icon_style_2_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/demo_icon_style_2_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-0.imageset/demo_icon_style_2_nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/Contents.json new file mode 100644 index 00000000..101005fd --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_2_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_2_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_2_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/demo_icon_style_2_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/demo_icon_style_2_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/demo_icon_style_2_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/demo_icon_style_2_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/demo_icon_style_2_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/demo_icon_style_2_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/demo_icon_style_2_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/demo_icon_style_2_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/demo_icon_style_2_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/demo_icon_style_2_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/demo_icon_style_2_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style2-2.imageset/demo_icon_style_2_sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/Contents.json new file mode 100644 index 00000000..1c2fdfe4 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_3_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_3_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_3_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/demo_icon_style_3_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/demo_icon_style_3_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/demo_icon_style_3_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/demo_icon_style_3_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/demo_icon_style_3_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/demo_icon_style_3_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/demo_icon_style_3_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/demo_icon_style_3_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/demo_icon_style_3_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/demo_icon_style_3_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/demo_icon_style_3_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-0.imageset/demo_icon_style_3_nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/Contents.json new file mode 100644 index 00000000..79798a67 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_3_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_3_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_3_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/demo_icon_style_3_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/demo_icon_style_3_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/demo_icon_style_3_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/demo_icon_style_3_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/demo_icon_style_3_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/demo_icon_style_3_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/demo_icon_style_3_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/demo_icon_style_3_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/demo_icon_style_3_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/demo_icon_style_3_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/demo_icon_style_3_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style3-2.imageset/demo_icon_style_3_sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/Contents.json new file mode 100644 index 00000000..2f8640b0 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_4_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_4_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_4_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/demo_icon_style_4_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/demo_icon_style_4_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/demo_icon_style_4_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/demo_icon_style_4_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/demo_icon_style_4_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/demo_icon_style_4_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/demo_icon_style_4_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/demo_icon_style_4_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/demo_icon_style_4_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/demo_icon_style_4_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/demo_icon_style_4_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-0.imageset/demo_icon_style_4_nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/Contents.json new file mode 100644 index 00000000..bfb46499 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_4_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_4_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_4_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/demo_icon_style_4_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/demo_icon_style_4_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/demo_icon_style_4_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/demo_icon_style_4_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/demo_icon_style_4_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/demo_icon_style_4_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/demo_icon_style_4_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/demo_icon_style_4_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/demo_icon_style_4_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/demo_icon_style_4_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/demo_icon_style_4_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style4-2.imageset/demo_icon_style_4_sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/Contents.json new file mode 100644 index 00000000..3bc5d621 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_5_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_5_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_5_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/demo_icon_style_5_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/demo_icon_style_5_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/demo_icon_style_5_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/demo_icon_style_5_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/demo_icon_style_5_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/demo_icon_style_5_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/demo_icon_style_5_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/demo_icon_style_5_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/demo_icon_style_5_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/demo_icon_style_5_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/demo_icon_style_5_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-0.imageset/demo_icon_style_5_nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/Contents.json new file mode 100644 index 00000000..1999731e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_5_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_5_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_5_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/demo_icon_style_5_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/demo_icon_style_5_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/demo_icon_style_5_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/demo_icon_style_5_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/demo_icon_style_5_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/demo_icon_style_5_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/demo_icon_style_5_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/demo_icon_style_5_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/demo_icon_style_5_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/demo_icon_style_5_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/demo_icon_style_5_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style5-2.imageset/demo_icon_style_5_sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/Contents.json new file mode 100644 index 00000000..90c5ee9e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_6_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_6_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_6_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/demo_icon_style_6_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/demo_icon_style_6_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/demo_icon_style_6_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/demo_icon_style_6_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/demo_icon_style_6_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/demo_icon_style_6_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/demo_icon_style_6_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/demo_icon_style_6_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/demo_icon_style_6_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/demo_icon_style_6_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/demo_icon_style_6_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-0.imageset/demo_icon_style_6_nor@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/Contents.json new file mode 100644 index 00000000..c0b1aa13 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_6_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_6_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_6_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/demo_icon_style_6_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/demo_icon_style_6_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/demo_icon_style_6_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/demo_icon_style_6_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/demo_icon_style_6_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/demo_icon_style_6_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/demo_icon_style_6_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/demo_icon_style_6_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/demo_icon_style_6_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/demo_icon_style_6_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/demo_icon_style_6_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style6-2.imageset/demo_icon_style_6_sel@3x.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/Contents.json new file mode 100644 index 00000000..5ce10915 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/Contents.json @@ -0,0 +1,62 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_7_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_7_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_7_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "filename" : "demo_icon_style_7_nor-1.png", + "idiom" : "universal", + "locale" : "zh-Hans", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_7_nor@2x-1.png", + "idiom" : "universal", + "locale" : "zh-Hans", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_7_nor@3x-1.png", + "idiom" : "universal", + "locale" : "zh-Hans", + "scale" : "3x" + }, + { + "filename" : "demo_icon_en_style_7_nor.png", + "idiom" : "universal", + "locale" : "en", + "scale" : "1x" + }, + { + "filename" : "demo_icon_en_style_7_nor@2x.png", + "idiom" : "universal", + "locale" : "en", + "scale" : "2x" + }, + { + "filename" : "demo_icon_en_style_7_nor@3x.png", + "idiom" : "universal", + "locale" : "en", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_en_style_7_nor.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_en_style_7_nor.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_en_style_7_nor@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_en_style_7_nor@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_en_style_7_nor@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/demo_icon_en_style_7_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_en_style_7_nor@3x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor-1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor-1.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor.png new file mode 100644 index 00000000..a32987e4 Binary files /dev/null and b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor.png differ diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@2x-1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@2x-1.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@2x.png new file mode 100644 index 00000000..d96ad9bc Binary files /dev/null and b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@2x.png differ diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@3x-1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/demo_icon_style_7_nor@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@3x-1.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@3x.png new file mode 100644 index 00000000..637eb8b4 Binary files /dev/null and b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-0.imageset/demo_icon_style_7_nor@3x.png differ diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/Contents.json b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/Contents.json new file mode 100644 index 00000000..e512164c --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/Contents.json @@ -0,0 +1,62 @@ +{ + "images" : [ + { + "filename" : "demo_icon_style_7_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_7_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_7_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "filename" : "demo_icon_style_7_sel-1.png", + "idiom" : "universal", + "locale" : "zh-Hans", + "scale" : "1x" + }, + { + "filename" : "demo_icon_style_7_sel@2x-1.png", + "idiom" : "universal", + "locale" : "zh-Hans", + "scale" : "2x" + }, + { + "filename" : "demo_icon_style_7_sel@3x-1.png", + "idiom" : "universal", + "locale" : "zh-Hans", + "scale" : "3x" + }, + { + "filename" : "demo_icon_en_style_7_sel.png", + "idiom" : "universal", + "locale" : "en", + "scale" : "1x" + }, + { + "filename" : "demo_icon_en_style_7_sel@2x.png", + "idiom" : "universal", + "locale" : "en", + "scale" : "2x" + }, + { + "filename" : "demo_icon_en_style_7_sel@3x.png", + "idiom" : "universal", + "locale" : "en", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_en_style_7_sel.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_en_style_7_sel.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_en_style_7_sel@2x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_en_style_7_sel@2x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_en_style_7_sel@3x.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/demo_icon_en_style_7_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_en_style_7_sel@3x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel-1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel-1.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel.png new file mode 100644 index 00000000..221db579 Binary files /dev/null and b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel.png differ diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@2x-1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@2x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@2x-1.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@2x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@2x.png new file mode 100644 index 00000000..5c4e54a7 Binary files /dev/null and b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@2x.png differ diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@3x-1.png similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/demo_icon_style_7_sel@3x.png rename to FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@3x-1.png diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@3x.png b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@3x.png new file mode 100644 index 00000000..fad17da7 Binary files /dev/null and b/FUBeautyComponent/FUBeautyComponent/Resource/FUBeautyComponent.xcassets/Style/Style7-2.imageset/demo_icon_style_7_sel@3x.png differ diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/beauty_filter.json b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_filter.json new file mode 100644 index 00000000..08d73fe7 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_filter.json @@ -0,0 +1,322 @@ +[ + { + "filterIndex":0, + "filterName":"origin", + "filterLevel":0.4 + }, + { + "filterIndex":1, + "filterName":"ziran1", + "filterLevel":0.4 + }, + { + "filterIndex":2, + "filterName":"ziran2", + "filterLevel":0.4 + }, + { + "filterIndex":3, + "filterName":"ziran3", + "filterLevel":0.4 + }, + { + "filterIndex":4, + "filterName":"ziran4", + "filterLevel":0.4 + }, + { + "filterIndex":5, + "filterName":"ziran5", + "filterLevel":0.4 + }, + { + "filterIndex":6, + "filterName":"ziran6", + "filterLevel":0.4 + }, + { + "filterIndex":7, + "filterName":"ziran7", + "filterLevel":0.4 + }, + { + "filterIndex":8, + "filterName":"ziran8", + "filterLevel":0.4 + }, + { + "filterIndex":9, + "filterName":"zhiganhui1", + "filterLevel":0.4 + }, + { + "filterIndex":10, + "filterName":"zhiganhui2", + "filterLevel":0.4 + }, + { + "filterIndex":11, + "filterName":"zhiganhui3", + "filterLevel":0.4 + }, + { + "filterIndex":12, + "filterName":"zhiganhui4", + "filterLevel":0.4 + }, + { + "filterIndex":13, + "filterName":"zhiganhui5", + "filterLevel":0.4 + }, + { + "filterIndex":14, + "filterName":"zhiganhui6", + "filterLevel":0.4 + }, + { + "filterIndex":15, + "filterName":"zhiganhui7", + "filterLevel":0.4 + }, + { + "filterIndex":16, + "filterName":"zhiganhui8", + "filterLevel":0.4 + }, + { + "filterIndex":17, + "filterName":"mitao1", + "filterLevel":0.4 + }, + { + "filterIndex":18, + "filterName":"mitao2", + "filterLevel":0.4 + }, + { + "filterIndex":19, + "filterName":"mitao3", + "filterLevel":0.4 + }, + { + "filterIndex":20, + "filterName":"mitao4", + "filterLevel":0.4 + }, + { + "filterIndex":21, + "filterName":"mitao5", + "filterLevel":0.4 + }, + { + "filterIndex":22, + "filterName":"mitao6", + "filterLevel":0.4 + }, + { + "filterIndex":23, + "filterName":"mitao7", + "filterLevel":0.4 + }, + { + "filterIndex":24, + "filterName":"mitao8", + "filterLevel":0.4 + }, + { + "filterIndex":25, + "filterName":"bailiang1", + "filterLevel":0.4 + }, + { + "filterIndex":26, + "filterName":"bailiang2", + "filterLevel":0.4 + }, + { + "filterIndex":27, + "filterName":"bailiang3", + "filterLevel":0.4 + }, + { + "filterIndex":28, + "filterName":"bailiang4", + "filterLevel":0.4 + }, + { + "filterIndex":29, + "filterName":"bailiang5", + "filterLevel":0.4 + }, + { + "filterIndex":30, + "filterName":"bailiang6", + "filterLevel":0.4 + }, + { + "filterIndex":31, + "filterName":"bailiang7", + "filterLevel":0.4 + }, + { + "filterIndex":32, + "filterName":"fennen1", + "filterLevel":0.4 + }, + { + "filterIndex":33, + "filterName":"fennen2", + "filterLevel":0.4 + }, + { + "filterIndex":34, + "filterName":"fennen3", + "filterLevel":0.4 + }, + { + "filterIndex":35, + "filterName":"fennen5", + "filterLevel":0.4 + }, + { + "filterIndex":36, + "filterName":"fennen6", + "filterLevel":0.4 + }, + { + "filterIndex":37, + "filterName":"fennen7", + "filterLevel":0.4 + }, + { + "filterIndex":38, + "filterName":"fennen8", + "filterLevel":0.4 + }, + { + "filterIndex":39, + "filterName":"lengsediao1", + "filterLevel":0.4 + }, + { + "filterIndex":40, + "filterName":"lengsediao2", + "filterLevel":0.4 + }, + { + "filterIndex":41, + "filterName":"lengsediao3", + "filterLevel":0.4 + }, + { + "filterIndex":42, + "filterName":"lengsediao4", + "filterLevel":0.4 + }, + { + "filterIndex":43, + "filterName":"lengsediao7", + "filterLevel":0.4 + }, + { + "filterIndex":44, + "filterName":"lengsediao8", + "filterLevel":0.4 + }, + { + "filterIndex":45, + "filterName":"lengsediao11", + "filterLevel":0.4 + }, + { + "filterIndex":46, + "filterName":"nuansediao1", + "filterLevel":0.4 + }, + { + "filterIndex":47, + "filterName":"nuansediao2", + "filterLevel":0.4 + }, + { + "filterIndex":48, + "filterName":"gexing1", + "filterLevel":0.4 + }, + { + "filterIndex":49, + "filterName":"gexing2", + "filterLevel":0.4 + }, + { + "filterIndex":50, + "filterName":"gexing3", + "filterLevel":0.4 + }, + { + "filterIndex":51, + "filterName":"gexing4", + "filterLevel":0.4 + }, + { + "filterIndex":52, + "filterName":"gexing5", + "filterLevel":0.4 + }, + { + "filterIndex":53, + "filterName":"gexing7", + "filterLevel":0.4 + }, + { + "filterIndex":54, + "filterName":"gexing10", + "filterLevel":0.4 + }, + { + "filterIndex":55, + "filterName":"gexing11", + "filterLevel":0.4 + }, + { + "filterIndex":56, + "filterName":"xiaoqingxin1", + "filterLevel":0.4 + }, + { + "filterIndex":57, + "filterName":"xiaoqingxin3", + "filterLevel":0.4 + }, + { + "filterIndex":58, + "filterName":"xiaoqingxin4", + "filterLevel":0.4 + }, + { + "filterIndex":59, + "filterName":"xiaoqingxin6", + "filterLevel":0.4 + }, + { + "filterIndex":60, + "filterName":"heibai1", + "filterLevel":0.4 + }, + { + "filterIndex":61, + "filterName":"heibai2", + "filterLevel":0.4 + }, + { + "filterIndex":62, + "filterName":"heibai3", + "filterLevel":0.4 + }, + { + "filterIndex":63, + "filterName":"heibai4", + "filterLevel":0.4 + } +] diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/beauty_shape.json b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_shape.json new file mode 100644 index 00000000..dbe915b5 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_shape.json @@ -0,0 +1,202 @@ +[ + { + "name":"瘦脸", + "type":0, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"v脸", + "type":1, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"窄脸", + "type":2, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"短脸", + "type":3, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"小脸", + "type":4, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"瘦颧骨", + "type":5, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"瘦下颌骨", + "type":6, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"大眼", + "type":7, + "currentValue":0.4, + "defaultValue":0.4, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"圆眼", + "type":8, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"下巴", + "type":9, + "currentValue":0.3, + "defaultValue":0.3, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"额头", + "type":10, + "currentValue":0.3, + "defaultValue":0.3, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"瘦鼻", + "type":11, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"嘴型", + "type":12, + "currentValue":0.4, + "defaultValue":0.4, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"嘴唇厚度", + "type":13, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":true + }, + { + "name":"眼睛位置", + "type":14, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":true + }, + { + "name":"开眼角", + "type":15, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"眼睑下至", + "type":16, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":true + }, + { + "name":"眼距", + "type":17, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"眼睛角度", + "type":18, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"长鼻", + "type":19, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"缩人中", + "type":20, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":false + }, + { + "name":"微笑嘴角", + "type":21, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "differentiateDevicePerformance":false + }, + { + "name":"眉毛上下", + "type":22, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":true + }, + { + "name":"眉间距", + "type":23, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":true + }, + { + "name":"眉毛粗细", + "type":24, + "currentValue":0.5, + "defaultValue":0.5, + "defaultValueInMiddle":true, + "differentiateDevicePerformance":true + } +] diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/beauty_skin.json b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_skin.json new file mode 100644 index 00000000..e8cbc1ea --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_skin.json @@ -0,0 +1,74 @@ +[ + { + "name":"磨皮", + "type":0, + "currentValue":4.2, + "defaultValue":4.2, + "defaultValueInMiddle":false, + "ratio":6 + }, + { + "name":"美白", + "type":1, + "currentValue":0.3, + "defaultValue":0.3, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"红润", + "type":2, + "currentValue":0.3, + "defaultValue":0.3, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"锐化", + "type":3, + "currentValue":0.2, + "defaultValue":0.2, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"五官立体", + "type":4, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"亮眼", + "type":5, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"美牙", + "type":6, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"去黑眼圈", + "type":7, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "ratio":1 + }, + { + "name":"去法令纹", + "type":8, + "currentValue":0.0, + "defaultValue":0.0, + "defaultValueInMiddle":false, + "ratio":1 + } +] diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/beauty_style.json b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_style.json new file mode 100644 index 00000000..eaa79239 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/beauty_style.json @@ -0,0 +1,314 @@ +[ + { + "name":"None", + "blurLevel":0.0, + "colorLevel":0.0, + "redLevel":0.0, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.0, + "toothWhiten":0.0, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.0, + "cheekV":0.0, + "cheekNarrow":0.0, + "cheekShort":0.0, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.0, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.0, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"origin", + "filterLevel":0.0 + }, + { + "name":"Style1", + "blurLevel":3.0, + "colorLevel":0.5, + "redLevel":0.0, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.35, + "toothWhiten":0.25, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.45, + "cheekV":0.08, + "cheekNarrow":0.0, + "cheekShort":0.05, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.3, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.0, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"bailiang1", + "filterLevel":0.2 + }, + { + "name":"Style2", + "blurLevel":3.0, + "colorLevel":0.7, + "redLevel":0.3, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.5, + "toothWhiten":0.4, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.3, + "cheekV":0.0, + "cheekNarrow":0.0, + "cheekShort":0.0, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.25, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.5, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"ziran3", + "filterLevel":0.35 + }, + { + "name":"Style3", + "blurLevel":1.8, + "colorLevel":0.6, + "redLevel":0.1, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.0, + "toothWhiten":0.0, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.3, + "cheekV":0.0, + "cheekNarrow":0.0, + "cheekShort":0.15, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.65, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.3, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"origin", + "filterLevel":0.0 + }, + { + "name":"Style4", + "blurLevel":3.0, + "colorLevel":0.25, + "redLevel":0.0, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.0, + "toothWhiten":0.0, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.0, + "cheekV":0.0, + "cheekNarrow":0.0, + "cheekShort":0.0, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.0, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.0, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"origin", + "filterLevel":0.0 + }, + { + "name":"Style5", + "blurLevel":3.0, + "colorLevel":0.7, + "redLevel":0.0, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.0, + "toothWhiten":0.0, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.0, + "cheekV":0.0, + "cheekNarrow":0.35, + "cheekShort":0.0, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.65, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.0, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"fennen1", + "filterLevel":0.4 + }, + { + "name":"Style6", + "blurLevel":3.0, + "colorLevel":0.5, + "redLevel":0.0, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.0, + "toothWhiten":0.0, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.0, + "cheekV":0.0, + "cheekNarrow":0.0, + "cheekShort":0.0, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.0, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.0, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"fennen1", + "filterLevel":0.4 + }, + { + "name":"Style7", + "blurLevel":3.3, + "colorLevel":0.2, + "redLevel":0.65, + "sharpen":0.0, + "faceThreed":0.0, + "eyeBright":0.0, + "toothWhiten":0.0, + "removePouchStrength":0.0, + "removeNasolabialFoldsStrength":0.0, + "cheekThinning":0.1, + "cheekV":0.0, + "cheekNarrow":0.0, + "cheekShort":0.05, + "cheekSmall":0.0, + "cheekbones":0.0, + "lowerJaw":0.0, + "eyeEnlarging":0.0, + "eyeCircle":0.0, + "chin":0.5, + "forehead":0.5, + "nose":0.0, + "mouth":0.5, + "lipThick":0.5, + "eyeHeight":0.5, + "canthus":0.0, + "eyeLid":0.0, + "eyeSpace":0.5, + "eyeRotate":0.5, + "longNose":0.5, + "philtrum":0.5, + "smile":0.0, + "browHeight":0.5, + "browSpace":0.5, + "browThick":0.5, + "filterName":"ziran5", + "filterLevel":0.55 + } +] diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/en.lproj/FUBeautyComponent.strings b/FUBeautyComponent/FUBeautyComponent/Resource/en.lproj/FUBeautyComponent.strings new file mode 100644 index 00000000..2b7df56a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/en.lproj/FUBeautyComponent.strings @@ -0,0 +1,158 @@ +/* + FUBeautyComponent.strings + FUBeautyComponent + + Created by 项林平 on 2022/6/9. + +*/ + +"skin" = "Skin"; +"shape" = "Reshape"; +"filter" = "Filter"; +"preset" = "Preset"; + +/// Skin +"磨皮" = "Fine Blur"; +"美白" = "Whiten"; +"红润" = "Ruddy"; +"锐化" = "Sharpen"; +"五官立体" = "Face Threed"; +"亮眼" = "Eye Brighten"; +"美牙" = "Tooth Whiten"; +"去黑眼圈" = "Circles"; +"去法令纹" = "Wrinkles"; + +/// Shape +"瘦脸" = "Cheek Thin"; +"v脸" = "Cheek V"; +"窄脸" = "Cheek Narrow"; +"短脸" = "Cheek Short"; +"小脸" = "Cheek Small"; +"瘦颧骨" = "Cheekbones"; +"瘦下颌骨" = "Lower Jaw"; +"圆眼" = "Eye Circle"; +"大眼" = "Eye Enlarge"; +"下巴" = "Chin"; +"额头" = "Forehead"; +"瘦鼻" = "Nose"; +"嘴型" = "Mouth"; +"嘴唇厚度" = "Lip Thick"; +"眼睛位置" = "Eye Height"; +"开眼角" = "Canthus"; +"眼睑下至" = "Eye Lid"; +"眼距" = "Eye Space"; +"眼睛角度" = "Eye Rotate"; +"长鼻" = "Long Nose"; +"缩人中" = "Philtrum"; +"微笑嘴角" = "Smile"; +"眉毛上下" = "Brow Height"; +"眉间距" = "Brow Space"; +"眉毛粗细" = "Brow Thick"; + +/// Filter +"origin" = "原图"; +"ziran1" = "Nature1"; +"ziran2" = "Nature2"; +"ziran3" = "Nature3"; +"ziran4" = "Nature4"; +"ziran5" = "Nature5"; +"ziran6" = "Nature6"; +"ziran7" = "Nature7"; +"ziran8" = "Nature8"; +"ziran9" = "Nature9"; +"ziran10" = "Nature10"; +"ziran11" = "Nature11"; +"ziran12" = "Nature12"; + +"bailiang1" = "Bright1"; +"bailiang2" = "Bright2"; +"bailiang3" = "Bright3"; +"bailiang4" = "Bright4"; +"bailiang5" = "Bright5"; +"bailiang6" = "Bright6"; +"bailiang7" = "Bright7"; + +"fennen1" = "Pink1"; +"fennen2" = "Pink2"; +"fennen3" = "Pink3"; +"fennen4" = "Pink4"; +"fennen5" = "Pink5"; +"fennen6" = "Pink6"; +"fennen7" = "Pink7"; +"fennen8" = "Pink8"; + +"lengsediao1"= "Cold tone1"; +"lengsediao2"= "Cold tone2"; +"lengsediao3"= "Cold tone3"; +"lengsediao4"= "Cold tone4"; +"lengsediao5"= "Cold tone5"; +"lengsediao6"= "Cold tone6"; +"lengsediao7"= "Cold tone7"; +"lengsediao8"= "Cold tone8"; +"lengsediao9"= "Cold tone9"; +"lengsediao10"= "Cold tone10"; +"lengsediao11"= "Cold tone11"; + +"nuansediao1"= "Warm tone1"; +"nuansediao2"= "Warm tone2"; + +"gexing1" = "Personality1"; +"gexing2" = "Personality2"; +"gexing3" = "Personality3"; +"gexing4" = "Personality4"; +"gexing5" = "Personality5"; +"gexing6" = "Personality6"; +"gexing7" = "Personality7"; +"gexing8" = "Personality8"; +"gexing9" = "Personality9"; +"gexing10" = "Personality10"; +"gexing11" = "Personality11"; + +"xiaoqingxin1" = "Fresh1"; +"xiaoqingxin2" = "Fresh2"; +"xiaoqingxin3" = "Fresh3"; +"xiaoqingxin4" = "Fresh4"; +"xiaoqingxin5" = "Fresh5"; +"xiaoqingxin6" = "Fresh6"; + +"heibai1" = "Fade1"; +"heibai2" = "Fade2"; +"heibai3" = "Fade3"; +"heibai4" = "Fade4"; + +"zhiganhui1" = "Texture grey1"; +"zhiganhui2" = "Texture grey2"; +"zhiganhui3" = "Texture grey3"; +"zhiganhui4" = "Texture grey4"; +"zhiganhui5" = "Texture grey5"; +"zhiganhui6" = "Texture grey6"; +"zhiganhui7" = "Texture grey7"; +"zhiganhui8" = "Texture grey8"; + +"mitao1" = "Peach1"; +"mitao2" = "Peach2"; +"mitao3" = "Peach3"; +"mitao4" = "Peach4"; +"mitao5" = "Peach5"; +"mitao6" = "Peach6"; +"mitao7" = "Peach7"; +"mitao8" = "Peach8"; + +/// Style +"presets" = "Presets"; +"None" = "None"; +"Style1" = "Style1"; +"Style2" = "Style2"; +"Style3" = "Style3"; +"Style4" = "Style4"; +"Style5" = "Style5"; +"Style6" = "Style6"; +"Style7" = "Style7"; + +"To use, cancel Presets first." = "To use %@, cancel \'Presets\' first."; + +"该功能只支持在高端机上使用" = "%@ is only supported on high-end devices"; +"是否将所有参数恢复到默认值" = "Reset all parameters to default?"; +"恢复" = "Recover"; +"取消" = "Cancel"; +"确定" = "Definite"; diff --git a/FUBeautyComponent/FUBeautyComponent/Resource/zh-Hans.lproj/FUBeautyComponent.strings b/FUBeautyComponent/FUBeautyComponent/Resource/zh-Hans.lproj/FUBeautyComponent.strings new file mode 100644 index 00000000..46f01577 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/Resource/zh-Hans.lproj/FUBeautyComponent.strings @@ -0,0 +1,158 @@ +/* + FUBeautyComponent.strings + FUBeautyComponent + + Created by 项林平 on 2022/6/9. + +*/ + +"skin" = "美肤"; +"shape" = "美型"; +"filter" = "滤镜"; +"preset" = "风格推荐"; + +/// 美肤 +"磨皮" = "磨皮"; +"美白" = "美白"; +"红润" = "红润"; +"锐化" = "锐化"; +"五官立体" = "五官立体"; +"亮眼" = "亮眼"; +"美牙" = "美牙"; +"去黑眼圈" = "去黑眼圈"; +"去法令纹" = "去法令纹"; + +/// 美型 +"瘦脸" = "瘦脸"; +"v脸" = "v脸"; +"窄脸" = "窄脸"; +"短脸" = "短脸"; +"小脸" = "小脸"; +"瘦颧骨" = "瘦颧骨"; +"瘦下颌骨" = "瘦下颌骨"; +"圆眼" = "圆眼"; +"大眼" = "大眼"; +"下巴" = "下巴"; +"额头" = "额头"; +"瘦鼻" = "瘦鼻"; +"嘴型" = "嘴型"; +"嘴唇厚度" = "嘴唇厚度"; +"眼睛位置" = "眼睛位置"; +"开眼角" = "开眼角"; +"眼睑下至" = "眼睑下至"; +"眼距" = "眼距"; +"眼睛角度" = "眼睛角度"; +"长鼻" = "长鼻"; +"缩人中" = "缩人中"; +"微笑嘴角" = "微笑嘴角"; +"眉毛上下" = "眉毛上下"; +"眉间距" = "眉间距"; +"眉毛粗细" = "眉毛粗细"; + +/// 滤镜 +"origin" = "原图"; +"ziran1" = "自然1"; +"ziran2" = "自然2"; +"ziran3" = "自然3"; +"ziran4" = "自然4"; +"ziran5" = "自然5"; +"ziran6" = "自然6"; +"ziran7" = "自然7"; +"ziran8" = "自然8"; +"ziran9" = "自然9"; +"ziran10" = "自然10"; +"ziran11" = "自然11"; +"ziran12" = "自然12"; + +"bailiang1" = "白亮1"; +"bailiang2" = "白亮2"; +"bailiang3" = "白亮3"; +"bailiang4" = "白亮4"; +"bailiang5" = "白亮5"; +"bailiang6" = "白亮6"; +"bailiang7" = "白亮7"; + +"fennen1" = "粉嫩1"; +"fennen2" = "粉嫩2"; +"fennen3" = "粉嫩3"; +"fennen4" = "粉嫩4"; +"fennen5" = "粉嫩5"; +"fennen6" = "粉嫩6"; +"fennen7" = "粉嫩7"; +"fennen8" = "粉嫩8"; + +"lengsediao1"= "冷色调1"; +"lengsediao2"= "冷色调2"; +"lengsediao3"= "冷色调3"; +"lengsediao4"= "冷色调4"; +"lengsediao5"= "冷色调5"; +"lengsediao6"= "冷色调6"; +"lengsediao7"= "冷色调7"; +"lengsediao8"= "冷色调8"; +"lengsediao9"= "冷色调9"; +"lengsediao10"= "冷色调10"; +"lengsediao11"= "冷色调11"; + +"nuansediao1"= "暖色调1"; +"nuansediao2"= "暖色调2"; + +"gexing1" = "个性1"; +"gexing2" = "个性2"; +"gexing3" = "个性3"; +"gexing4" = "个性4"; +"gexing5" = "个性5"; +"gexing6" = "个性6"; +"gexing7" = "个性7"; +"gexing8" = "个性8"; +"gexing9" = "个性9"; +"gexing10" = "个性10"; +"gexing11" = "个性11"; + +"xiaoqingxin1" = "小清新1"; +"xiaoqingxin2" = "小清新2"; +"xiaoqingxin3" = "小清新3"; +"xiaoqingxin4" = "小清新4"; +"xiaoqingxin5" = "小清新5"; +"xiaoqingxin6" = "小清新6"; + +"heibai1" = "黑白1"; +"heibai2" = "黑白2"; +"heibai3" = "黑白3"; +"heibai4" = "黑白4"; + +"zhiganhui1" = "质感灰1"; +"zhiganhui2" = "质感灰2"; +"zhiganhui3" = "质感灰3"; +"zhiganhui4" = "质感灰4"; +"zhiganhui5" = "质感灰5"; +"zhiganhui6" = "质感灰6"; +"zhiganhui7" = "质感灰7"; +"zhiganhui8" = "质感灰8"; + +"mitao1" = "蜜桃1"; +"mitao2" = "蜜桃2"; +"mitao3" = "蜜桃3"; +"mitao4" = "蜜桃4"; +"mitao5" = "蜜桃5"; +"mitao6" = "蜜桃6"; +"mitao7" = "蜜桃7"; +"mitao8" = "蜜桃8"; + +/// 风格推荐 +"presets" = "风格推荐"; +"None" = "无"; +"Style1" = "风格1"; +"Style2" = "风格2"; +"Style3" = "风格3"; +"Style4" = "风格4"; +"Style5" = "风格5"; +"Style6" = "风格6"; +"Style7" = "风格7"; + +"To use, cancel Presets first." = "使用%@先取消\'风格推荐\'"; + +"该功能只支持在高端机上使用" = "%@功能仅支持在高端机上使用"; +"是否将所有参数恢复到默认值" = "是否将所有参数恢复到默认值?"; +"恢复" = "恢复"; +"取消" = "取消"; +"确定" = "确定"; diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautyFilterView.h b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyFilterView.h new file mode 100644 index 00000000..d4eac6f7 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyFilterView.h @@ -0,0 +1,35 @@ +// +// FUBeautyFilterView.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import +#import "FUBeautyFilterViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUBeautyFilterViewDelegate + +/// 滤镜变化 +- (void)beautyFilterViewDidChangeFilter:(NSString *)name; + +@end + +@interface FUBeautyFilterView : UIView + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautyFilterViewModel *)viewModel; + +@end + +@interface FUBeautyFilterCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautyFilterView.m b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyFilterView.m new file mode 100644 index 00000000..6b4a0414 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyFilterView.m @@ -0,0 +1,200 @@ +// +// FUBeautyFilterView.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import "FUBeautyFilterView.h" +#import "FUBeautyDefine.h" + +#import + +static NSString * const kFUBeautyFilterCellIdentifier = @"FUBeautyFilterCell"; + +@interface FUBeautyFilterView () + +@property (nonatomic, strong) FUSlider *filterSlider; + +@property (nonatomic, strong) UICollectionView *filterCollectionView; + +@property (nonatomic, strong) FUBeautyFilterViewModel *viewModel; + +@end + +@implementation FUBeautyFilterView + +#pragma mark - Initializer + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame viewModel:[[FUBeautyFilterViewModel alloc] init]]; +} + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautyFilterViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + [self configureUI]; + } + return self; +} + +#pragma mark - UI + +- (void)configureUI { + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.filterSlider]; + [self addSubview:self.filterCollectionView]; + NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:self.filterCollectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:self.filterCollectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:self.filterCollectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:self.filterCollectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:98]; + [self addConstraints:@[bottom, leading, trailing]]; + [self.filterCollectionView addConstraint:height]; + // 默认选中 + [self.filterCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + self.filterSlider.hidden = self.viewModel.selectedIndex < 1; + if (!self.filterSlider.hidden) { + self.filterSlider.value = self.viewModel.beautyFilters[self.viewModel.selectedIndex].filterLevel; + } +} + +#pragma mark - Event response + +- (void)sliderValueChanged { + [self.viewModel setFilterValue:self.filterSlider.value]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.beautyFilters.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUBeautyFilterCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUBeautyFilterCellIdentifier forIndexPath:indexPath]; + FUBeautyFilterModel *filter = self.viewModel.beautyFilters[indexPath.item]; + cell.imageView.image = FUBeautyImageNamed(filter.filterName); + cell.textLabel.text = FUBeautyStringWithKey(filter.filterName); + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (self.viewModel.selectedIndex == indexPath.item) { + return; + } + self.filterSlider.hidden = indexPath.item < 1; + if (!self.filterSlider.hidden) { + self.filterSlider.value = self.viewModel.beautyFilters[indexPath.item].filterLevel; + } + self.viewModel.selectedIndex = indexPath.item; + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyFilterViewDidChangeFilter:)]) { + [self.delegate beautyFilterViewDidChangeFilter:FUBeautyStringWithKey(self.viewModel.beautyFilters[indexPath.item].filterName)]; + } +} + +#pragma mark - Getters + +- (FUSlider *)filterSlider { + if (!_filterSlider) { + _filterSlider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 16, CGRectGetWidth(self.frame) - 112, 30)]; + _filterSlider.bidirection = NO; + _filterSlider.hidden = YES; + [_filterSlider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + } + return _filterSlider; +} + +- (UICollectionView *)filterCollectionView { + if (!_filterCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(54, 70); + layout.minimumLineSpacing = 16; + layout.minimumInteritemSpacing = 50; + layout.sectionInset = UIEdgeInsetsMake(16, 18, 10, 18); + _filterCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _filterCollectionView.translatesAutoresizingMaskIntoConstraints = NO; + _filterCollectionView.backgroundColor = [UIColor clearColor]; + _filterCollectionView.showsHorizontalScrollIndicator = NO; + _filterCollectionView.dataSource = self; + _filterCollectionView.delegate = self; + [_filterCollectionView registerClass:[FUBeautyFilterCell class] forCellWithReuseIdentifier:kFUBeautyFilterCellIdentifier]; + } + return _filterCollectionView; +} + +- (FUBeautyFilterViewModel *)viewModel { + if (!_viewModel) { + _viewModel = [[FUBeautyFilterViewModel alloc] init]; + } + return _viewModel; +} + +@end + +@interface FUBeautyFilterCell () + +@property (nonatomic, strong) UIImageView *imageView; +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUBeautyFilterCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + NSLayoutConstraint *imageTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *imageLeading = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *imageTrailing = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *imageHeight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; + [self.contentView addConstraints:@[imageTop, imageLeading, imageTrailing]]; + [self.imageView addConstraint:imageHeight]; + + [self.contentView addSubview:self.textLabel]; + NSLayoutConstraint *textTop = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:2]; + NSLayoutConstraint *textLeading = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *textTrailing = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + [self.contentView addConstraints:@[textTop, textLeading, textTrailing]]; + + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.imageView.layer.borderWidth = selected ? 2 : 0; + self.imageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1].CGColor : [UIColor clearColor].CGColor; + self.textLabel.textColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1] : [UIColor whiteColor]; +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + _imageView.layer.masksToBounds = YES; + _imageView.layer.cornerRadius = 3.f; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] init]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textAlignment = NSTextAlignmentCenter; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _textLabel; +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautyShapeView.h b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyShapeView.h new file mode 100644 index 00000000..a7f7b28e --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyShapeView.h @@ -0,0 +1,37 @@ +// +// FUBeautyShapeView.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/8. +// + +#import +#import "FUBeautyShapeViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyShapeView : UIView + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautyShapeViewModel *)viewModel; + +@end + +@interface FUBeautyShapeCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@property (nonatomic, strong, readonly) UILabel *textLabel; +/// 是否允许选择 +@property (nonatomic, assign) BOOL disabled; + +@property (nonatomic, assign) BOOL defaultInMiddle; + +@property (nonatomic, assign) double currentValue; + +@property (nonatomic, assign) double defaultValue; + +@property (nonatomic, copy) NSString *imageName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautyShapeView.m b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyShapeView.m new file mode 100644 index 00000000..a7560e0d --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyShapeView.m @@ -0,0 +1,296 @@ +// +// FUBeautyShapeView.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/8. +// + +#import "FUBeautyShapeView.h" +#import "FUBeautyDefine.h" + +#import + +static NSString * const kFUBeautyShapeCellIdentifier = @"FUBeautyShapeCell"; + +@interface FUBeautyShapeView () + +@property (nonatomic, strong) UICollectionView *shapeCollectionView; +/// 程度调节 +@property (nonatomic, strong) FUSlider *slider; +/// 恢复按钮 +@property (nonatomic, strong) FUSquareButton *recoverButton; + +@property (nonatomic, strong) FUBeautyShapeViewModel *viewModel; + +@end + +@implementation FUBeautyShapeView + +#pragma mark - Initializer + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame viewModel:[[FUBeautyShapeViewModel alloc] init]]; +} + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautyShapeViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + [self configureUI]; + [self refreshSubviews]; + } + return self; +} + +#pragma mark - UI + +- (void)configureUI { + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.slider]; + [self addSubview:self.recoverButton]; + NSLayoutConstraint *recoverLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:17]; + NSLayoutConstraint *recoverBottomConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:-6]; + NSLayoutConstraint *recoverWidthConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:44]; + NSLayoutConstraint *recoverHeightConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:74]; + + [self addConstraints:@[recoverLeadingConstraint, recoverBottomConstraint]]; + [self.recoverButton addConstraints:@[recoverWidthConstraint, recoverHeightConstraint]]; + + // 分割线 + UIView *verticalLine = [[UIView alloc] init]; + verticalLine.backgroundColor = [UIColor colorWithRed:229/255.f green:229/255.f blue:229/255.f alpha:0.2]; + verticalLine.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:verticalLine]; + NSLayoutConstraint *lineLeadingConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.recoverButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:14]; + NSLayoutConstraint *lineCenterYConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.recoverButton attribute:NSLayoutAttributeCenterY multiplier:1 constant:-15]; + NSLayoutConstraint *lineWidthConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:1]; + NSLayoutConstraint *lineHeightConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:24]; + [self addConstraints:@[lineLeadingConstraint, lineCenterYConstraint]]; + [verticalLine addConstraints:@[lineWidthConstraint, lineHeightConstraint]]; + + [self addSubview:self.shapeCollectionView]; + NSLayoutConstraint *collectionLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.shapeCollectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:76]; + NSLayoutConstraint *collectionTrailingConstraint = [NSLayoutConstraint constraintWithItem:self.shapeCollectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *collectionBottomConstraint = [NSLayoutConstraint constraintWithItem:self.shapeCollectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + NSLayoutConstraint *collectionHeightConstraint = [NSLayoutConstraint constraintWithItem:self.shapeCollectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:98]; + [self addConstraints:@[collectionLeadingConstraint, collectionTrailingConstraint, collectionBottomConstraint]]; + [self.shapeCollectionView addConstraint:collectionHeightConstraint]; +} + +- (void)refreshSubviews { + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.viewModel.isDefaultValue) { + self.recoverButton.alpha = 0.6; + self.recoverButton.userInteractionEnabled = NO; + } else { + self.recoverButton.alpha = 1; + self.recoverButton.userInteractionEnabled = YES; + } + if (!self.slider.hidden && self.viewModel.selectedIndex >= 0) { + self.slider.bidirection = self.viewModel.beautyShapes[self.viewModel.selectedIndex].defaultValueInMiddle; + self.slider.value = self.viewModel.beautyShapes[self.viewModel.selectedIndex].currentValue; + } + [self.shapeCollectionView reloadData]; + if (self.viewModel.selectedIndex >= 0) { + [self.shapeCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + +#pragma mark - Event response + +- (void)recoverAction { + [FUAlertManager showAlertWithTitle:nil message:FUBeautyStringWithKey(@"是否将所有参数恢复到默认值") cancel:FUBeautyStringWithKey(@"取消") confirm:FUBeautyStringWithKey(@"确定") inController:nil confirmHandler:^{ + [self.viewModel recoverAllShapeValuesToDefault]; + [self refreshSubviews]; + } cancelHandler:nil]; +} + +- (void)sliderValueChanged { + [self.viewModel setShapeValue:self.slider.value]; +} + +- (void)sliderChangeEnded { + [self refreshSubviews]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.beautyShapes.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUBeautyShapeCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUBeautyShapeCellIdentifier forIndexPath:indexPath]; + FUBeautyShapeModel *shape = self.viewModel.beautyShapes[indexPath.item]; + cell.textLabel.text = FUBeautyStringWithKey(shape.name); + cell.imageName = shape.name; + cell.defaultInMiddle = shape.defaultValueInMiddle; + cell.defaultValue = shape.defaultValue; + cell.currentValue = shape.currentValue; + // 处理低性能手机禁用特效 + if (shape.differentiateDevicePerformance) { + cell.disabled = self.viewModel.performanceLevel != FUDevicePerformanceLevelHigh; + } else { + cell.disabled = NO; + } + cell.selected = indexPath.item == self.viewModel.selectedIndex; + return cell; +} + +#pragma mark - Collection view delegate + +- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { + FUBeautyShapeModel *shape = self.viewModel.beautyShapes[indexPath.item]; + if (shape.differentiateDevicePerformance) { + if (self.viewModel.performanceLevel != FUDevicePerformanceLevelHigh) { + [FUTipHUD showTips:[NSString stringWithFormat:FUBeautyStringWithKey(@"该功能只支持在高端机上使用"), FUBeautyStringWithKey(shape.name)] dismissWithDelay:1]; + [self.shapeCollectionView reloadData]; + if (self.viewModel.selectedIndex >= 0) { + [self.shapeCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + return NO; + } + } + return YES; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.item == self.viewModel.selectedIndex) { + return; + } + self.viewModel.selectedIndex = indexPath.item; + FUBeautyShapeModel *shape = self.viewModel.beautyShapes[indexPath.item]; + if (self.slider.hidden) { + self.slider.hidden = NO; + } + self.slider.bidirection = shape.defaultValueInMiddle; + self.slider.value = shape.currentValue; +} + +#pragma mark - Getters + +- (UICollectionView *)shapeCollectionView { + if (!_shapeCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(44, 74); + layout.minimumLineSpacing = 22; + layout.minimumInteritemSpacing = 22; + layout.sectionInset = UIEdgeInsetsMake(16, 16, 6, 16); + _shapeCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _shapeCollectionView.translatesAutoresizingMaskIntoConstraints = NO; + _shapeCollectionView.backgroundColor = [UIColor clearColor]; + _shapeCollectionView.showsVerticalScrollIndicator = NO; + _shapeCollectionView.showsHorizontalScrollIndicator = NO; + _shapeCollectionView.dataSource = self; + _shapeCollectionView.delegate = self; + [_shapeCollectionView registerClass:[FUBeautyShapeCell class] forCellWithReuseIdentifier:kFUBeautyShapeCellIdentifier]; + } + return _shapeCollectionView; +} + +- (FUSquareButton *)recoverButton { + if (!_recoverButton) { + _recoverButton = [[FUSquareButton alloc] initWithFrame:CGRectMake(0, 0, 44, 74)]; + [_recoverButton setTitle:FUBeautyStringWithKey(@"恢复") forState:UIControlStateNormal]; + [_recoverButton setImage:FUBeautyImageNamed(@"恢复") forState:UIControlStateNormal]; + _recoverButton.alpha = 0.6; + _recoverButton.userInteractionEnabled = NO; + [_recoverButton addTarget:self action:@selector(recoverAction) forControlEvents:UIControlEventTouchUpInside]; + _recoverButton.translatesAutoresizingMaskIntoConstraints = NO; + } + return _recoverButton; +} + +-(FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 16, CGRectGetWidth(self.frame) - 116, FUBeautyFunctionSliderHeight)]; + _slider.hidden = YES; + [_slider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + [_slider addTarget:self action:@selector(sliderChangeEnded) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; + } + return _slider; +} + +@end + +@interface FUBeautyShapeCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUBeautyShapeCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + NSLayoutConstraint *imageTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *imageLeading = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *imageTrailing = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *imageHeight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; + [self.contentView addConstraints:@[imageTop, imageLeading, imageTrailing]]; + [self.imageView addConstraint:imageHeight]; + + [self.contentView addSubview:self.textLabel]; + NSLayoutConstraint *textTop = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:7]; + + NSLayoutConstraint *textCenterX = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [self.contentView addConstraints:@[textTop, textCenterX]]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + if (self.disabled) { + self.imageView.image = FUBeautyImageNamed([NSString stringWithFormat:@"%@-0", self.imageName]); + self.imageView.alpha = 0.7; + self.textLabel.alpha = 0.7; + } else { + self.imageView.alpha = 1; + self.textLabel.alpha = 1; + BOOL changed = NO; + if (self.defaultInMiddle) { + changed = fabs(self.currentValue - 0.5) > 0.01; + }else{ + changed = self.currentValue > 0.01; + } + if (selected) { + self.imageView.image = changed ? FUBeautyImageNamed([NSString stringWithFormat:@"%@-3", self.imageName]) : FUBeautyImageNamed([NSString stringWithFormat:@"%@-2", self.imageName]); + self.textLabel.textColor = [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1]; + } else { + self.imageView.image = changed ? FUBeautyImageNamed([NSString stringWithFormat:@"%@-1", self.imageName]) : FUBeautyImageNamed([NSString stringWithFormat:@"%@-0", self.imageName]); + self.textLabel.textColor = [UIColor whiteColor]; + } + } +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] init]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _textLabel; +} + +@end + diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautySkinView.h b/FUBeautyComponent/FUBeautyComponent/View/FUBeautySkinView.h new file mode 100644 index 00000000..de499222 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautySkinView.h @@ -0,0 +1,36 @@ +// +// FUBeautySkinView.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// +// 美肤&美型视图 + +#import +#import "FUBeautySkinViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautySkinView : UIView + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautySkinViewModel *)viewModel; + +@end + +@interface FUBeautySkinCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@property (nonatomic, assign) BOOL defaultInMiddle; + +@property (nonatomic, assign) double currentValue; + +@property (nonatomic, assign) double defaultValue; + +@property (nonatomic, copy) NSString *imageName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautySkinView.m b/FUBeautyComponent/FUBeautyComponent/View/FUBeautySkinView.m new file mode 100644 index 00000000..d5c5d6bf --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautySkinView.m @@ -0,0 +1,266 @@ +// +// FUBeautySkinView.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import "FUBeautySkinView.h" +#import "FUBeautyDefine.h" + +#import + +static NSString * const kFUBeautySkinCellIdentifier = @"FUBeautySkinCell"; + +@interface FUBeautySkinView () + +@property (nonatomic, strong) UICollectionView *skinCollectionView; +/// 程度调节 +@property (nonatomic, strong) FUSlider *slider; +/// 恢复按钮 +@property (nonatomic, strong) FUSquareButton *recoverButton; + +@property (nonatomic, strong) FUBeautySkinViewModel *viewModel; + +@end + +@implementation FUBeautySkinView + +#pragma mark - Initializer + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame viewModel:[[FUBeautySkinViewModel alloc] init]]; +} + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautySkinViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + [self configureUI]; + [self refreshSubviews]; + } + return self; +} + +#pragma mark - UI + +- (void)configureUI { + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.slider]; + [self addSubview:self.recoverButton]; + NSLayoutConstraint *recoverLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:17]; + NSLayoutConstraint *recoverBottomConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:-6]; + NSLayoutConstraint *recoverWidthConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:44]; + NSLayoutConstraint *recoverHeightConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:74]; + + [self addConstraints:@[recoverLeadingConstraint, recoverBottomConstraint]]; + [self.recoverButton addConstraints:@[recoverWidthConstraint, recoverHeightConstraint]]; + + // 分割线 + UIView *verticalLine = [[UIView alloc] init]; + verticalLine.backgroundColor = [UIColor colorWithRed:229/255.f green:229/255.f blue:229/255.f alpha:0.2]; + verticalLine.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:verticalLine]; + NSLayoutConstraint *lineLeadingConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.recoverButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:14]; + NSLayoutConstraint *lineCenterYConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.recoverButton attribute:NSLayoutAttributeCenterY multiplier:1 constant:-15]; + NSLayoutConstraint *lineWidthConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:1]; + NSLayoutConstraint *lineHeightConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:24]; + [self addConstraints:@[lineLeadingConstraint, lineCenterYConstraint]]; + [verticalLine addConstraints:@[lineWidthConstraint, lineHeightConstraint]]; + + [self addSubview:self.skinCollectionView]; + NSLayoutConstraint *collectionLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.skinCollectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:76]; + NSLayoutConstraint *collectionTrailingConstraint = [NSLayoutConstraint constraintWithItem:self.skinCollectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *collectionBottomConstraint = [NSLayoutConstraint constraintWithItem:self.skinCollectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + NSLayoutConstraint *collectionHeightConstraint = [NSLayoutConstraint constraintWithItem:self.skinCollectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:98]; + [self addConstraints:@[collectionLeadingConstraint, collectionTrailingConstraint, collectionBottomConstraint]]; + [self.skinCollectionView addConstraint:collectionHeightConstraint]; +} + +- (void)refreshSubviews { + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.viewModel.isDefaultValue) { + self.recoverButton.alpha = 0.6; + self.recoverButton.userInteractionEnabled = NO; + } else { + self.recoverButton.alpha = 1; + self.recoverButton.userInteractionEnabled = YES; + } + if (!self.slider.hidden && self.viewModel.selectedIndex >= 0) { + self.slider.bidirection = self.viewModel.beautySkins[self.viewModel.selectedIndex].defaultValueInMiddle; + self.slider.value = self.viewModel.beautySkins[self.viewModel.selectedIndex].currentValue / self.viewModel.beautySkins[self.viewModel.selectedIndex].ratio; + } + [self.skinCollectionView reloadData]; + if (self.viewModel.selectedIndex >= 0) { + [self.skinCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + +#pragma mark - Event response + +- (void)recoverAction { + [FUAlertManager showAlertWithTitle:nil message:FUBeautyStringWithKey(@"是否将所有参数恢复到默认值") cancel:FUBeautyStringWithKey(@"取消") confirm:FUBeautyStringWithKey(@"确定") inController:nil confirmHandler:^{ + [self.viewModel recoverAllSkinValuesToDefault]; + [self refreshSubviews]; + } cancelHandler:nil]; +} + +- (void)sliderValueChanged { + [self.viewModel setSkinValue:self.slider.value]; +} + +- (void)sliderChangeEnded { + [self refreshSubviews]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.beautySkins.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUBeautySkinCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUBeautySkinCellIdentifier forIndexPath:indexPath]; + FUBeautySkinModel *skin = self.viewModel.beautySkins[indexPath.item]; + cell.textLabel.text = FUBeautyStringWithKey(skin.name); + cell.imageName = skin.name; + cell.defaultInMiddle = skin.defaultValueInMiddle; + cell.defaultValue = skin.defaultValue; + cell.currentValue = skin.currentValue; + cell.selected = indexPath.item == self.viewModel.selectedIndex; + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.item == self.viewModel.selectedIndex) { + return; + } + self.viewModel.selectedIndex = indexPath.item; + FUBeautySkinModel *skin = self.viewModel.beautySkins[indexPath.item]; + if (self.slider.hidden) { + self.slider.hidden = NO; + } + self.slider.bidirection = skin.defaultValueInMiddle; + self.slider.value = skin.currentValue / skin.ratio; +} + +#pragma mark - Getters + +- (UICollectionView *)skinCollectionView { + if (!_skinCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(44, 74); + layout.minimumLineSpacing = 22; + layout.minimumInteritemSpacing = 22; + layout.sectionInset = UIEdgeInsetsMake(16, 16, 6, 16); + _skinCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _skinCollectionView.translatesAutoresizingMaskIntoConstraints = NO; + _skinCollectionView.backgroundColor = [UIColor clearColor]; + _skinCollectionView.showsVerticalScrollIndicator = NO; + _skinCollectionView.showsHorizontalScrollIndicator = NO; + _skinCollectionView.dataSource = self; + _skinCollectionView.delegate = self; + [_skinCollectionView registerClass:[FUBeautySkinCell class] forCellWithReuseIdentifier:kFUBeautySkinCellIdentifier]; + } + return _skinCollectionView; +} + +- (FUSquareButton *)recoverButton { + if (!_recoverButton) { + _recoverButton = [[FUSquareButton alloc] initWithFrame:CGRectMake(0, 0, 44, 74)]; + [_recoverButton setTitle:FUBeautyStringWithKey(@"恢复") forState:UIControlStateNormal]; + [_recoverButton setImage:FUBeautyImageNamed(@"恢复") forState:UIControlStateNormal]; + _recoverButton.alpha = 0.6; + _recoverButton.userInteractionEnabled = NO; + [_recoverButton addTarget:self action:@selector(recoverAction) forControlEvents:UIControlEventTouchUpInside]; + _recoverButton.translatesAutoresizingMaskIntoConstraints = NO; + } + return _recoverButton; +} + +-(FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 16, CGRectGetWidth(self.frame) - 116, FUBeautyFunctionSliderHeight)]; + _slider.hidden = YES; + [_slider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + [_slider addTarget:self action:@selector(sliderChangeEnded) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; + } + return _slider; +} + +@end + +@interface FUBeautySkinCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUBeautySkinCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + NSLayoutConstraint *imageTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *imageLeading = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *imageTrailing = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *imageHeight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; + [self.contentView addConstraints:@[imageTop, imageLeading, imageTrailing]]; + [self.imageView addConstraint:imageHeight]; + + [self.contentView addSubview:self.textLabel]; + NSLayoutConstraint *textTop = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:7]; + + NSLayoutConstraint *textCenterX = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [self.contentView addConstraints:@[textTop, textCenterX]]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + BOOL changed = NO; + if (self.defaultInMiddle) { + changed = fabs(self.currentValue - 0.5) > 0.01; + }else{ + changed = self.currentValue > 0.01; + } + if (selected) { + self.imageView.image = changed ? FUBeautyImageNamed([NSString stringWithFormat:@"%@-3", self.imageName]) : FUBeautyImageNamed([NSString stringWithFormat:@"%@-2", self.imageName]); + self.textLabel.textColor = [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1]; + } else { + self.imageView.image = changed ? FUBeautyImageNamed([NSString stringWithFormat:@"%@-1", self.imageName]) : FUBeautyImageNamed([NSString stringWithFormat:@"%@-0", self.imageName]); + self.textLabel.textColor = [UIColor whiteColor]; + } +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] init]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _textLabel; +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautyStyleView.h b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyStyleView.h new file mode 100644 index 00000000..c558cb17 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyStyleView.h @@ -0,0 +1,41 @@ +// +// FUBeautyStyleView.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import +#import "FUBeautyStyleViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUBeautyStyleViewDelegate + +@optional +/// 取消选择风格 +- (void)beautyStyleViewDidCancelStyle; +/// 选择某一风格 +- (void)beautyStyleViewDidSelectStyle; + +@end + +@interface FUBeautyStyleView : UIView + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautyStyleViewModel *)viewModel; + +@end + +@interface FUBeautyStyleCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@property (nonatomic, copy) NSString *imageName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/View/FUBeautyStyleView.m b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyStyleView.m new file mode 100644 index 00000000..91faacf0 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/View/FUBeautyStyleView.m @@ -0,0 +1,177 @@ +// +// FUBeautyStyleView.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import "FUBeautyStyleView.h" + +#import "FUBeautyDefine.h" + +static NSString * const kFUBeautyStyleCellIdentifier = @"FUBeautyStyleCell"; + +@interface FUBeautyStyleView () + +@property (nonatomic, strong) UICollectionView *styleCollectionView; + +@property (nonatomic, strong) FUBeautyStyleViewModel *viewModel; + +@end + +@implementation FUBeautyStyleView + +#pragma mark - Initializer + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame viewModel:[[FUBeautyStyleViewModel alloc] init]]; +} + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUBeautyStyleViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + [self configureUI]; + } + return self; +} + +#pragma mark - UI + +- (void)configureUI { + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.styleCollectionView]; + NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:self.styleCollectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:self.styleCollectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:self.styleCollectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:self.styleCollectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:98]; + [self addConstraints:@[bottom, leading, trailing]]; + [self.styleCollectionView addConstraint:height]; + + // 默认选中 + [self.styleCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.beautyStyles.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUBeautyStyleCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUBeautyStyleCellIdentifier forIndexPath:indexPath]; + FUBeautyStyleModel *style = self.viewModel.beautyStyles[indexPath.item]; + cell.imageName = style.name; + cell.textLabel.text = FUBeautyStringWithKey(style.name); + cell.selected = indexPath.item == self.viewModel.selectedIndex; + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (self.viewModel.selectedIndex == indexPath.item) { + return; + } + if (self.viewModel.selectedIndex == 0) { + // 从未选择风格到选择风格 + self.viewModel.selectedIndex = indexPath.item; + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyStyleViewDidSelectStyle)]) { + [self.delegate beautyStyleViewDidSelectStyle]; + } + } else if (indexPath.item == 0) { + // 取消选择 + self.viewModel.selectedIndex = 0; + if (self.delegate && [self.delegate respondsToSelector:@selector(beautyStyleViewDidCancelStyle)]) { + [self.delegate beautyStyleViewDidCancelStyle]; + } + } else { + self.viewModel.selectedIndex = indexPath.item; + } +} + + +#pragma mark - Getters + +- (UICollectionView *)styleCollectionView { + if (!_styleCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(54, 70); + layout.minimumLineSpacing = 16; + layout.minimumInteritemSpacing = 50; + layout.sectionInset = UIEdgeInsetsMake(16, 18, 10, 18); + _styleCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _styleCollectionView.translatesAutoresizingMaskIntoConstraints = NO; + _styleCollectionView.backgroundColor = [UIColor clearColor]; + _styleCollectionView.showsHorizontalScrollIndicator = NO; + _styleCollectionView.dataSource = self; + _styleCollectionView.delegate = self; + [_styleCollectionView registerClass:[FUBeautyStyleCell class] forCellWithReuseIdentifier:kFUBeautyStyleCellIdentifier]; + } + return _styleCollectionView; +} + +@end + +@interface FUBeautyStyleCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUBeautyStyleCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + NSLayoutConstraint *imageTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *imageLeading = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *imageTrailing = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *imageHeight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; + [self.contentView addConstraints:@[imageTop, imageLeading, imageTrailing]]; + [self.imageView addConstraint:imageHeight]; + + [self.contentView addSubview:self.textLabel]; + NSLayoutConstraint *textTop = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:2]; + NSLayoutConstraint *textLeading = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *textTrailing = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + [self.contentView addConstraints:@[textTop, textLeading, textTrailing]]; + + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.imageView.image = selected ? FUBeautyImageNamed([NSString stringWithFormat:@"%@-2", self.imageName]) : FUBeautyImageNamed([NSString stringWithFormat:@"%@-0", self.imageName]); + self.textLabel.textColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1] : [UIColor whiteColor]; +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] init]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textAlignment = NSTextAlignmentCenter; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _textLabel; +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyFilterViewModel.h b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyFilterViewModel.h new file mode 100644 index 00000000..9dff3816 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyFilterViewModel.h @@ -0,0 +1,31 @@ +// +// FUBeautyFilterViewModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/7. +// + +#import +#import "FUBeautyFilterModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyFilterViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *beautyFilters; +/// 选中滤镜索引 +@property (nonatomic, assign) NSInteger selectedIndex; + +/// 保存滤镜数据到本地 +- (void)saveFitersPersistently; + +/// 设置当前滤镜 +- (void)setCurrentFilter; + +/// 设置滤镜程度 +/// @param value 程度值 +- (void)setFilterValue:(double)value; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyFilterViewModel.m b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyFilterViewModel.m new file mode 100644 index 00000000..907cea63 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyFilterViewModel.m @@ -0,0 +1,115 @@ +// +// FUBeautyFilterViewModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/7. +// + +#import "FUBeautyFilterViewModel.h" +#import "FUBeautyDefine.h" + +#import + +@interface FUBeautyFilterViewModel () + +@property (nonatomic, copy) NSArray *beautyFilters; + +@end + +@implementation FUBeautyFilterViewModel + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyFilterKey]) { + // 获取本地滤镜数据 + self.beautyFilters = [self localFilters]; + } else { + // 获取默认滤镜数据 + self.beautyFilters = [self defaultFilters]; + } + if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautySelectedFilterIndexKey]) { + // 获取本地保存选中的索引 + _selectedIndex = [[NSUserDefaults standardUserDefaults] integerForKey:FUPersistentBeautySelectedFilterIndexKey]; + } else { + // 默认索引为2 + _selectedIndex = 2; + } + } + return self; +} + +#pragma mark - Instance methods + +- (void)saveFitersPersistently { + if (self.beautyFilters.count == 0) { + return; + } + NSMutableArray *filters = [[NSMutableArray alloc] init]; + for (FUBeautyFilterModel *model in self. beautyFilters) { + NSDictionary *dictionary = [model dictionaryWithValuesForKeys:@[@"filterIndex", @"filterName", @"filterLevel"]]; + [filters addObject:dictionary]; + } + [[NSUserDefaults standardUserDefaults] setObject:filters forKey:FUPersistentBeautyFilterKey]; + [[NSUserDefaults standardUserDefaults] setInteger:self.selectedIndex forKey:FUPersistentBeautySelectedFilterIndexKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex < 0 || selectedIndex >= self.beautyFilters.count) { + return; + } + [self setFilter:self.beautyFilters[selectedIndex].filterName level:self.beautyFilters[selectedIndex].filterLevel]; + _selectedIndex = selectedIndex; +} + +- (void)setCurrentFilter { + if (self.selectedIndex < 0 || self.selectedIndex >= self.beautyFilters.count) { + return; + } + [self setFilter:self.beautyFilters[self.selectedIndex].filterName level:self.beautyFilters[self.selectedIndex].filterLevel]; +} + +- (void)setFilterValue:(double)value { + if (self.selectedIndex < 0 || self.selectedIndex >= self.beautyFilters.count) { + return; + } + FUBeautyFilterModel *model = self.beautyFilters[self.selectedIndex]; + model.filterLevel = value; + [FURenderKit shareRenderKit].beauty.filterLevel = model.filterLevel; +} + +#pragma mark - Private methods + +- (void)setFilter:(NSString *)filterName level:(double)filterLevel { + [FURenderKit shareRenderKit].beauty.filterName = filterName; + [FURenderKit shareRenderKit].beauty.filterLevel = filterLevel; +} + +- (NSArray *)localFilters { + NSArray *filters = [[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyFilterKey]; + NSMutableArray *mutableFilters = [[NSMutableArray alloc] init]; + for (NSDictionary *filter in filters) { + FUBeautyFilterModel *model = [[FUBeautyFilterModel alloc] init]; + [model setValuesForKeysWithDictionary:filter]; + [mutableFilters addObject:model]; + } + return [mutableFilters copy]; +} + +- (NSArray *)defaultFilters { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *filterPath = [bundle pathForResource:@"beauty_filter" ofType:@"json"]; + NSArray *filterData = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:filterPath] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *filters = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in filterData) { + FUBeautyFilterModel *model = [[FUBeautyFilterModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + [filters addObject:model]; + } + return [filters copy]; +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyShapeViewModel.h b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyShapeViewModel.h new file mode 100644 index 00000000..306b51db --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyShapeViewModel.h @@ -0,0 +1,39 @@ +// +// FUBeautyShapeViewModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/27. +// + +#import +#import +#import "FUBeautyShapeModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyShapeViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *beautyShapes; +/// 是否所有值都是默认 +@property (nonatomic, assign, readonly) BOOL isDefaultValue; +/// 当前选中索引,默认为-1 +@property (nonatomic, assign) NSInteger selectedIndex; +/// 美型属性需要根据高低端机适配 +@property (nonatomic, assign) FUDevicePerformanceLevel performanceLevel; + +/// 保存美型数据到本地 +- (void)saveShapesPersistently; + +/// 设置单项美型值 +/// @param value 当前选中单项的值 +- (void)setShapeValue:(double)value; + +/// 设置当前所有美型值 +- (void)setAllShapeValues; + +/// 恢复所有美型值为默认 +- (void)recoverAllShapeValuesToDefault; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyShapeViewModel.m b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyShapeViewModel.m new file mode 100644 index 00000000..c09ef5b7 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyShapeViewModel.m @@ -0,0 +1,195 @@ +// +// FUBeautyShapeViewModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/27. +// + +#import "FUBeautyShapeViewModel.h" +#import "FUBeautyDefine.h" + +#import + +@interface FUBeautyShapeViewModel () + +@property (nonatomic, copy) NSArray *beautyShapes; + +@end + +@implementation FUBeautyShapeViewModel + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyShapeKey]) { + // 获取本地美肤数据 + self.beautyShapes = [self localShapes]; + } else { + // 获取默认美肤数据 + self.beautyShapes = [self defaultShapes]; + } + self.selectedIndex = -1; + self.performanceLevel = [FURenderKit devicePerformanceLevel]; + } + return self; +} + +#pragma mark - Instance methods + +- (void)saveShapesPersistently { + if (self.beautyShapes.count == 0) { + return; + } + NSMutableArray *shapes = [[NSMutableArray alloc] init]; + for (FUBeautyShapeModel *model in self.beautyShapes) { + NSDictionary *dictionary = [model dictionaryWithValuesForKeys:@[@"name", @"type", @"currentValue", @"defaultValue", @"defaultValueInMiddle", @"differentiateDevicePerformance"]]; + [shapes addObject:dictionary]; + } + [[NSUserDefaults standardUserDefaults] setObject:shapes forKey:FUPersistentBeautyShapeKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)setShapeValue:(double)value { + if (self.selectedIndex < 0 || self.selectedIndex >= self.beautyShapes.count) { + return; + } + FUBeautyShapeModel *model = self.beautyShapes[self.selectedIndex]; + model.currentValue = value; + [self setValue:model.currentValue forType:model.type]; +} + +- (void)setAllShapeValues { + for (FUBeautyShapeModel *shape in self.beautyShapes) { + [self setValue:shape.currentValue forType:shape.type]; + } +} + +- (void)recoverAllShapeValuesToDefault { + for (FUBeautyShapeModel *shape in self.beautyShapes) { + shape.currentValue = shape.defaultValue; + [self setValue:shape.currentValue forType:shape.type]; + } +} + +#pragma mark - Private methods + +- (void)setValue:(double)value forType:(FUBeautyShape)type { + switch (type) { + case FUBeautyShapeCheekThinning: + [FURenderKit shareRenderKit].beauty.cheekThinning = value; + break; + case FUBeautyShapeCheekV: + [FURenderKit shareRenderKit].beauty.cheekV = value; + break; + case FUBeautyShapeCheekNarrow: + [FURenderKit shareRenderKit].beauty.cheekNarrow = value; + break; + case FUBeautyShapeCheekShort: + [FURenderKit shareRenderKit].beauty.cheekShort = value; + break; + case FUBeautyShapeCheekSmall: + [FURenderKit shareRenderKit].beauty.cheekSmall = value; + break; + case FUBeautyShapeCheekbones: + [FURenderKit shareRenderKit].beauty.intensityCheekbones = value; + break; + case FUBeautyShapeLowerJaw: + [FURenderKit shareRenderKit].beauty.intensityLowerJaw = value; + break; + case FUBeautyShapeEyeEnlarging: + [FURenderKit shareRenderKit].beauty.eyeEnlarging = value; + break; + case FUBeautyShapeEyeCircle: + [FURenderKit shareRenderKit].beauty.intensityEyeCircle = value; + break; + case FUBeautyShapeChin: + [FURenderKit shareRenderKit].beauty.intensityChin = value; + break; + case FUBeautyShapeForehead: + [FURenderKit shareRenderKit].beauty.intensityForehead = value; + break; + case FUBeautyShapeNose: + [FURenderKit shareRenderKit].beauty.intensityNose = value; + break; + case FUBeautyShapeMouth: + [FURenderKit shareRenderKit].beauty.intensityMouth = value; + break; + case FUBeautyShapeLipThick: + [FURenderKit shareRenderKit].beauty.intensityLipThick = value; + break; + case FUBeautyShapeEyeHeight: + [FURenderKit shareRenderKit].beauty.intensityEyeHeight = value; + break; + case FUBeautyShapeCanthus: + [FURenderKit shareRenderKit].beauty.intensityCanthus = value; + break; + case FUBeautyShapeEyeLid: + [FURenderKit shareRenderKit].beauty.intensityEyeLid = value; + break; + case FUBeautyShapeEyeSpace: + [FURenderKit shareRenderKit].beauty.intensityEyeSpace = value; + break; + case FUBeautyShapeEyeRotate: + [FURenderKit shareRenderKit].beauty.intensityEyeRotate = value; + break; + case FUBeautyShapeLongNose: + [FURenderKit shareRenderKit].beauty.intensityLongNose = value; + break; + case FUBeautyShapePhiltrum: + [FURenderKit shareRenderKit].beauty.intensityPhiltrum = value; + break; + case FUBeautyShapeSmile: + [FURenderKit shareRenderKit].beauty.intensitySmile = value; + break; + case FUBeautyShapeBrowHeight: + [FURenderKit shareRenderKit].beauty.intensityBrowHeight = value; + break; + case FUBeautyShapeBrowSpace: + [FURenderKit shareRenderKit].beauty.intensityBrowSpace = value; + break; + case FUBeautyShapeBrowThick: + [FURenderKit shareRenderKit].beauty.intensityBrowThick = value; + break; + } +} + +- (NSArray *)localShapes { + NSArray *shapes = [[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyShapeKey]; + NSMutableArray *mutableShapes = [[NSMutableArray alloc] init]; + for (NSDictionary *shape in shapes) { + FUBeautyShapeModel *model = [[FUBeautyShapeModel alloc] init]; + [model setValuesForKeysWithDictionary:shape]; + [mutableShapes addObject:model]; + } + return [mutableShapes copy]; +} + +- (NSArray *)defaultShapes { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *shapePath = [bundle pathForResource:@"beauty_shape" ofType:@"json"]; + NSArray *shapeData = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:shapePath] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *shapes = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in shapeData) { + FUBeautyShapeModel *model = [[FUBeautyShapeModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + [shapes addObject:model]; + } + return [shapes copy]; +} + +#pragma mark - Getters + +- (BOOL)isDefaultValue { + for (FUBeautyShapeModel *shape in self.beautyShapes) { + int currentIntValue = shape.defaultValueInMiddle ? (int)(shape.currentValue * 100 - 50) : (int)(shape.currentValue * 100); + int defaultIntValue = shape.defaultValueInMiddle ? (int)(shape.defaultValue * 100 - 50) : (int)(shape.defaultValue * 100); + if (currentIntValue != defaultIntValue) { + return NO; + } + } + return YES; +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautySkinViewModel.h b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautySkinViewModel.h new file mode 100644 index 00000000..72786a2a --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautySkinViewModel.h @@ -0,0 +1,36 @@ +// +// FUBeautySkinViewModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/27. +// + +#import +#import "FUBeautySkinModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautySkinViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *beautySkins; +/// 是否所有值都是默认 +@property (nonatomic, assign, readonly) BOOL isDefaultValue; +/// 当前选中索引,默认为-1 +@property (nonatomic, assign) NSInteger selectedIndex; + +/// 保存美肤数据到本地 +- (void)saveSkinsPersistently; + +/// 设置单项美肤值 +/// @param value 当前选中单项的值 +- (void)setSkinValue:(double)value; + +/// 设置当前所有美肤值 +- (void)setAllSkinValues; + +/// 恢复所有美肤值为默认 +- (void)recoverAllSkinValuesToDefault; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautySkinViewModel.m b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautySkinViewModel.m new file mode 100644 index 00000000..de3e56eb --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautySkinViewModel.m @@ -0,0 +1,146 @@ +// +// FUBeautySkinViewModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/7/27. +// + +#import "FUBeautySkinViewModel.h" +#import "FUBeautyDefine.h" + +#import + +@interface FUBeautySkinViewModel () + +@property (nonatomic, copy) NSArray *beautySkins; + +@end + +@implementation FUBeautySkinViewModel + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautySkinKey]) { + // 获取本地美肤数据 + self.beautySkins = [self localSkins]; + } else { + // 获取默认美肤数据 + self.beautySkins = [self defaultSkins]; + } + self.selectedIndex = -1; + } + return self; +} + +#pragma mark - Instance methods + +- (void)saveSkinsPersistently { + if (self.beautySkins.count == 0) { + return; + } + NSMutableArray *skins = [[NSMutableArray alloc] init]; + for (FUBeautySkinModel *model in self.beautySkins) { + NSDictionary *dictionary = [model dictionaryWithValuesForKeys:@[@"name", @"type", @"currentValue", @"defaultValue", @"defaultValueInMiddle", @"ratio"]]; + [skins addObject:dictionary]; + } + [[NSUserDefaults standardUserDefaults] setObject:skins forKey:FUPersistentBeautySkinKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)setSkinValue:(double)value { + if (self.selectedIndex < 0 || self.selectedIndex >= self.beautySkins.count) { + return; + } + FUBeautySkinModel *model = self.beautySkins[self.selectedIndex]; + model.currentValue = value * model.ratio; + [self setValue:model.currentValue forType:model.type]; +} + +- (void)setAllSkinValues { + for (FUBeautySkinModel *skin in self.beautySkins) { + [self setValue:skin.currentValue forType:skin.type]; + } +} + +- (void)recoverAllSkinValuesToDefault { + for (FUBeautySkinModel *skin in self.beautySkins) { + skin.currentValue = skin.defaultValue; + [self setValue:skin.currentValue forType:skin.type]; + } +} + +#pragma mark - Private methods + +- (void)setValue:(double)value forType:(FUBeautySkin)type { + switch (type) { + case FUBeautySkinBlurLevel: + [FURenderKit shareRenderKit].beauty.blurLevel = value; + break; + case FUBeautySkinColorLevel: + [FURenderKit shareRenderKit].beauty.colorLevel = value; + break; + case FUBeautySkinRedLevel: + [FURenderKit shareRenderKit].beauty.redLevel = value; + break; + case FUBeautySkinSharpen: + [FURenderKit shareRenderKit].beauty.sharpen = value; + break; + case FUBeautySkinFaceThreed: + [FURenderKit shareRenderKit].beauty.faceThreed = value; + break; + case FUBeautySkinEyeBright: + [FURenderKit shareRenderKit].beauty.eyeBright = value; + break; + case FUBeautySkinToothWhiten: + [FURenderKit shareRenderKit].beauty.toothWhiten = value; + break; + case FUBeautySkinRemovePouchStrength: + [FURenderKit shareRenderKit].beauty.removePouchStrength = value; + break; + case FUBeautySkinRemoveNasolabialFoldsStrength: + [FURenderKit shareRenderKit].beauty.removeNasolabialFoldsStrength = value; + break; + } +} + +- (NSArray *)localSkins { + NSArray *skins = [[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautySkinKey]; + NSMutableArray *mutableSkins = [[NSMutableArray alloc] init]; + for (NSDictionary *skin in skins) { + FUBeautySkinModel *model = [[FUBeautySkinModel alloc] init]; + [model setValuesForKeysWithDictionary:skin]; + [mutableSkins addObject:model]; + } + return [mutableSkins copy]; +} + +- (NSArray *)defaultSkins { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *skinPath = [bundle pathForResource:@"beauty_skin" ofType:@"json"]; + NSArray *skinData = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:skinPath] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *skins = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in skinData) { + FUBeautySkinModel *model = [[FUBeautySkinModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + [skins addObject:model]; + } + return [skins copy]; +} + +#pragma mark - Getters + +- (BOOL)isDefaultValue { + for (FUBeautySkinModel *skin in self.beautySkins) { + int currentIntValue = skin.defaultValueInMiddle ? (int)(skin.currentValue / skin.ratio * 100 - 50) : (int)(skin.currentValue / skin.ratio * 100); + int defaultIntValue = skin.defaultValueInMiddle ? (int)(skin.defaultValue / skin.ratio * 100 - 50) : (int)(skin.defaultValue / skin.ratio * 100); + if (currentIntValue != defaultIntValue) { + return NO; + } + } + return YES; +} + +@end diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyStyleViewModel.h b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyStyleViewModel.h new file mode 100644 index 00000000..5bdfbdcf --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyStyleViewModel.h @@ -0,0 +1,24 @@ +// +// FUBeautyStyleViewModel.h +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import +#import "FUBeautyStyleModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyStyleViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *beautyStyles; +/// 选中风格推荐索引 +@property (nonatomic, assign) NSInteger selectedIndex; + +/// 保存风格推荐数据到本地 +- (void)saveStylesPersistently; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyStyleViewModel.m b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyStyleViewModel.m new file mode 100644 index 00000000..538a0136 --- /dev/null +++ b/FUBeautyComponent/FUBeautyComponent/ViewModel/FUBeautyStyleViewModel.m @@ -0,0 +1,118 @@ +// +// FUBeautyStyleViewModel.m +// FUBeautyComponent +// +// Created by 项林平 on 2022/6/21. +// + +#import "FUBeautyStyleViewModel.h" + +#import "FUBeautyDefine.h" + +#import + +@interface FUBeautyStyleViewModel () + +@property (nonatomic, copy) NSArray *beautyStyles; + +@end + +@implementation FUBeautyStyleViewModel + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + self.beautyStyles = [self defaultStyles]; + if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautySelectedStyleIndexKey]) { + // 获取本地保存选中的索引 + self.selectedIndex = [[NSUserDefaults standardUserDefaults] integerForKey:FUPersistentBeautySelectedStyleIndexKey]; + } else { + // 默认索引为0 + _selectedIndex = 0; + } + } + return self; +} + +#pragma mark - Instance methods + +- (void)saveStylesPersistently { + if (self.selectedIndex >= 0 && self.selectedIndex < self.beautyStyles.count) { + [[NSUserDefaults standardUserDefaults] setInteger:self.selectedIndex forKey:FUPersistentBeautySelectedStyleIndexKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex < 0 || selectedIndex >= self.beautyStyles.count) { + return; + } + if (selectedIndex == 0) { + _selectedIndex = selectedIndex; + return; + } + + FUBeautyStyleModel *style = self.beautyStyles[selectedIndex]; + + // 美肤 + [FURenderKit shareRenderKit].beauty.blurLevel = style.blurLevel; + [FURenderKit shareRenderKit].beauty.colorLevel = style.colorLevel; + [FURenderKit shareRenderKit].beauty.redLevel = style.redLevel; + [FURenderKit shareRenderKit].beauty.sharpen = style.faceThreed; + [FURenderKit shareRenderKit].beauty.eyeBright = style.eyeBright; + [FURenderKit shareRenderKit].beauty.toothWhiten = style.toothWhiten; + [FURenderKit shareRenderKit].beauty.removePouchStrength = style.removePouchStrength; + [FURenderKit shareRenderKit].beauty.removeNasolabialFoldsStrength = style.removeNasolabialFoldsStrength; + + // 美型 + [FURenderKit shareRenderKit].beauty.cheekThinning = style.cheekThinning; + [FURenderKit shareRenderKit].beauty.cheekV = style.cheekV; + [FURenderKit shareRenderKit].beauty.cheekNarrow = style.cheekNarrow; + [FURenderKit shareRenderKit].beauty.cheekShort = style.cheekShort; + [FURenderKit shareRenderKit].beauty.cheekSmall = style.cheekSmall; + [FURenderKit shareRenderKit].beauty.intensityCheekbones = style.cheekbones; + [FURenderKit shareRenderKit].beauty.intensityLowerJaw = style.lowerJaw; + [FURenderKit shareRenderKit].beauty.eyeEnlarging = style.eyeEnlarging; + [FURenderKit shareRenderKit].beauty.intensityEyeCircle = style.eyeCircle; + [FURenderKit shareRenderKit].beauty.intensityChin = style.chin; + [FURenderKit shareRenderKit].beauty.intensityForehead = style.forehead; + [FURenderKit shareRenderKit].beauty.intensityNose = style.nose; + [FURenderKit shareRenderKit].beauty.intensityMouth = style.mouth; + [FURenderKit shareRenderKit].beauty.intensityLipThick = style.lipThick; + [FURenderKit shareRenderKit].beauty.intensityEyeHeight = style.eyeHeight; + [FURenderKit shareRenderKit].beauty.intensityCanthus = style.canthus; + [FURenderKit shareRenderKit].beauty.intensityEyeLid = style.eyeLid; + [FURenderKit shareRenderKit].beauty.intensityEyeSpace = style.eyeSpace; + [FURenderKit shareRenderKit].beauty.intensityEyeRotate = style.eyeRotate; + [FURenderKit shareRenderKit].beauty.intensityLongNose = style.longNose; + [FURenderKit shareRenderKit].beauty.intensityPhiltrum = style.philtrum; + [FURenderKit shareRenderKit].beauty.intensitySmile = style.smile; + [FURenderKit shareRenderKit].beauty.intensityBrowHeight = style.browHeight; + [FURenderKit shareRenderKit].beauty.intensityBrowSpace = style.browSpace; + [FURenderKit shareRenderKit].beauty.intensityBrowThick = style.browThick; + + // 滤镜 + [FURenderKit shareRenderKit].beauty.filterName = style.filterName; + [FURenderKit shareRenderKit].beauty.filterLevel = style.filterLevel; + + _selectedIndex = selectedIndex; +} + +#pragma mark - Private methods + +- (NSArray *)defaultStyles { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:@"beauty_style" ofType:@"json"]; + NSArray *data = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *styles = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in data) { + FUBeautyStyleModel *model = [[FUBeautyStyleModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + [styles addObject:model]; + } + return [styles copy]; +} + +@end diff --git a/FUCommonUIComponent/FUCommonUIComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist b/FUCommonUIComponent/FUCommonUIComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist index 1d403d89..5dbf690f 100644 --- a/FUCommonUIComponent/FUCommonUIComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/FUCommonUIComponent/FUCommonUIComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ FUCommonUIComponent.xcscheme_^#shared#^_ orderHint - 11 + 1 diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUAlert/FUAlertManager.m b/FUCommonUIComponent/FUCommonUIComponent/FUAlert/FUAlertManager.m index 5ce28e9f..31a4d1d7 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUAlert/FUAlertManager.m +++ b/FUCommonUIComponent/FUCommonUIComponent/FUAlert/FUAlertManager.m @@ -40,7 +40,7 @@ + (void)showAlertWithTitle:(NSString *)titleString confirm(); } }]; - [confirmAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; + [confirmAction setValue:[UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0] forKey:@"titleTextColor"]; [items addObject:confirmAction]; } if (!currentViewController) { diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUItemsView/FUItemsView.m b/FUCommonUIComponent/FUCommonUIComponent/FUItemsView/FUItemsView.m index 07f9cab6..da6d0683 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUItemsView/FUItemsView.m +++ b/FUCommonUIComponent/FUCommonUIComponent/FUItemsView/FUItemsView.m @@ -8,7 +8,7 @@ #import "FUItemsView.h" #import "FUItemCell.h" -NSString * const kFUItemCellIdentifier = @"FUItemCell"; +static NSString * const kFUItemCellIdentifier = @"FUItemCell"; @interface FUItemsView () @@ -165,12 +165,12 @@ - (void)setItems:(NSArray *)items { } - (void)setSelectedIndex:(NSInteger)selectedIndex { - if (_selectedIndex == selectedIndex || selectedIndex < 0 || selectedIndex >= self.items.count) { + if (selectedIndex < 0 || selectedIndex >= self.items.count) { return; } _selectedIndex = selectedIndex; dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:selectedIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; if (self.delegate && [self.delegate respondsToSelector:@selector(itemsView:didSelectItemAtIndex:)]) { [self.delegate itemsView:self didSelectItemAtIndex:selectedIndex]; } diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.h b/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.h index 0ec4080a..301fab80 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.h +++ b/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.h @@ -19,14 +19,18 @@ NS_ASSUME_NONNULL_BEGIN @optional - (BOOL)segmentBar:(FUSegmentBar *)segmentBar shouldSelectItemAtIndex:(NSInteger)index; +- (BOOL)segmentBar:(FUSegmentBar *)segmentBar shouldDisableItemAtIndex:(NSInteger)index; + @end @interface FUSegmentBarConfigurations : NSObject /// 普通颜色 @property (nonatomic, strong) UIColor *normalTitleColor; -/// 选中颜色 +/// 选中状态颜色 @property (nonatomic, strong) UIColor *selectedTitleColor; +/// 无法选中状态颜色 +@property (nonatomic, strong) UIColor *disabledTitleColor; /// 字体 @property (nonatomic, strong) UIFont *titleFont; @@ -54,6 +58,8 @@ NS_ASSUME_NONNULL_BEGIN /// @param configuration 配置信息 - (instancetype)initWithFrame:(CGRect)frame titles:(NSArray *)titles configuration:(nullable FUSegmentBarConfigurations *)configuration; +- (void)refresh; + @end @interface FUSegmentsBarCell : UICollectionViewCell diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.m b/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.m index 9e226d97..ae1637f9 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.m +++ b/FUCommonUIComponent/FUCommonUIComponent/FUSegmentBar/FUSegmentBar.m @@ -16,6 +16,7 @@ - (instancetype)init { // 默认选中/未选中颜色 self.selectedTitleColor = [UIColor colorWithRed:94/255.0f green:199/255.0f blue:254/255.0f alpha:1.0]; self.normalTitleColor = [UIColor whiteColor]; + self.disabledTitleColor = [UIColor colorWithWhite:1 alpha:0.6]; self.titleFont = [UIFont systemFontOfSize:13]; } return self; @@ -95,6 +96,15 @@ - (void)setSelectedIndex:(NSInteger)selectedIndex { } } +- (void)refresh { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + if (self.selectedIndex >= 0) { + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + #pragma mark - Collection view data source - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { @@ -107,6 +117,11 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection cell.segmentTitleLabel.font = self.configuration.titleFont; cell.segmentNormalTitleColor = self.configuration.normalTitleColor; cell.segmentSelectedTitleColor = self.configuration.selectedTitleColor; + if (self.delegate && [self.delegate respondsToSelector:@selector(segmentBar:shouldDisableItemAtIndex:)]) { + if ([self.delegate segmentBar:self shouldDisableItemAtIndex:indexPath.item]) { + cell.segmentTitleLabel.textColor = self.configuration.disabledTitleColor; + } + } return cell; } @@ -129,7 +144,19 @@ - (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtInde #pragma mark - Collection view delegate flow layout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake([self.itemWidths[indexPath.item] floatValue], CGRectGetHeight(self.frame)); + return CGSizeMake([self.itemWidths[indexPath.item] floatValue], CGRectGetHeight(collectionView.frame)); +} + +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { + return UIEdgeInsetsZero; +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { + return 0; +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { + return 0; } #pragma mark - Getters @@ -137,8 +164,6 @@ - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollection - (UICollectionView *)collectionView { if (!_collectionView) { UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.minimumInteritemSpacing = 0; - flowLayout.minimumLineSpacing = 0; flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), 49.f) collectionViewLayout:flowLayout]; _collectionView.backgroundColor = [UIColor clearColor]; diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUSlider/FUSlider.m b/FUCommonUIComponent/FUCommonUIComponent/FUSlider/FUSlider.m index e10ad07e..834542ae 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUSlider/FUSlider.m +++ b/FUCommonUIComponent/FUCommonUIComponent/FUSlider/FUSlider.m @@ -49,19 +49,24 @@ - (void)configureUI { -(void)layoutSubviews { [super layoutSubviews]; - self.middleLine.frame = CGRectMake(CGRectGetWidth(self.bounds)/2.0 - 1, CGRectGetHeight(self.bounds)/2.0 - 4, 2, 8); + if (!self.trackView.hidden) { + [self bringSubviewToFront:self.trackView]; + } + if (!self.middleLine.hidden) { + self.middleLine.frame = CGRectMake(CGRectGetWidth(self.bounds)/2.0 - 1, CGRectGetHeight(self.bounds)/2.0 - 4, 2, 8); + } [self setValue:self.value animated:NO]; } - (void)setBidirection:(BOOL)bidirection { _bidirection = bidirection; if (bidirection) { - self.middleLine.hidden = NO ; - self.trackView.hidden = NO ; + self.middleLine.hidden = NO; + self.trackView.hidden = NO; [self setMinimumTrackTintColor:[UIColor whiteColor]]; } else { - self.middleLine.hidden = YES ; - self.trackView.hidden = YES ; + self.middleLine.hidden = YES; + self.trackView.hidden = YES; [self setMinimumTrackTintColor:[UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1]]; } } @@ -71,25 +76,24 @@ - (void)setValue:(float)value animated:(BOOL)animated { if (_bidirection) { self.tipLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100 - 50)]; - CGFloat currentValue = value - 0.5 ; + CGFloat currentValue = value - 0.5; CGFloat width = currentValue * CGRectGetWidth(self.bounds); if (width < 0 ) { - width = -width ; + width = -width; } - CGFloat originX = currentValue > 0 ? CGRectGetWidth(self.bounds) / 2.0 : CGRectGetWidth(self.bounds) / 2.0 - width ; + CGFloat originX = currentValue > 0 ? CGRectGetWidth(self.bounds) / 2.0 : CGRectGetWidth(self.bounds) / 2.0 - width; self.trackView.frame = CGRectMake(originX, CGRectGetHeight(self.frame)/2.0 - 2, width, 4.0); } else { self.tipLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100)]; } - - CGFloat x = value * (self.frame.size.width - 20) - self.tipLabel.frame.size.width * 0.5 + 10; + CGFloat x = value * (self.frame.size.width - 16) - self.tipLabel.frame.size.width * 0.5 + 8; CGRect frame = self.tipLabel.frame; frame.origin.x = x; self.tipBackgroundImageView.frame = frame; self.tipLabel.frame = frame; - self.tipLabel.hidden = !self.tracking; - self.tipBackgroundImageView.hidden = !self.tracking; + self.tipLabel.hidden = !self.isTouchInside; + self.tipBackgroundImageView.hidden = !self.isTouchInside; } @@ -107,11 +111,9 @@ - (UIImageView *)tipBackgroundImageView { - (UILabel *)tipLabel { if (!_tipLabel) { _tipLabel = [[UILabel alloc] initWithFrame:self.tipBackgroundImageView.frame]; - _tipLabel.text = @""; - _tipLabel.textColor = [UIColor darkGrayColor]; - _tipLabel.font = [UIFont systemFontOfSize:14]; + _tipLabel.textColor = [UIColor whiteColor]; + _tipLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightMedium]; _tipLabel.textAlignment = NSTextAlignmentCenter; - _tipLabel.backgroundColor = [UIColor clearColor]; _tipLabel.hidden = YES; } return _tipLabel; @@ -130,8 +132,8 @@ - (UIView *)middleLine { if (!_middleLine) { _middleLine = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.bounds)/2.0 - 1, CGRectGetHeight(self.bounds)/2.0 - 4, 2, 8)]; _middleLine.backgroundColor = [UIColor whiteColor]; - _middleLine.layer.masksToBounds = YES ; - _middleLine.layer.cornerRadius = 1.0 ; + _middleLine.layer.masksToBounds = YES; + _middleLine.layer.cornerRadius = 1.0; _middleLine.hidden = YES; } return _middleLine; diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.h b/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.h index ddcf7b3c..e6793627 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.h +++ b/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.h @@ -8,6 +8,11 @@ #import +typedef NS_ENUM(NSUInteger, FUTipHUDPosition) { + FUTipHUDPositionTop, + FUTipHUDPositionCenter +}; + NS_ASSUME_NONNULL_BEGIN @interface FUTipHUD : NSObject @@ -21,6 +26,12 @@ NS_ASSUME_NONNULL_BEGIN /// @param delay 自动消失时间,单位: 秒 + (void)showTips:(NSString *)tipsString dismissWithDelay:(NSTimeInterval)delay; +/// 文字提示 +/// @param tipsString 文字 +/// @param delay 自动消失时间,单位: 秒 +/// @param position 显示位置,默认为FUTipHUDPositionTop ++ (void)showTips:(NSString *)tipsString dismissWithDelay:(NSTimeInterval)delay position:(FUTipHUDPosition)position; + @end NS_ASSUME_NONNULL_END diff --git a/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.m b/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.m index 5edcc5db..bc8f35b8 100644 --- a/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.m +++ b/FUCommonUIComponent/FUCommonUIComponent/FUTipHUD/FUTipHUD.m @@ -16,6 +16,10 @@ + (void)showTips:(NSString *)tipsString { } + (void)showTips:(NSString *)tipsString dismissWithDelay:(NSTimeInterval)delay { + [self showTips:tipsString dismissWithDelay:delay position:FUTipHUDPositionTop]; +} + ++ (void)showTips:(NSString *)tipsString dismissWithDelay:(NSTimeInterval)delay position:(FUTipHUDPosition)position { UIWindow *window = [UIApplication sharedApplication].delegate.window; // 避免重复生成label NSArray *views = window.subviews; @@ -38,16 +42,34 @@ + (void)showTips:(NSString *)tipsString dismissWithDelay:(NSTimeInterval)delay { [window addSubview:tipLabel]; CGFloat tipWidth = [tipsString sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:13]}].width; - if (tipWidth + 50 > CGRectGetWidth(window.bounds)) { - NSLayoutConstraint *centerYConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]; - NSLayoutConstraint *leadingConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeLeading multiplier:1.0 constant:5]; - NSLayoutConstraint *trailingConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-5]; - [window addConstraints:@[centerYConstraint, leadingConstraint, trailingConstraint]]; + if (position == FUTipHUDPositionTop) { + CGFloat topConstant = 0; + if (@available(iOS 11.0, *)) { + topConstant = window.safeAreaInsets.top; + } + NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeTop multiplier:1 constant:84 + topConstant]; + [window addConstraint:topConstraint]; + if (tipWidth + 50 > CGRectGetWidth(window.bounds)) { + NSLayoutConstraint *leadingConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeLeading multiplier:1.0 constant:5]; + NSLayoutConstraint *trailingConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-5]; + [window addConstraints:@[leadingConstraint, trailingConstraint]]; + } else { + NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [window addConstraint:centerXConstraint]; + } } else { NSLayoutConstraint *centerYConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]; - NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; - [window addConstraints:@[centerXConstraint, centerYConstraint]]; + [window addConstraint:centerYConstraint]; + if (tipWidth + 50 > CGRectGetWidth(window.bounds)) { + NSLayoutConstraint *leadingConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeLeading multiplier:1.0 constant:5]; + NSLayoutConstraint *trailingConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-5]; + [window addConstraints:@[leadingConstraint, trailingConstraint]]; + } else { + NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem:tipLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [window addConstraint:centerXConstraint]; + } } + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [UIView animateWithDuration:0.3 animations:^{ tipLabel.alpha = 0; diff --git a/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background.png b/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background.png index aba1347a..984c6972 100644 Binary files a/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background.png and b/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background.png differ diff --git a/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@2x.png b/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@2x.png index 0166035f..8393d49d 100644 Binary files a/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@2x.png and b/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@2x.png differ diff --git a/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@3x.png b/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@3x.png index 4a57d70e..bc0710b7 100644 Binary files a/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@3x.png and b/FUCommonUIComponent/FUCommonUIComponent/Resource/FUCommonUIComponent.xcassets/slider_tip_background.imageset/slider_tip_background@3x.png differ diff --git a/FUCommonUIComponent/README.md b/FUCommonUIComponent/README.md new file mode 100644 index 00000000..b2b692da --- /dev/null +++ b/FUCommonUIComponent/README.md @@ -0,0 +1,3 @@ +# FUCommonUIComponent + +通用UI组件 \ No newline at end of file diff --git a/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.pbxproj b/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.pbxproj new file mode 100644 index 00000000..872dfa97 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.pbxproj @@ -0,0 +1,550 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + E3381CB528DC1698005C2E57 /* FURenderKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3381CB428DC1698005C2E57 /* FURenderKit.framework */; }; + E3A58CCA28A3CCA100941101 /* FUGreenScreenComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CC928A3CCA100941101 /* FUGreenScreenComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3A58CDB28A3CE0A00941101 /* FUGreenScreenKeyingViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CD528A3CE0900941101 /* FUGreenScreenKeyingViewModel.m */; }; + E3A58CDC28A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CD628A3CE0900941101 /* FUGreenScreenSafeAreaViewModel.h */; }; + E3A58CDD28A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CD728A3CE0900941101 /* FUGreenScreenBackgroundViewModel.h */; }; + E3A58CDE28A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CD828A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.m */; }; + E3A58CDF28A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CD928A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.m */; }; + E3A58CE028A3CE0A00941101 /* FUGreenScreenKeyingViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CDA28A3CE0A00941101 /* FUGreenScreenKeyingViewModel.h */; }; + E3A58CE728A3CE3100941101 /* FUGreenScreenKeyingModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CE128A3CE3000941101 /* FUGreenScreenKeyingModel.m */; }; + E3A58CE828A3CE3100941101 /* FUGreenScreenSafeAreaModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CE228A3CE3100941101 /* FUGreenScreenSafeAreaModel.h */; }; + E3A58CE928A3CE3100941101 /* FUGreenScreenKeyingModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CE328A3CE3100941101 /* FUGreenScreenKeyingModel.h */; }; + E3A58CEA28A3CE3100941101 /* FUGreenScreenBackgroundModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CE428A3CE3100941101 /* FUGreenScreenBackgroundModel.h */; }; + E3A58CEB28A3CE3100941101 /* FUGreenScreenBackgroundModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CE528A3CE3100941101 /* FUGreenScreenBackgroundModel.m */; }; + E3A58CEC28A3CE3100941101 /* FUGreenScreenSafeAreaModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CE628A3CE3100941101 /* FUGreenScreenSafeAreaModel.m */; }; + E3A58CF528A3CE5900941101 /* FUGreenScreenSafeAreaView.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CED28A3CE5900941101 /* FUGreenScreenSafeAreaView.h */; }; + E3A58CF628A3CE5900941101 /* FUGreenScreenKeyingView.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CEE28A3CE5900941101 /* FUGreenScreenKeyingView.h */; }; + E3A58CF728A3CE5900941101 /* FUGreenScreenColorPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CEF28A3CE5900941101 /* FUGreenScreenColorPicker.h */; }; + E3A58CF828A3CE5900941101 /* FUGreenScreenBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CF028A3CE5900941101 /* FUGreenScreenBackgroundView.m */; }; + E3A58CF928A3CE5900941101 /* FUGreenScreenKeyingView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CF128A3CE5900941101 /* FUGreenScreenKeyingView.m */; }; + E3A58CFA28A3CE5900941101 /* FUGreenScreenBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58CF228A3CE5900941101 /* FUGreenScreenBackgroundView.h */; }; + E3A58CFB28A3CE5900941101 /* FUGreenScreenSafeAreaView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CF328A3CE5900941101 /* FUGreenScreenSafeAreaView.m */; }; + E3A58CFC28A3CE5900941101 /* FUGreenScreenColorPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CF428A3CE5900941101 /* FUGreenScreenColorPicker.m */; }; + E3A58D6028A4AEF500941101 /* FUGreenScreenDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58D5E28A4AEF500941101 /* FUGreenScreenDefine.h */; }; + E3A58D6128A4AEF500941101 /* FUGreenScreenDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58D5F28A4AEF500941101 /* FUGreenScreenDefine.m */; }; + E3A58D8428A4B4F000941101 /* inkPainting.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D7A28A4B4EF00941101 /* inkPainting.mp4 */; }; + E3A58D8528A4B4F000941101 /* beach.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D7B28A4B4EF00941101 /* beach.mp4 */; }; + E3A58D8628A4B4F000941101 /* green_screen_keying.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D7C28A4B4EF00941101 /* green_screen_keying.json */; }; + E3A58D8728A4B4F000941101 /* classroom.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D7D28A4B4EF00941101 /* classroom.mp4 */; }; + E3A58D8928A4B4F000941101 /* safe_area_2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D7F28A4B4EF00941101 /* safe_area_2.jpg */; }; + E3A58D8A28A4B4F000941101 /* safe_area_1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D8028A4B4EF00941101 /* safe_area_1.jpg */; }; + E3A58D8B28A4B4F000941101 /* springForest.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D8128A4B4EF00941101 /* springForest.mp4 */; }; + E3A58D8C28A4B4F000941101 /* science.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D8228A4B4F000941101 /* science.mp4 */; }; + E3A58D8D28A4B4F000941101 /* green_screen_background.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A58D8328A4B4F000941101 /* green_screen_background.json */; }; + E3A58D9028A4B5ED00941101 /* FUGreenScreenComponentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A58D8E28A4B5ED00941101 /* FUGreenScreenComponentManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3A58D9128A4B5ED00941101 /* FUGreenScreenComponentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58D8F28A4B5ED00941101 /* FUGreenScreenComponentManager.m */; }; + E3A58DA428A4ED5100941101 /* FUGreenScreenComponent.strings in Resources */ = {isa = PBXBuildFile; fileRef = E3A58DA628A4ED5100941101 /* FUGreenScreenComponent.strings */; }; + E3A58DA928A4ED8000941101 /* FUGreenScreen.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E3A58DA828A4ED8000941101 /* FUGreenScreen.xcassets */; }; + E3A58DB628A4F9A100941101 /* FUCommonUIComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3A58D6828A4B07D00941101 /* FUCommonUIComponent.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + E3381CB428DC1698005C2E57 /* FURenderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FURenderKit.framework; path = ../FULiveDemo/FURenderKit/FURenderKit.framework; sourceTree = ""; }; + E3A58CC628A3CCA100941101 /* FUGreenScreenComponent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FUGreenScreenComponent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E3A58CC928A3CCA100941101 /* FUGreenScreenComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenComponent.h; sourceTree = ""; }; + E3A58CD528A3CE0900941101 /* FUGreenScreenKeyingViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenKeyingViewModel.m; sourceTree = ""; }; + E3A58CD628A3CE0900941101 /* FUGreenScreenSafeAreaViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenSafeAreaViewModel.h; sourceTree = ""; }; + E3A58CD728A3CE0900941101 /* FUGreenScreenBackgroundViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenBackgroundViewModel.h; sourceTree = ""; }; + E3A58CD828A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenSafeAreaViewModel.m; sourceTree = ""; }; + E3A58CD928A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenBackgroundViewModel.m; sourceTree = ""; }; + E3A58CDA28A3CE0A00941101 /* FUGreenScreenKeyingViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenKeyingViewModel.h; sourceTree = ""; }; + E3A58CE128A3CE3000941101 /* FUGreenScreenKeyingModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenKeyingModel.m; sourceTree = ""; }; + E3A58CE228A3CE3100941101 /* FUGreenScreenSafeAreaModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenSafeAreaModel.h; sourceTree = ""; }; + E3A58CE328A3CE3100941101 /* FUGreenScreenKeyingModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenKeyingModel.h; sourceTree = ""; }; + E3A58CE428A3CE3100941101 /* FUGreenScreenBackgroundModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenBackgroundModel.h; sourceTree = ""; }; + E3A58CE528A3CE3100941101 /* FUGreenScreenBackgroundModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenBackgroundModel.m; sourceTree = ""; }; + E3A58CE628A3CE3100941101 /* FUGreenScreenSafeAreaModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenSafeAreaModel.m; sourceTree = ""; }; + E3A58CED28A3CE5900941101 /* FUGreenScreenSafeAreaView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenSafeAreaView.h; sourceTree = ""; }; + E3A58CEE28A3CE5900941101 /* FUGreenScreenKeyingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenKeyingView.h; sourceTree = ""; }; + E3A58CEF28A3CE5900941101 /* FUGreenScreenColorPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenColorPicker.h; sourceTree = ""; }; + E3A58CF028A3CE5900941101 /* FUGreenScreenBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenBackgroundView.m; sourceTree = ""; }; + E3A58CF128A3CE5900941101 /* FUGreenScreenKeyingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenKeyingView.m; sourceTree = ""; }; + E3A58CF228A3CE5900941101 /* FUGreenScreenBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenBackgroundView.h; sourceTree = ""; }; + E3A58CF328A3CE5900941101 /* FUGreenScreenSafeAreaView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenSafeAreaView.m; sourceTree = ""; }; + E3A58CF428A3CE5900941101 /* FUGreenScreenColorPicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenColorPicker.m; sourceTree = ""; }; + E3A58D5E28A4AEF500941101 /* FUGreenScreenDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenDefine.h; sourceTree = ""; }; + E3A58D5F28A4AEF500941101 /* FUGreenScreenDefine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenDefine.m; sourceTree = ""; }; + E3A58D6828A4B07D00941101 /* FUCommonUIComponent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = FUCommonUIComponent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E3A58D7A28A4B4EF00941101 /* inkPainting.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = inkPainting.mp4; sourceTree = ""; }; + E3A58D7B28A4B4EF00941101 /* beach.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = beach.mp4; sourceTree = ""; }; + E3A58D7C28A4B4EF00941101 /* green_screen_keying.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = green_screen_keying.json; sourceTree = ""; }; + E3A58D7D28A4B4EF00941101 /* classroom.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = classroom.mp4; sourceTree = ""; }; + E3A58D7F28A4B4EF00941101 /* safe_area_2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = safe_area_2.jpg; sourceTree = ""; }; + E3A58D8028A4B4EF00941101 /* safe_area_1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = safe_area_1.jpg; sourceTree = ""; }; + E3A58D8128A4B4EF00941101 /* springForest.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = springForest.mp4; sourceTree = ""; }; + E3A58D8228A4B4F000941101 /* science.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = science.mp4; sourceTree = ""; }; + E3A58D8328A4B4F000941101 /* green_screen_background.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = green_screen_background.json; sourceTree = ""; }; + E3A58D8E28A4B5ED00941101 /* FUGreenScreenComponentManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenComponentManager.h; sourceTree = ""; }; + E3A58D8F28A4B5ED00941101 /* FUGreenScreenComponentManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenComponentManager.m; sourceTree = ""; }; + E3A58DA528A4ED5100941101 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FUGreenScreenComponent.strings; sourceTree = ""; }; + E3A58DA728A4ED6200941101 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FUGreenScreenComponent.strings"; sourceTree = ""; }; + E3A58DA828A4ED8000941101 /* FUGreenScreen.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = FUGreenScreen.xcassets; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E3A58CC328A3CCA100941101 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E3381CB528DC1698005C2E57 /* FURenderKit.framework in Frameworks */, + E3A58DB628A4F9A100941101 /* FUCommonUIComponent.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + E3A58CBC28A3CCA100941101 = { + isa = PBXGroup; + children = ( + E3A58CC828A3CCA100941101 /* FUGreenScreenComponent */, + E3A58CC728A3CCA100941101 /* Products */, + E3A58D5928A4AEA900941101 /* Frameworks */, + ); + sourceTree = ""; + }; + E3A58CC728A3CCA100941101 /* Products */ = { + isa = PBXGroup; + children = ( + E3A58CC628A3CCA100941101 /* FUGreenScreenComponent.framework */, + ); + name = Products; + sourceTree = ""; + }; + E3A58CC828A3CCA100941101 /* FUGreenScreenComponent */ = { + isa = PBXGroup; + children = ( + E3A58CD228A3CD3C00941101 /* Model */, + E3A58CD128A3CD3800941101 /* View */, + E3A58CD028A3CD3400941101 /* ViewModel */, + E3A58CD328A3CD4200941101 /* Resource */, + E3A58CC928A3CCA100941101 /* FUGreenScreenComponent.h */, + E3A58D5E28A4AEF500941101 /* FUGreenScreenDefine.h */, + E3A58D5F28A4AEF500941101 /* FUGreenScreenDefine.m */, + E3A58D8E28A4B5ED00941101 /* FUGreenScreenComponentManager.h */, + E3A58D8F28A4B5ED00941101 /* FUGreenScreenComponentManager.m */, + ); + path = FUGreenScreenComponent; + sourceTree = ""; + }; + E3A58CD028A3CD3400941101 /* ViewModel */ = { + isa = PBXGroup; + children = ( + E3A58CD728A3CE0900941101 /* FUGreenScreenBackgroundViewModel.h */, + E3A58CD928A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.m */, + E3A58CDA28A3CE0A00941101 /* FUGreenScreenKeyingViewModel.h */, + E3A58CD528A3CE0900941101 /* FUGreenScreenKeyingViewModel.m */, + E3A58CD628A3CE0900941101 /* FUGreenScreenSafeAreaViewModel.h */, + E3A58CD828A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.m */, + ); + path = ViewModel; + sourceTree = ""; + }; + E3A58CD128A3CD3800941101 /* View */ = { + isa = PBXGroup; + children = ( + E3A58CF228A3CE5900941101 /* FUGreenScreenBackgroundView.h */, + E3A58CF028A3CE5900941101 /* FUGreenScreenBackgroundView.m */, + E3A58CEF28A3CE5900941101 /* FUGreenScreenColorPicker.h */, + E3A58CF428A3CE5900941101 /* FUGreenScreenColorPicker.m */, + E3A58CEE28A3CE5900941101 /* FUGreenScreenKeyingView.h */, + E3A58CF128A3CE5900941101 /* FUGreenScreenKeyingView.m */, + E3A58CED28A3CE5900941101 /* FUGreenScreenSafeAreaView.h */, + E3A58CF328A3CE5900941101 /* FUGreenScreenSafeAreaView.m */, + ); + path = View; + sourceTree = ""; + }; + E3A58CD228A3CD3C00941101 /* Model */ = { + isa = PBXGroup; + children = ( + E3A58CE428A3CE3100941101 /* FUGreenScreenBackgroundModel.h */, + E3A58CE528A3CE3100941101 /* FUGreenScreenBackgroundModel.m */, + E3A58CE328A3CE3100941101 /* FUGreenScreenKeyingModel.h */, + E3A58CE128A3CE3000941101 /* FUGreenScreenKeyingModel.m */, + E3A58CE228A3CE3100941101 /* FUGreenScreenSafeAreaModel.h */, + E3A58CE628A3CE3100941101 /* FUGreenScreenSafeAreaModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E3A58CD328A3CD4200941101 /* Resource */ = { + isa = PBXGroup; + children = ( + E3A58DA628A4ED5100941101 /* FUGreenScreenComponent.strings */, + E3A58DA828A4ED8000941101 /* FUGreenScreen.xcassets */, + E3A58D7B28A4B4EF00941101 /* beach.mp4 */, + E3A58D7D28A4B4EF00941101 /* classroom.mp4 */, + E3A58D8328A4B4F000941101 /* green_screen_background.json */, + E3A58D7C28A4B4EF00941101 /* green_screen_keying.json */, + E3A58D7A28A4B4EF00941101 /* inkPainting.mp4 */, + E3A58D8028A4B4EF00941101 /* safe_area_1.jpg */, + E3A58D7F28A4B4EF00941101 /* safe_area_2.jpg */, + E3A58D8228A4B4F000941101 /* science.mp4 */, + E3A58D8128A4B4EF00941101 /* springForest.mp4 */, + ); + path = Resource; + sourceTree = ""; + }; + E3A58D5928A4AEA900941101 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E3381CB428DC1698005C2E57 /* FURenderKit.framework */, + E3A58D6828A4B07D00941101 /* FUCommonUIComponent.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + E3A58CC128A3CCA100941101 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A58CFA28A3CE5900941101 /* FUGreenScreenBackgroundView.h in Headers */, + E3A58CF528A3CE5900941101 /* FUGreenScreenSafeAreaView.h in Headers */, + E3A58CEA28A3CE3100941101 /* FUGreenScreenBackgroundModel.h in Headers */, + E3A58CDC28A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.h in Headers */, + E3A58CF728A3CE5900941101 /* FUGreenScreenColorPicker.h in Headers */, + E3A58CE828A3CE3100941101 /* FUGreenScreenSafeAreaModel.h in Headers */, + E3A58D9028A4B5ED00941101 /* FUGreenScreenComponentManager.h in Headers */, + E3A58CE928A3CE3100941101 /* FUGreenScreenKeyingModel.h in Headers */, + E3A58CCA28A3CCA100941101 /* FUGreenScreenComponent.h in Headers */, + E3A58CDD28A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.h in Headers */, + E3A58CE028A3CE0A00941101 /* FUGreenScreenKeyingViewModel.h in Headers */, + E3A58D6028A4AEF500941101 /* FUGreenScreenDefine.h in Headers */, + E3A58CF628A3CE5900941101 /* FUGreenScreenKeyingView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + E3A58CC528A3CCA100941101 /* FUGreenScreenComponent */ = { + isa = PBXNativeTarget; + buildConfigurationList = E3A58CCD28A3CCA100941101 /* Build configuration list for PBXNativeTarget "FUGreenScreenComponent" */; + buildPhases = ( + E3A58CC128A3CCA100941101 /* Headers */, + E3A58CC228A3CCA100941101 /* Sources */, + E3A58CC328A3CCA100941101 /* Frameworks */, + E3A58CC428A3CCA100941101 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FUGreenScreenComponent; + productName = FUGreenScreenComponent; + productReference = E3A58CC628A3CCA100941101 /* FUGreenScreenComponent.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E3A58CBD28A3CCA100941101 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1340; + TargetAttributes = { + E3A58CC528A3CCA100941101 = { + CreatedOnToolsVersion = 13.4.1; + }; + }; + }; + buildConfigurationList = E3A58CC028A3CCA100941101 /* Build configuration list for PBXProject "FUGreenScreenComponent" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + "zh-Hans", + ); + mainGroup = E3A58CBC28A3CCA100941101; + productRefGroup = E3A58CC728A3CCA100941101 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E3A58CC528A3CCA100941101 /* FUGreenScreenComponent */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E3A58CC428A3CCA100941101 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A58D8C28A4B4F000941101 /* science.mp4 in Resources */, + E3A58DA928A4ED8000941101 /* FUGreenScreen.xcassets in Resources */, + E3A58D8628A4B4F000941101 /* green_screen_keying.json in Resources */, + E3A58D8D28A4B4F000941101 /* green_screen_background.json in Resources */, + E3A58D8428A4B4F000941101 /* inkPainting.mp4 in Resources */, + E3A58D8528A4B4F000941101 /* beach.mp4 in Resources */, + E3A58D8928A4B4F000941101 /* safe_area_2.jpg in Resources */, + E3A58D8B28A4B4F000941101 /* springForest.mp4 in Resources */, + E3A58D8A28A4B4F000941101 /* safe_area_1.jpg in Resources */, + E3A58D8728A4B4F000941101 /* classroom.mp4 in Resources */, + E3A58DA428A4ED5100941101 /* FUGreenScreenComponent.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E3A58CC228A3CCA100941101 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A58CDF28A3CE0A00941101 /* FUGreenScreenBackgroundViewModel.m in Sources */, + E3A58CE728A3CE3100941101 /* FUGreenScreenKeyingModel.m in Sources */, + E3A58CFB28A3CE5900941101 /* FUGreenScreenSafeAreaView.m in Sources */, + E3A58CF928A3CE5900941101 /* FUGreenScreenKeyingView.m in Sources */, + E3A58D9128A4B5ED00941101 /* FUGreenScreenComponentManager.m in Sources */, + E3A58D6128A4AEF500941101 /* FUGreenScreenDefine.m in Sources */, + E3A58CDE28A3CE0A00941101 /* FUGreenScreenSafeAreaViewModel.m in Sources */, + E3A58CDB28A3CE0A00941101 /* FUGreenScreenKeyingViewModel.m in Sources */, + E3A58CEC28A3CE3100941101 /* FUGreenScreenSafeAreaModel.m in Sources */, + E3A58CF828A3CE5900941101 /* FUGreenScreenBackgroundView.m in Sources */, + E3A58CFC28A3CE5900941101 /* FUGreenScreenColorPicker.m in Sources */, + E3A58CEB28A3CE3100941101 /* FUGreenScreenBackgroundModel.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + E3A58DA628A4ED5100941101 /* FUGreenScreenComponent.strings */ = { + isa = PBXVariantGroup; + children = ( + E3A58DA528A4ED5100941101 /* en */, + E3A58DA728A4ED6200941101 /* zh-Hans */, + ); + name = FUGreenScreenComponent.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E3A58CCB28A3CCA100941101 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E3A58CCC28A3CCA100941101 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E3A58CCE28A3CCA100941101 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 35A6KD62ZJ; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../FULiveDemo/FURenderKit", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = faceunity.FUGreenScreenComponent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E3A58CCF28A3CCA100941101 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 35A6KD62ZJ; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../FULiveDemo/FURenderKit", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = faceunity.FUGreenScreenComponent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E3A58CC028A3CCA100941101 /* Build configuration list for PBXProject "FUGreenScreenComponent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3A58CCB28A3CCA100941101 /* Debug */, + E3A58CCC28A3CCA100941101 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E3A58CCD28A3CCA100941101 /* Build configuration list for PBXNativeTarget "FUGreenScreenComponent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3A58CCE28A3CCA100941101 /* Debug */, + E3A58CCF28A3CCA100941101 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E3A58CBD28A3CCA100941101 /* Project object */; +} diff --git a/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponent.h b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponent.h new file mode 100644 index 00000000..8d73a3ae --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponent.h @@ -0,0 +1,19 @@ +// +// FUGreenScreenComponent.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/10. +// + +#import +#import "FUGreenScreenComponentManager.h" + +//! Project version number for FUGreenScreenComponent. +FOUNDATION_EXPORT double FUGreenScreenComponentVersionNumber; + +//! Project version string for FUGreenScreenComponent. +FOUNDATION_EXPORT const unsigned char FUGreenScreenComponentVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponentManager.h b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponentManager.h new file mode 100644 index 00000000..c3fffe2a --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponentManager.h @@ -0,0 +1,58 @@ +// +// FUGreenScreenComponentManager.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/11. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUGreenScreenComponentDelegate + +/// 自定义安全区域 +- (void)greenScreenComponentDidCustomizeSafeArea; + +@optional +- (void)greenScreenComponentViewHeightDidChange:(CGFloat)height; + +@end + +@interface FUGreenScreenComponentManager : NSObject + +/// 用于绿幕取色,默认为FURenderKit的glDisplayView +@property (nonatomic, strong, nullable) FUGLDisplayView *displayView; +/// 绿幕视图总高度 +@property (nonatomic, assign, readonly) CGFloat componentViewHeight; +/// 绿幕视图选中功能索引,默认为0,-1表示未选中 +@property (nonatomic, assign, readonly) NSInteger selectedIndex; + +@property (nonatomic, weak) id delegate; + ++ (instancetype)sharedManager; + +/// 销毁 ++ (void)destory; + +/// 在目标视图中添加绿幕组件视图(固定位置为目标视图底部) +/// @param view 目标视图 +- (void)addComponentViewToView:(UIView *)view; + +/// 在父视图中移除绿幕组件视图 +- (void)removeComponentView; + +/// 加载绿幕效果 +- (void)loadGreenScreen; + +/// 卸载当前加载的绿幕 +- (void)unloadGreenScreen; + +/// 保存自定义安全区域图片 +/// @param image 图片 +- (void)saveCustomSafeArea:(UIImage *)image; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponentManager.m b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponentManager.m new file mode 100644 index 00000000..f6365d25 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenComponentManager.m @@ -0,0 +1,428 @@ +// +// FUGreenScreenComponentManager.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/11. +// + +#import "FUGreenScreenComponentManager.h" +#import "FUGreenScreenDefine.h" + +#import "FUGreenScreenKeyingView.h" +#import "FUGreenScreenSafeAreaView.h" +#import "FUGreenScreenBackgroundView.h" +#import "FUGreenScreenColorPicker.h" + +#import + +static FUGreenScreenComponentManager *manager = nil; +static dispatch_once_t onceToken; + +@interface FUGreenScreenComponentManager () + +@property (nonatomic, weak) UIView *targetView; + +@property (nonatomic, strong) FUSegmentBar *segmentBar; +@property (nonatomic, strong) FUGreenScreenKeyingView *keyingView; +@property (nonatomic, strong) FUGreenScreenSafeAreaView *safeAreaView; +@property (nonatomic, strong) FUGreenScreenBackgroundView *backgroundView; +/// 取色器 +@property (nonatomic, strong) FUGreenScreenColorPicker *colorPicker; + +@property (nonatomic, strong) UIGestureRecognizer *panGesture; +@property (nonatomic, strong) UIGestureRecognizer *pinchGesture; + +@property (nonatomic, strong) FUGreenScreenKeyingViewModel *keyingViewModel; +@property (nonatomic, strong) FUGreenScreenBackgroundViewModel *backgroundViewModel; + +@property (nonatomic, assign) NSInteger selectedIndex; +/// 是否显示安全区域选择器 +@property (nonatomic, assign) BOOL isShowingSafeAreaSelection; + +@end + +@implementation FUGreenScreenComponentManager + +#pragma mark - Class methods + ++ (instancetype)sharedManager { + dispatch_once(&onceToken, ^{ + manager = [[FUGreenScreenComponentManager alloc] init]; + }); + return manager; +} + ++ (void)destory { + onceToken = 0; + manager = nil; +} + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + self.selectedIndex = FUGreenScreenCategoryNone; + } + return self; +} + +#pragma mark - Instance methods + +- (void)addComponentViewToView:(UIView *)view { + NSAssert(view != nil, @"FUGreenScreenComponent: view can not be nil!"); + + self.targetView = view; + [self.targetView addSubview:self.keyingView]; + [self.targetView addSubview:self.backgroundView]; + [self.targetView addSubview:self.safeAreaView]; + [self.targetView addSubview:self.segmentBar]; + + // 拖拽手势 + self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)]; + self.panGesture.delegate = self; + [self.targetView addGestureRecognizer:self.panGesture]; + + // 缩放手势 + self.pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)]; + self.pinchGesture.delegate = self; + [self.targetView addGestureRecognizer:self.pinchGesture]; +} + +- (void)removeComponentView { + if (self.keyingView.superview) { + [self.keyingView removeFromSuperview]; + } + if (self.backgroundView.superview) { + [self.backgroundView removeFromSuperview]; + } + if (self.safeAreaView.superview) { + [self.safeAreaView removeFromSuperview]; + } + if (self.segmentBar.superview) { + [self.segmentBar removeFromSuperview]; + } + if (self.colorPicker.superview) { + [self.colorPicker removeFromSuperview]; + } + [self.targetView removeGestureRecognizer:self.panGesture]; + [self.targetView removeGestureRecognizer:self.pinchGesture]; +} + +- (void)loadGreenScreen { + if (![FURenderKit shareRenderKit].greenScreen) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"green_screen_740" ofType:@"bundle"]; + FUGreenScreen *greenScreen = [[FUGreenScreen alloc] initWithPath:path name:@"green_screen"]; + [FURenderKit shareRenderKit].greenScreen = greenScreen; + } +} + +- (void)unloadGreenScreen { + [FURenderKit shareRenderKit].greenScreen = nil; +} + +- (void)saveCustomSafeArea:(UIImage *)image { + if (!image) { + return; + } + if ([self.keyingViewModel.safeAreaViewModel saveLocalSafeAreaImage:image]) { + // 刷新安全区域数据 + [self.keyingViewModel.safeAreaViewModel realoadSafeAreaData]; + // 默认选择自定义的安全区域图片 + self.keyingViewModel.safeAreaViewModel.selectedIndex = 3; + // 刷新安全区域视图 + [self.safeAreaView refreshSafeAreas]; + } +} + +#pragma mark - Event response + +- (void)panAction:(UIPanGestureRecognizer *)pan { + UIView *view = pan.view; + if (pan.state == UIGestureRecognizerStateBegan || pan.state == UIGestureRecognizerStateChanged) { + CGPoint translationPoint = [pan translationInView:view.superview]; + CGFloat dx = translationPoint.x/CGRectGetWidth(view.superview.bounds); + CGFloat dy = translationPoint.y/CGRectGetHeight(view.superview.bounds); + if (![FURenderKit shareRenderKit].greenScreen) { + return; + } + FUGreenScreen *greenScreen = [FURenderKit shareRenderKit].greenScreen; + FUGLDisplayViewOrientation orientation = self.displayView.origintation; + switch (orientation) { + case FUGLDisplayViewOrientationPortrait: + greenScreen.center = CGPointMake(greenScreen.center.x + dx, greenScreen.center.y + dy); + break; + case FUGLDisplayViewOrientationPortraitUpsideDown: + greenScreen.center = CGPointMake(greenScreen.center.x - dx, greenScreen.center.y - dy); + break; + case FUGLDisplayViewOrientationLandscapeRight: + greenScreen.center = CGPointMake(greenScreen.center.x + dy, greenScreen.center.y - dx); + break; + case FUGLDisplayViewOrientationLandscapeLeft: + greenScreen.center = CGPointMake(greenScreen.center.x - dy, greenScreen.center.y + dx); + break; + } + [pan setTranslation:CGPointZero inView:view.superview]; + } +} + +- (void)pinchAction:(UIPinchGestureRecognizer *)pinch { + if (pinch.state == UIGestureRecognizerStateBegan || pinch.state == UIGestureRecognizerStateChanged) { + if (![FURenderKit shareRenderKit].greenScreen) { + return; + } + [FURenderKit shareRenderKit].greenScreen.scale *= pinch.scale; + pinch.scale = 1; + } +} + +#pragma mark - Private methods + +- (void)showEffectView:(UIView *)view animated:(BOOL)animated { + view.hidden = NO; + if (animated) { + [UIView animateWithDuration:0.2 animations:^{ + view.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(view.frame)); + } completion:^(BOOL finished) { + }]; + } else { + view.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(view.frame)); + } + if (self.delegate && [self.delegate respondsToSelector:@selector(greenScreenComponentViewHeightDidChange:)]) { + [self.delegate greenScreenComponentViewHeightDidChange:CGRectGetHeight(view.frame) + CGRectGetHeight(self.segmentBar.frame)]; + } +} + +- (void)hideEffectView:(UIView *)view animated:(BOOL)animated { + if (animated) { + [UIView animateWithDuration:0.2 animations:^{ + view.transform = CGAffineTransformIdentity; + } completion:^(BOOL finished) { + view.hidden = YES; + }]; + } else { + view.transform = CGAffineTransformIdentity; + view.hidden = YES; + } +} + +- (UIView *)showingView { + UIView *view; + if (self.selectedIndex == FUGreenScreenCategoryKeying) { + view = self.isShowingSafeAreaSelection ? self.safeAreaView : self.keyingView; + } else { + view = self.backgroundView; + } + return view; +} + +#pragma mark - FUSegmentBarDelegate + +- (void)segmentBar:(FUSegmentBar *)segmentBar didSelectItemAtIndex:(NSUInteger)index { + if (index == self.selectedIndex) { + // 隐藏当前显示视图 + [self hideEffectView:[self showingView] animated:YES]; + segmentBar.selectedIndex = -1; + self.selectedIndex = FUGreenScreenCategoryNone; + if (self.delegate && [self.delegate respondsToSelector:@selector(greenScreenComponentViewHeightDidChange:)]) { + [self.delegate greenScreenComponentViewHeightDidChange:CGRectGetHeight(self.segmentBar.frame)]; + } + } else { + if (self.selectedIndex != FUGreenScreenCategoryNone) { + // 先隐藏当前显示视图 + [self hideEffectView:[self showingView] animated:NO]; + } + self.selectedIndex = index; + // 再显示需要的视图 + [self showEffectView:[self showingView] animated:YES]; + } +} + +#pragma mark - FUGreenScreenKeyingViewDelegate + +- (void)keyingViewRequiresPickColor:(BOOL)required { + if (required) { + if (!self.colorPicker.superview) { + if (!self.displayView && ![FURenderKit shareRenderKit].glDisplayView) { + NSLog(@"FUGreenScreenComponent: Set displayView first!"); + return; + } + if (!self.displayView) { + self.displayView = [FURenderKit shareRenderKit].glDisplayView; + } + [self.displayView addSubview:self.colorPicker]; + } + self.colorPicker.frame = CGRectMake(100, 100, 36, 60); + UIColor *color = self.keyingViewModel.keyColorArray[0]; + [self.colorPicker refreshPickerColor:color]; + [self.keyingView refreshPickerColor:color]; + // 显示取色器 + self.colorPicker.hidden = NO; + // 取色的时候取消手势 + self.panGesture.enabled = NO; + self.pinchGesture.enabled = NO; + if (![FURenderKit shareRenderKit].greenScreen) { + // 暂停抠像 + [FURenderKit shareRenderKit].greenScreen.cutouting = YES; + } + } else { + // 隐藏取色器 + self.colorPicker.hidden = YES; + self.panGesture.enabled = YES; + self.pinchGesture.enabled = YES; + if ([FURenderKit shareRenderKit].greenScreen) { + [FURenderKit shareRenderKit].greenScreen.cutouting = NO; + } + } +} + +- (void)keyingViewDidSelectSafeArea { + [self hideEffectView:self.keyingView animated:NO]; + self.isShowingSafeAreaSelection = YES; + [self showEffectView:self.safeAreaView animated:YES]; +} + +- (void)keyingViewDidRecoverToDefault { + self.colorPicker.hidden = YES; + [self.safeAreaView refreshSafeAreas]; +} + +#pragma mark - FUGreenScreenSafeAreaViewDelegate + +- (void)safeAreaCollectionViewDidClickBack { + self.isShowingSafeAreaSelection = NO; + [self.keyingView refreshKeyingCollectionView]; + [self hideEffectView:self.safeAreaView animated:NO]; + [self showEffectView:self.keyingView animated:YES]; +} + +- (void)safeAreaCollectionViewDidClickCancel { + [self.keyingView refreshRecoverButtonState]; +} + +- (void)safeAreaCollectionViewDidClickAdd { + if (self.delegate && [self.delegate respondsToSelector:@selector(greenScreenComponentDidCustomizeSafeArea)]) { + [self.delegate greenScreenComponentDidCustomizeSafeArea]; + } +} + +- (void)safeAreaCollectionViewDidSelectItemAtIndex:(NSInteger)index { + [self.keyingView refreshRecoverButtonState]; +} + +#pragma mark - FUGreenScreenColorPickerDelegate + +- (void)colorPickerDidChangePoint:(CGPoint)point { + UIColor *color = [self.displayView colorInPoint:point]; + // 取色过程中只刷新视图颜色,不设置关键颜色给绿幕 + [self.colorPicker refreshPickerColor:color]; + [self.keyingView refreshPickerColor:color]; +} + +- (void)colorPickerDidEndPickingAtPoint:(CGPoint)point { + // 隐藏取色器 + self.colorPicker.hidden = YES; + // 取完色后恢复手势 + self.panGesture.enabled = YES; + self.pinchGesture.enabled = YES; + // 获取锚点颜色 + UIColor *color = [self.displayView colorInPoint:point]; + // 刷新视图颜色 + [self.colorPicker refreshPickerColor:color]; + [self.keyingView refreshPickerColor:color]; + // 取色结束设置关键颜色给绿幕 + [self.keyingViewModel setCurrentKeyColor:color]; +} + +#pragma mark - Gesture recognizer delegate + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { + if ([touch.view isDescendantOfView:self.segmentBar] || [touch.view isDescendantOfView:self.keyingView] || [touch.view isDescendantOfView:self.backgroundView] || [touch.view isDescendantOfView:self.safeAreaView]) { + return NO; + } + return YES; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { + return YES; +} + +#pragma mark - Getters + +- (FUSegmentBar *)segmentBar { + if (!_segmentBar) { + _segmentBar = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.targetView.bounds) - FUGreenScreenHeightIncludeBottomSafeArea(49.f), CGRectGetWidth(self.targetView.bounds), FUGreenScreenHeightIncludeBottomSafeArea(49.f)) titles:@[FUGreenScreenStringWithKey(@"抠像"), FUGreenScreenStringWithKey(@"背景")] configuration:[FUSegmentBarConfigurations new]]; + _segmentBar.delegate = self; + _segmentBar.selectedIndex = FUGreenScreenCategoryKeying; + } + return _segmentBar; +} + +- (FUGreenScreenKeyingView *)keyingView { + if (!_keyingView) { + _keyingView = [[FUGreenScreenKeyingView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.segmentBar.frame), CGRectGetWidth(self.targetView.bounds), FUGreenScreenFunctionViewOverallHeight) viewModel:self.keyingViewModel]; + _keyingView.delegate = self; + } + return _keyingView; +} + +- (FUGreenScreenSafeAreaView *)safeAreaView { + if (!_safeAreaView) { + _safeAreaView = [[FUGreenScreenSafeAreaView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.segmentBar.frame), CGRectGetWidth(self.targetView.bounds), FUGreenScreenFunctionViewHeight) viewModel:self.keyingViewModel.safeAreaViewModel]; + _safeAreaView.hidden = YES; + _safeAreaView.delegate = self; + } + return _safeAreaView; +} + +- (FUGreenScreenBackgroundView *)backgroundView { + if (!_backgroundView) { + _backgroundView = [[FUGreenScreenBackgroundView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.segmentBar.frame), CGRectGetWidth(self.targetView.bounds), FUFUGreenScreenBackgroundViewHeight) viewModel:self.backgroundViewModel]; + _backgroundView.hidden = YES; + } + return _backgroundView; +} + +- (FUGreenScreenColorPicker *)colorPicker { + if (!_colorPicker) { + _colorPicker = [[FUGreenScreenColorPicker alloc] initWithFrame:CGRectMake(100, 100, 36, 60)]; + _colorPicker.delegate = self; + _colorPicker.hidden = YES; + } + return _colorPicker; +} + +- (FUGreenScreenKeyingViewModel *)keyingViewModel { + if (!_keyingViewModel) { + _keyingViewModel = [[FUGreenScreenKeyingViewModel alloc] init]; + } + return _keyingViewModel; +} + +- (FUGreenScreenBackgroundViewModel *)backgroundViewModel { + if (!_backgroundViewModel) { + _backgroundViewModel = [[FUGreenScreenBackgroundViewModel alloc] init]; + } + return _backgroundViewModel; +} + +- (CGFloat)componentViewHeight { + CGFloat height = FUGreenScreenHeightIncludeBottomSafeArea(FUGreenScreenCategoryViewHeight); + switch (self.selectedIndex) { + case FUGreenScreenCategoryKeying:{ + if (self.isShowingSafeAreaSelection) { + height += FUGreenScreenFunctionViewHeight; + } else { + height += FUGreenScreenFunctionViewOverallHeight; + } + } + break; + case FUGreenScreenCategoryBackground: + height += FUFUGreenScreenBackgroundViewHeight; + default: + break; + } + return height; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenDefine.h b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenDefine.h new file mode 100644 index 00000000..5fb4f0d0 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenDefine.h @@ -0,0 +1,73 @@ +// +// FUGreenScreenDefine.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/11. +// + +#import +#import + +#ifndef FUGreenScreenDefine_h +#define FUGreenScreenDefine_h + +#pragma mark - Const + +extern const CGFloat FUGreenScreenCategoryViewHeight; + +extern const CGFloat FUGreenScreenFunctionViewHeight; + +extern const CGFloat FUGreenScreenFunctionViewOverallHeight; + +extern const CGFloat FUFUGreenScreenBackgroundViewHeight; + +#pragma mark - Enum + +typedef NS_ENUM(NSInteger, FUGreenScreenCategory) { + FUGreenScreenCategoryNone = -1, + FUGreenScreenCategoryKeying = 0, //抠像 + FUGreenScreenCategoryBackground = 1 //背景 +}; + +typedef NS_ENUM(NSUInteger, FUGreenScreenKeyingType) { + FUGreenScreenKeyingTypeColor, //关键颜色 + FUGreenScreenKeyingTypeChromaThres, //相似度 + FUGreenScreenKeyingTypeChromaThrest, //平滑度 + FUGreenScreenKeyingTypeAlphaL, //祛色度 + FUGreenScreenKeyingTypeSafeArea //安全区域 +}; + +#pragma mark - Inline methods + +static inline CGFloat FUGreenScreenHeightIncludeBottomSafeArea(CGFloat height) { + if (@available(iOS 11.0, *)) { + height += [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom; + } + return height; +} + +static inline UIImage * FUGreenScreenImageNamed(NSString *name) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"FUGreenScreenComponent" ofType:@"framework" inDirectory:@"Frameworks"]; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + return [UIImage imageNamed:name inBundle:bundle compatibleWithTraitCollection:nil];; +} + +static inline NSString * FUGreenScreenStringWithKey(NSString *key) { + NSString *framePath = [[NSBundle mainBundle] pathForResource:@"FUGreenScreenComponent" ofType:@"framework" inDirectory:@"Frameworks"]; + NSBundle *frameBundle = [NSBundle bundleWithPath:framePath]; + NSArray *languages = [NSLocale preferredLanguages]; + NSString *currentLanguage = languages.firstObject; + if ([currentLanguage hasPrefix:@"zh-Hans"]) { + currentLanguage =@"zh-Hans"; + } else { + currentLanguage = @"en"; + } + NSString *path = [frameBundle pathForResource:currentLanguage ofType:@"lproj"]; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + NSString *value = [bundle localizedStringForKey:key value:nil table:@"FUGreenScreenComponent"]; + return value; +} + +#endif /* FUGreenScreenDefine_h */ + + diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenDefine.m b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenDefine.m new file mode 100644 index 00000000..b322b3eb --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/FUGreenScreenDefine.m @@ -0,0 +1,16 @@ +// +// FUGreenScreenDefine.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/11. +// + +#import "FUGreenScreenDefine.h" + +const CGFloat FUGreenScreenCategoryViewHeight = 49.f; + +const CGFloat FUGreenScreenFunctionViewHeight = 98.f; + +const CGFloat FUGreenScreenFunctionViewOverallHeight = 146.f; + +const CGFloat FUFUGreenScreenBackgroundViewHeight = 108; diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenBackgroundModel.h b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenBackgroundModel.h new file mode 100644 index 00000000..b086be95 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenBackgroundModel.h @@ -0,0 +1,23 @@ +// +// FUGreenScreenBackgroundModel.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenBackgroundModel : NSObject + +/// 背景名称 +@property (nonatomic, copy) NSString *name; +/// icon +@property (nonatomic, copy) NSString *icon; +/// 视频文件名 +@property (nonatomic, copy) NSString *videoName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenBackgroundModel.m b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenBackgroundModel.m new file mode 100644 index 00000000..f9ee0330 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenBackgroundModel.m @@ -0,0 +1,12 @@ +// +// FUGreenScreenBackgroundModel.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenBackgroundModel.h" + +@implementation FUGreenScreenBackgroundModel + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenKeyingModel.h b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenKeyingModel.h new file mode 100644 index 00000000..ca346337 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenKeyingModel.h @@ -0,0 +1,28 @@ +// +// FUGreenScreenKeyingModel.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import +#import "FUGreenScreenDefine.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenKeyingModel : NSObject +/// 抠像参数类型 +/// @see FUGreenScreenKeyingType +@property (nonatomic, assign) FUGreenScreenKeyingType type; +/// 抠像参数名 +@property (nonatomic, copy) NSString *name; +/// icon +@property (nonatomic, copy) NSString *icon; +/// 当前值 +@property (nonatomic, assign) double currentValue; +/// 默认值 +@property (nonatomic, assign) double defaultValue; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenKeyingModel.m b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenKeyingModel.m new file mode 100644 index 00000000..922ca637 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenKeyingModel.m @@ -0,0 +1,12 @@ +// +// FUGreenScreenKeyingModel.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenKeyingModel.h" + +@implementation FUGreenScreenKeyingModel + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenSafeAreaModel.h b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenSafeAreaModel.h new file mode 100644 index 00000000..52b67300 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenSafeAreaModel.h @@ -0,0 +1,23 @@ +// +// FUGreenScreenSafeAreaModel.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenSafeAreaModel : NSObject + +/// 是否本地数据 +@property (nonatomic, assign) BOOL isLocal; +/// icon名称 +@property (nonatomic, copy) NSString *iconName; +/// 图片名称 +@property (nonatomic, copy, nullable) NSString *imageName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenSafeAreaModel.m b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenSafeAreaModel.m new file mode 100644 index 00000000..495cf84f --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Model/FUGreenScreenSafeAreaModel.m @@ -0,0 +1,12 @@ +// +// FUGreenScreenSafeAreaModel.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenSafeAreaModel.h" + +@implementation FUGreenScreenSafeAreaModel + +@end diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/Contents.json diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/Contents.json new file mode 100644 index 00000000..6cedb5a0 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "aiming_point.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "aiming_point@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "aiming_point@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/aiming_point.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/aiming_point.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/aiming_point.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/aiming_point.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/aiming_point@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/aiming_point@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/aiming_point@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/aiming_point@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/aiming_point@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/aiming_point@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/aiming_point@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/aiming_point.imageset/aiming_point@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/Contents.json new file mode 100644 index 00000000..f04f8e7f --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_bg_beach.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_bg_beach@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_bg_beach@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/demo_bg_beach.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/demo_bg_beach.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/demo_bg_beach.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/demo_bg_beach.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/demo_bg_beach@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/demo_bg_beach@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/demo_bg_beach@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/demo_bg_beach@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/demo_bg_beach@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/demo_bg_beach@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/demo_bg_beach@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_beach.imageset/demo_bg_beach@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/Contents.json new file mode 100644 index 00000000..ebab506c --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_bg_classroom.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_bg_classroom@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_bg_classroom@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/demo_bg_classroom.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/demo_bg_classroom.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/demo_bg_classroom.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/demo_bg_classroom.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/demo_bg_classroom@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/demo_bg_classroom@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/demo_bg_classroom@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/demo_bg_classroom@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/demo_bg_classroom@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/demo_bg_classroom@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/demo_bg_classroom@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_classroom.imageset/demo_bg_classroom@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/Contents.json new file mode 100644 index 00000000..611f88d4 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_bg_forest.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_bg_forest@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_bg_forest@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/demo_bg_forest.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/demo_bg_forest.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/demo_bg_forest.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/demo_bg_forest.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/demo_bg_forest@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/demo_bg_forest@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/demo_bg_forest@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/demo_bg_forest@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/demo_bg_forest@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/demo_bg_forest@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/demo_bg_forest@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_forest.imageset/demo_bg_forest@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/Contents.json new file mode 100644 index 00000000..2c062a45 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_bg_ink painting.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_bg_ink painting@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_bg_ink painting@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/demo_bg_ink painting.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/demo_bg_ink painting.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/demo_bg_ink painting.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/demo_bg_ink painting.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/demo_bg_ink painting@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/demo_bg_ink painting@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/demo_bg_ink painting@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/demo_bg_ink painting@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/demo_bg_ink painting@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/demo_bg_ink painting@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/demo_bg_ink painting@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_ink.imageset/demo_bg_ink painting@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/Contents.json new file mode 100644 index 00000000..524dafdd --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_bg_science.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_bg_science@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_bg_science@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/demo_bg_science.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/demo_bg_science.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/demo_bg_science.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/demo_bg_science.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/demo_bg_science@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/demo_bg_science@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/demo_bg_science@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/demo_bg_science@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/demo_bg_science@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/demo_bg_science@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/demo_bg_science@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_science.imageset/demo_bg_science@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/Contents.json new file mode 100644 index 00000000..66c863ab --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_bg_transparent.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_bg_transparent@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_bg_transparent@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/demo_bg_transparent.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/demo_bg_transparent.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/demo_bg_transparent.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/demo_bg_transparent.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/demo_bg_transparent@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/demo_bg_transparent@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/demo_bg_transparent@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/demo_bg_transparent@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/demo_bg_transparent@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/demo_bg_transparent@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/demo_bg_transparent@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_bg_transparent.imageset/demo_bg_transparent@3x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/demo_icon_add.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/demo_icon_add.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/demo_icon_add.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/demo_icon_add.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/demo_icon_add@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/demo_icon_add@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/demo_icon_add@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/demo_icon_add@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/demo_icon_add@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/demo_icon_add@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_add.imageset/demo_icon_add@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_add.imageset/demo_icon_add@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/Contents.json new file mode 100644 index 00000000..827d8611 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_cancel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_cancel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_cancel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/demo_icon_cancel.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/demo_icon_cancel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/demo_icon_cancel.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/demo_icon_cancel.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/demo_icon_cancel@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/demo_icon_cancel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/demo_icon_cancel@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/demo_icon_cancel@2x.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/demo_icon_cancel@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/demo_icon_cancel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/demo_icon_cancel@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_cancel.imageset/demo_icon_cancel@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/Contents.json new file mode 100644 index 00000000..082823df --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_key_color_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_key_color_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_key_color_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_nor.imageset/demo_icon_key_color_nor@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/Contents.json new file mode 100644 index 00000000..706d0b1c --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_key_color_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_key_color_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_key_color_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_key_color_sel.imageset/demo_icon_key_color_sel@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/Contents.json new file mode 100644 index 00000000..0a642d9b --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "恢复-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "恢复-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "恢复-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0.png" "b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0.png" new file mode 100644 index 00000000..735a75ea Binary files /dev/null and "b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0.png" differ diff --git "a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0@2x.png" "b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0@2x.png" new file mode 100644 index 00000000..741e6be4 Binary files /dev/null and "b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0@2x.png" differ diff --git "a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0@3x.png" "b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0@3x.png" new file mode 100644 index 00000000..5c176cd4 Binary files /dev/null and "b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_recover.imageset/\346\201\242\345\244\215-0@3x.png" differ diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/demo_icon_returns.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/demo_icon_returns.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/demo_icon_returns.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/demo_icon_returns.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/demo_icon_returns@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/demo_icon_returns@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/demo_icon_returns@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/demo_icon_returns@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/demo_icon_returns@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/demo_icon_returns@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_returns.imageset/demo_icon_returns@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_returns.imageset/demo_icon_returns@3x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_1.imageset/demo_icon_safe_area_1@3x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_2.imageset/demo_icon_safe_area_2@3x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor.imageset/demo_icon_safe_area_nor@3x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/Contents.json rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_safe_area_nor_open.imageset/demo_icon_safe_area_nor_open@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/Contents.json new file mode 100644 index 00000000..6fabc384 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_similarityr_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_similarityr_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_similarityr_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor.imageset/demo_icon_similarityr_nor@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/Contents.json new file mode 100644 index 00000000..bdcea76b --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_similarityr_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_similarityr_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_similarityr_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_nor_open.imageset/demo_icon_similarityr_nor_open@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/Contents.json new file mode 100644 index 00000000..2b5c25db --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_similarityr_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_similarityr_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_similarityr_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel.imageset/demo_icon_similarityr_sel@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/Contents.json new file mode 100644 index 00000000..76ef1ad2 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_similarityr_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_similarityr_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_similarityr_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_similarityr_sel_open.imageset/demo_icon_similarityr_sel_open@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/Contents.json new file mode 100644 index 00000000..09392f4e --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smooth_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smooth_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smooth_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor.imageset/demo_icon_smooth_nor@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/Contents.json new file mode 100644 index 00000000..189aac65 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smooth_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smooth_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smooth_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_nor_open.imageset/demo_icon_smooth_nor_open@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/Contents.json new file mode 100644 index 00000000..4dc20230 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smooth_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smooth_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smooth_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel.imageset/demo_icon_smooth_sel@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/Contents.json new file mode 100644 index 00000000..b14ace50 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_smooth_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_smooth_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_smooth_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_smooth_sel_open.imageset/demo_icon_smooth_sel_open@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/Contents.json new file mode 100644 index 00000000..e525dd5b --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_straw .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_straw @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_straw @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/demo_icon_straw .png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/demo_icon_straw .png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/demo_icon_straw .png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/demo_icon_straw .png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/demo_icon_straw @2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/demo_icon_straw @2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/demo_icon_straw @2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/demo_icon_straw @2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/demo_icon_straw @3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/demo_icon_straw @3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/demo_icon_straw @3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_straw.imageset/demo_icon_straw @3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/Contents.json new file mode 100644 index 00000000..25ca896a --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_transparency_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_transparency_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_transparency_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor.imageset/demo_icon_transparency_nor@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/Contents.json new file mode 100644 index 00000000..f5e53205 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_transparency_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_transparency_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_transparency_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_nor_open.imageset/demo_icon_transparency_nor_open@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/Contents.json new file mode 100644 index 00000000..0842c567 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_transparency_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_transparency_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_transparency_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel.imageset/demo_icon_transparency_sel@3x.png diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/Contents.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/Contents.json new file mode 100644 index 00000000..b006963c --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_transparency_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_transparency_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_transparency_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@2x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@2x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@3x.png b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@3x.png rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/FUGreenScreen.xcassets/demo_icon_transparency_sel_open.imageset/demo_icon_transparency_sel_open@3x.png diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/beach.mp4" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/beach.mp4 similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/beach.mp4" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/beach.mp4 diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/classroom.mp4" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/classroom.mp4 similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/classroom.mp4" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/classroom.mp4 diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/en.lproj/FUGreenScreenComponent.strings b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/en.lproj/FUGreenScreenComponent.strings new file mode 100644 index 00000000..f4f4da43 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/en.lproj/FUGreenScreenComponent.strings @@ -0,0 +1,29 @@ +/* + FUGreenScreenComponent.strings + FUGreenScreenComponent + + Created by 项林平 on 2022/8/11. + +*/ + +"抠像" = "Keying"; +"背景" = "Background segmentation"; + +"关键颜色" = "Key Color"; +"相似度" = "Similarity"; +"平滑" = "Smoothness"; +"祛色度" = "Transparency"; +"安全区域" = "Safe area"; +"白色区域为安全区域,不参与绿幕抠像" = "The white area is a safe area and does not participate in the green screen keying"; + +"科技" = "Technology"; +"沙滩" = "Sand"; +"教室" = "Classroom"; +"水墨画" = "Ink"; +"森林" = "Forest"; + +"是否将所有参数恢复到默认值" = "Reset all parameters to default?"; +"恢复" = "Recover"; +"取消" = "Cancel"; +"确定" = "Definite"; + diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/green_screen_background.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/green_screen_background.json new file mode 100644 index 00000000..55dc0567 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/green_screen_background.json @@ -0,0 +1,31 @@ +[ + { + "name":"取消", + "icon":"demo_icon_cancel", + }, + { + "name":"科技", + "icon":"demo_bg_science", + "videoName":"science" + }, + { + "name":"沙滩", + "icon":"demo_bg_beach", + "videoName":"beach" + }, + { + "name":"教室", + "icon":"demo_bg_classroom", + "videoName":"classroom" + }, + { + "name":"水墨画", + "icon":"demo_bg_ink", + "videoName":"inkPainting" + }, + { + "name":"森林", + "icon":"demo_bg_forest", + "videoName":"springForest" + } +] diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/green_screen_keying.json b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/green_screen_keying.json new file mode 100644 index 00000000..a1c192de --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/green_screen_keying.json @@ -0,0 +1,37 @@ +[ + { + "name":"关键颜色", + "icon":"demo_icon_key_color", + "type":0, + "currentValue":0.0, + "defaultValue":0.0 + }, + { + "name":"相似度", + "icon":"demo_icon_similarityr", + "type":1, + "currentValue":0.5, + "defaultValue":0.5 + }, + { + "name":"平滑", + "icon":"demo_icon_smooth", + "type":2, + "currentValue":0.3, + "defaultValue":0.3 + }, + { + "name":"祛色度", + "icon":"demo_icon_transparency", + "type":3, + "currentValue":0.67, + "defaultValue":0.67 + }, + { + "name":"安全区域", + "icon":"demo_icon_safe_area", + "type":4, + "currentValue":0.0, + "defaultValue":0.0 + } +] diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/inkPainting.mp4" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/inkPainting.mp4 similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/inkPainting.mp4" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/inkPainting.mp4 diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/safe_area_1.jpg" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/safe_area_1.jpg similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/safe_area_1.jpg" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/safe_area_1.jpg diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/safe_area_2.jpg" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/safe_area_2.jpg similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/safe_area_2.jpg" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/safe_area_2.jpg diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/science.mp4" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/science.mp4 similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/science.mp4" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/science.mp4 diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/springForest.mp4" b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/springForest.mp4 similarity index 100% rename from "FULiveDemo/Resource/items/\347\273\277\345\271\225/springForest.mp4" rename to FUGreenScreenComponent/FUGreenScreenComponent/Resource/springForest.mp4 diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/Resource/zh-Hans.lproj/FUGreenScreenComponent.strings b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/zh-Hans.lproj/FUGreenScreenComponent.strings new file mode 100644 index 00000000..b56badde --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/Resource/zh-Hans.lproj/FUGreenScreenComponent.strings @@ -0,0 +1,29 @@ +/* + FUGreenScreenComponent.strings + FUGreenScreenComponent + + Created by 项林平 on 2022/8/11. + +*/ + +"抠像" = "抠像"; +"背景" = "背景"; + +"关键颜色" = "关键颜色"; +"相似度" = "相似度"; +"平滑" = "平滑"; +"祛色度" = "祛色度"; +"安全区域" = "安全区域"; +"白色区域为安全区域,不参与绿幕抠像" = "白色区域为安全区域,不参与绿幕抠像"; + +"科技" = "科技"; +"沙滩" = "沙滩"; +"教室" = "教室"; +"水墨画" = "水墨画"; +"森林" = "森林"; + +"是否将所有参数恢复到默认值" = "是否将所有参数恢复到默认值?"; +"恢复" = "恢复"; +"取消" = "取消"; +"确定" = "确定"; + diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenBackgroundView.h b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenBackgroundView.h new file mode 100644 index 00000000..8d8e19e5 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenBackgroundView.h @@ -0,0 +1,27 @@ +// +// FUGreenScreenBackgroundView.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +#import "FUGreenScreenBackgroundViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenBackgroundView : UIView + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUGreenScreenBackgroundViewModel *)viewModel; + +@end + +@interface FUGreenScreenBackgroundCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenBackgroundView.m b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenBackgroundView.m new file mode 100644 index 00000000..d8c94272 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenBackgroundView.m @@ -0,0 +1,128 @@ +// +// FUGreenScreenBackgroundView.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenBackgroundView.h" +#import "FUGreenScreenDefine.h" + +@interface FUGreenScreenBackgroundView () + +@property (nonatomic, strong) UICollectionView *collectionView; + +@property (nonatomic, strong) FUGreenScreenBackgroundViewModel *viewModel; + +@end + +static NSString * const kFUGreenScreenBackgroundCellIdentifier = @"FUGreenScreenBackgroundCell"; + +@implementation FUGreenScreenBackgroundView + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUGreenScreenBackgroundViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + [self addSubview:self.collectionView]; + + // 默认选中 + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + } + return self; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.backgroundArray.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUGreenScreenBackgroundCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUGreenScreenBackgroundCellIdentifier forIndexPath:indexPath]; + cell.imageView.image = [self.viewModel backgroundIconAtIndex:indexPath.item]; + cell.textLabel.text = [self.viewModel backgroundNameAtIndex:indexPath.item]; + cell.selected = self.viewModel.selectedIndex == indexPath.item; + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + self.viewModel.selectedIndex = indexPath.item; +} + +#pragma mark - Getters + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(54, 70); + layout.minimumLineSpacing = 16; + layout.minimumInteritemSpacing = 50; + layout.sectionInset = UIEdgeInsetsMake(16, 18, 10, 18); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)) collectionViewLayout:layout]; + _collectionView.translatesAutoresizingMaskIntoConstraints = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.showsHorizontalScrollIndicator = NO; + _collectionView.dataSource = self; + _collectionView.delegate = self; + [_collectionView registerClass:[FUGreenScreenBackgroundCell class] forCellWithReuseIdentifier:kFUGreenScreenBackgroundCellIdentifier]; + } + return _collectionView; +} + + +@end + +@interface FUGreenScreenBackgroundCell () + +@property (nonatomic, strong) UIImageView *imageView; +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUGreenScreenBackgroundCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + [self.contentView addSubview:self.textLabel]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.imageView.layer.borderWidth = selected ? 2 : 0; + self.imageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1].CGColor : [UIColor clearColor].CGColor; + self.textLabel.textColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1] : [UIColor whiteColor]; +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 54, 54)]; + _imageView.layer.masksToBounds = YES; + _imageView.layer.cornerRadius = 3.f; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 54, 54, 16)]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textAlignment = NSTextAlignmentCenter; + } + return _textLabel; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenColorPicker.h b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenColorPicker.h new file mode 100644 index 00000000..80eecfc4 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenColorPicker.h @@ -0,0 +1,31 @@ +// +// FUGreenScreenColorPicker.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUGreenScreenColorPickerDelegate + +- (void)colorPickerDidChangePoint:(CGPoint)point; + +@optional +/// 取色结束 +/// @param point 结束时的取点 +- (void)colorPickerDidEndPickingAtPoint:(CGPoint)point; + +@end + +@interface FUGreenScreenColorPicker : UIView + +@property (nonatomic, weak) id delegate; + +- (void)refreshPickerColor:(UIColor *)color; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenColorPicker.m b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenColorPicker.m new file mode 100644 index 00000000..49b4b824 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenColorPicker.m @@ -0,0 +1,107 @@ +// +// FUGreenScreenColorPicker.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenColorPicker.h" +#import "FUGreenScreenDefine.h" + +@interface FUGreenScreenColorPicker () + +@property (nonatomic, strong) UIView *preview; +@property (nonatomic, strong) UIImageView *anchorImageView; + +@end + +@implementation FUGreenScreenColorPicker { + // 拖动次数 + NSInteger panCount; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + // 固定图片 + UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.preview.frame]; + imageView.image = FUGreenScreenImageNamed(@"demo_bg_transparent"); + [self addSubview:imageView]; + + // 预览颜色视图 + [self addSubview:self.preview]; + + // 取色锚点 + [self addSubview:self.anchorImageView]; + + // 拖动手势 + UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)]; + [self addGestureRecognizer:pan]; + } + return self; +} + +- (void)refreshPickerColor:(UIColor *)color { + self.preview.backgroundColor = color; +} + +- (void)panAction:(UIPanGestureRecognizer *)pan { + UIView *superView = pan.view.superview; + // 在父视图中的偏移量 + CGPoint translationPoint = [pan translationInView:superView]; + // 拖动后的中心点 + CGPoint center = CGPointMake(pan.view.center.x + translationPoint.x, pan.view.center.y + translationPoint.y); + // 锚点相对于父视图的位置 + CGPoint anchorCenter = [self convertPoint:self.anchorImageView.center toView:superView]; + if (pan.state == UIGestureRecognizerStateBegan) { + // 为了方便,拖动开始默认往上移动40 + CGRect rect = self.frame; + rect.origin.y -= 40; + self.frame = rect; + } else if (pan.state == UIGestureRecognizerStateEnded) { + if (self.delegate && [self.delegate respondsToSelector:@selector(colorPickerDidEndPickingAtPoint:)]) { + [self.delegate colorPickerDidEndPickingAtPoint:anchorCenter]; + } + } else { + if (!CGRectContainsPoint(superView.bounds, center)) { + // 拖动到父视图外忽略 + return; + } + // 更新视图位置 + [pan setTranslation:CGPointZero inView:superView]; + pan.view.center = center; + panCount += 1; + if (panCount % 4 == 0) { + // 减少触发频率 + if (self.delegate && [self.delegate respondsToSelector:@selector(colorPickerDidChangePoint:)]) { + [self.delegate colorPickerDidChangePoint:anchorCenter]; + } + } + } +} + +- (UIView *)preview { + if (!_preview) { + _preview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)]; + _preview.layer.masksToBounds = YES; + _preview.layer.cornerRadius = 18.f; + _preview.layer.borderWidth = 2; + _preview.layer.borderColor = [UIColor whiteColor].CGColor; + _preview.layer.backgroundColor = [UIColor clearColor].CGColor; + _preview.layer.shadowColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.2].CGColor; + _preview.layer.shadowOffset = CGSizeMake(0,0); + _preview.layer.shadowOpacity = 1; + _preview.layer.shadowRadius = 3; + } + return _preview; +} + +- (UIImageView *)anchorImageView { + if (!_anchorImageView) { + _anchorImageView = [[UIImageView alloc] initWithFrame:CGRectMake(8, CGRectGetHeight(self.frame) - 20, 20, 20)]; + _anchorImageView.image = FUGreenScreenImageNamed(@"aiming_point"); + } + return _anchorImageView; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenKeyingView.h b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenKeyingView.h new file mode 100644 index 00000000..ba9e91bd --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenKeyingView.h @@ -0,0 +1,66 @@ +// +// FUGreenScreenKeyingView.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +#import "FUGreenScreenKeyingViewModel.h" + +@class FUGreenScreenKeyingView; + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUGreenScreenKeyingViewDelegate + +/// 安全区域 +- (void)keyingViewDidSelectSafeArea; +/// 是否需要锚点取色 +- (void)keyingViewRequiresPickColor:(BOOL)required; +/// 所有抠像功能恢复到默认值 +- (void)keyingViewDidRecoverToDefault; + +@end + +@interface FUGreenScreenKeyingView : UIView + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUGreenScreenKeyingViewModel *)viewModel; + +/// 刷新视图颜色 +- (void)refreshPickerColor:(UIColor *)color; +/// 刷新恢复按钮状态 +- (void)refreshRecoverButtonState; + +- (void)refreshKeyingCollectionView; + +@end + +@interface FUGreenScreenKeyingCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@property (nonatomic, assign) double currentValue; + +@property (nonatomic, assign) double defaultValue; + +@property (nonatomic, copy) NSString *imageName; + +@end + +@interface FUGreenScreenColorCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *backgroundImageView; + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@property (nonatomic, strong, nullable) UIImage *pickerColorImage; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenKeyingView.m b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenKeyingView.m new file mode 100644 index 00000000..663a7a5a --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenKeyingView.m @@ -0,0 +1,432 @@ +// +// FUGreenScreenKeyingView.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenKeyingView.h" +#import "FUGreenScreenDefine.h" + +#import + +@interface FUGreenScreenKeyingView () + +/// 关键颜色选择列表 +@property (nonatomic, strong) UICollectionView *colorCollectionView; +/// 抠像功能列表 +@property (nonatomic, strong) UICollectionView *keyingCollectionView; +/// 抠像功能程度调节 +@property (nonatomic, strong) FUSlider *slider; +/// 恢复默认按钮 +@property (nonatomic, strong) FUSquareButton *recoverButton; + +@property (nonatomic, strong) FUGreenScreenKeyingViewModel *viewModel; + +@end + +static NSString * const kFUGreenScreenKeyingCellIdentifier = @"FUGreenScreenKeyingCell"; +static NSString * const kFUGreenScreenColorCellIdentifier = @"FUGreenScreenColorCell"; + +@implementation FUGreenScreenKeyingView + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUGreenScreenKeyingViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.slider]; + [self addSubview:self.recoverButton]; + NSLayoutConstraint *recoverLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:17]; + NSLayoutConstraint *recoverBottomConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:-6]; + NSLayoutConstraint *recoverWidthConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:44]; + NSLayoutConstraint *recoverHeightConstraint = [NSLayoutConstraint constraintWithItem:self.recoverButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:74]; + + [self addConstraints:@[recoverLeadingConstraint, recoverBottomConstraint]]; + [self.recoverButton addConstraints:@[recoverWidthConstraint, recoverHeightConstraint]]; + + // 分割线 + UIView *verticalLine = [[UIView alloc] init]; + verticalLine.backgroundColor = [UIColor colorWithRed:229/255.f green:229/255.f blue:229/255.f alpha:0.2]; + verticalLine.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:verticalLine]; + NSLayoutConstraint *lineLeadingConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.recoverButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:14]; + NSLayoutConstraint *lineCenterYConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.recoverButton attribute:NSLayoutAttributeCenterY multiplier:1 constant:-15]; + NSLayoutConstraint *lineWidthConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:1]; + NSLayoutConstraint *lineHeightConstraint = [NSLayoutConstraint constraintWithItem:verticalLine attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:24]; + [self addConstraints:@[lineLeadingConstraint, lineCenterYConstraint]]; + [verticalLine addConstraints:@[lineWidthConstraint, lineHeightConstraint]]; + + [self addSubview:self.keyingCollectionView]; + NSLayoutConstraint *collectionLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.keyingCollectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:76]; + NSLayoutConstraint *collectionTrailingConstraint = [NSLayoutConstraint constraintWithItem:self.keyingCollectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *collectionBottomConstraint = [NSLayoutConstraint constraintWithItem:self.keyingCollectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + NSLayoutConstraint *collectionHeightConstraint = [NSLayoutConstraint constraintWithItem:self.keyingCollectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:98]; + [self addConstraints:@[collectionLeadingConstraint, collectionTrailingConstraint, collectionBottomConstraint]]; + [self.keyingCollectionView addConstraint:collectionHeightConstraint]; + + [self addSubview:self.colorCollectionView]; + NSLayoutConstraint *colorCollectionLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.colorCollectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *colorCollectionTrailingConstraint = [NSLayoutConstraint constraintWithItem:self.colorCollectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *colorCollectionBottomConstraint = [NSLayoutConstraint constraintWithItem:self.colorCollectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.keyingCollectionView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *colorCollectionHeightConstraint = [NSLayoutConstraint constraintWithItem:self.colorCollectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:36]; + [self addConstraints:@[colorCollectionLeadingConstraint, colorCollectionTrailingConstraint, colorCollectionBottomConstraint]]; + [self.colorCollectionView addConstraint:colorCollectionHeightConstraint]; + + [self refreshSubviews]; + } + return self; +} + +- (void)refreshSubviews { + dispatch_async(dispatch_get_main_queue(), ^{ + [self refreshRecoverButtonState]; + if (self.viewModel.selectedIndex == FUGreenScreenKeyingTypeColor) { + self.colorCollectionView.hidden = NO; + self.slider.hidden = YES; + } else if (self.viewModel.selectedIndex >= FUGreenScreenKeyingTypeChromaThres && self.viewModel.selectedIndex < FUGreenScreenKeyingTypeSafeArea) { + self.colorCollectionView.hidden = YES; + self.slider.hidden = NO; + self.slider.value = self.viewModel.selectedValue; + } + [self refreshKeyingCollectionView]; + if (self.viewModel.selectedColorIndex >= 0) { + // 关键颜色视图更新 + [self.colorCollectionView reloadData]; + [self.colorCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedColorIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + +- (void)refreshKeyingCollectionView { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.keyingCollectionView reloadData]; + if (self.viewModel.selectedIndex >= FUGreenScreenKeyingTypeColor && self.viewModel.selectedIndex < FUGreenScreenKeyingTypeSafeArea) { + // 抠像视图更新 + [self.keyingCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + +- (void)refreshRecoverButtonState { + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.viewModel.isDefaultValue) { + self.recoverButton.alpha = 0.6; + self.recoverButton.userInteractionEnabled = NO; + } else { + self.recoverButton.alpha = 1; + self.recoverButton.userInteractionEnabled = YES; + } + }); +} + +#pragma mark - Instance methods + +- (void)refreshPickerColor:(UIColor *)color { + FUGreenScreenColorCell *cell = (FUGreenScreenColorCell *)[self.colorCollectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; + cell.imageView.backgroundColor = color; +} + +#pragma mark - Event response + +- (void)recoverAction { + [FUAlertManager showAlertWithTitle:nil message:FUGreenScreenStringWithKey(@"是否将所有参数恢复到默认值") cancel:FUGreenScreenStringWithKey(@"取消") confirm:FUGreenScreenStringWithKey(@"确定") inController:nil confirmHandler:^{ + [self.viewModel recoverToDefault]; + [self refreshSubviews]; + if (self.delegate && [self.delegate respondsToSelector:@selector(keyingViewDidRecoverToDefault)]) { + [self.delegate keyingViewDidRecoverToDefault]; + } + } cancelHandler:nil]; +} + +- (void)sliderValueChanged { + self.viewModel.selectedValue = self.slider.value; +} + +- (void)sliderChangeEnded { + [self refreshSubviews]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + if (collectionView == self.keyingCollectionView) { + return self.viewModel.keyingArray.count; + } else { + return self.viewModel.keyColorArray.count; + } +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.keyingCollectionView) { + FUGreenScreenKeyingCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUGreenScreenKeyingCellIdentifier forIndexPath:indexPath]; + cell.textLabel.text = [self.viewModel keyingNameAtIndex:indexPath.item]; + cell.imageName = [self.viewModel keyingImageNameAtIndex:indexPath.item]; + cell.defaultValue = [self.viewModel keyingDefaultValueAtIndex:indexPath.item]; + cell.currentValue = [self.viewModel keyingCurrentValueAtIndex:indexPath.item]; + cell.selected = indexPath.item == self.viewModel.selectedIndex; + return cell; + } else { + FUGreenScreenColorCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUGreenScreenColorCellIdentifier forIndexPath:indexPath]; + cell.imageView.backgroundColor = self.viewModel.keyColorArray[indexPath.item]; + cell.backgroundImageView.hidden = indexPath.item != 0; + // 处理自定义取色cell未选中时展示取色icon,选中时隐藏取色icon的情况 + cell.pickerColorImage = indexPath.item == 0 ? FUGreenScreenImageNamed(@"demo_icon_straw") : nil; + BOOL cellSelected = indexPath.item == self.viewModel.selectedColorIndex; + if (indexPath.item == 0 && !cellSelected) { + cell.imageView.image = FUGreenScreenImageNamed(@"demo_icon_straw"); + } else { + cell.imageView.image = nil; + } + cell.selected = cellSelected; + return cell; + } +} + +#pragma mark - Collection view delegate + +- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.keyingCollectionView && indexPath.item == FUGreenScreenKeyingTypeSafeArea) { + // 安全区域需要切换视图 + [FUTipHUD showTips:FUGreenScreenStringWithKey(@"白色区域为安全区域,不参与绿幕抠像")]; + if (self.delegate && [self.delegate respondsToSelector:@selector(keyingViewDidSelectSafeArea)]) { + [self.delegate keyingViewDidSelectSafeArea]; + } + return NO; + } + return YES; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.keyingCollectionView) { + if (indexPath.item == self.viewModel.selectedIndex) { + return; + } + self.viewModel.selectedIndex = indexPath.item; + if (self.viewModel.selectedIndex > FUGreenScreenKeyingTypeColor) { + self.colorCollectionView.hidden = YES; + self.slider.hidden = NO; + self.slider.value = self.viewModel.selectedValue; + } else { + self.colorCollectionView.hidden = NO; + self.slider.hidden = YES; + } + } else { + [self.viewModel recoverCustomizedKeyColor]; + self.viewModel.selectedColorIndex = indexPath.item; + if (indexPath.item == 0) { + // 锚点取色 + if (self.delegate && [self.delegate respondsToSelector:@selector(keyingViewRequiresPickColor:)]) { + [self.delegate keyingViewRequiresPickColor:YES]; + } + } else { + // 选择固定颜色 + if (self.delegate && [self.delegate respondsToSelector:@selector(keyingViewRequiresPickColor:)]) { + [self.delegate keyingViewRequiresPickColor:NO]; + } + } + [self refreshSubviews]; + [self refreshRecoverButtonState]; + } +} + +#pragma mark - Getters + +- (UICollectionView *)keyingCollectionView { + if (!_keyingCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(44, 74); + layout.minimumLineSpacing = 22; + layout.minimumInteritemSpacing = 22; + layout.sectionInset = UIEdgeInsetsMake(16, 16, 6, 16); + _keyingCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _keyingCollectionView.translatesAutoresizingMaskIntoConstraints = NO; + _keyingCollectionView.backgroundColor = [UIColor clearColor]; + _keyingCollectionView.showsVerticalScrollIndicator = NO; + _keyingCollectionView.showsHorizontalScrollIndicator = NO; + _keyingCollectionView.dataSource = self; + _keyingCollectionView.delegate = self; + [_keyingCollectionView registerClass:[FUGreenScreenKeyingCell class] forCellWithReuseIdentifier:kFUGreenScreenKeyingCellIdentifier]; + } + return _keyingCollectionView; +} + +- (UICollectionView *)colorCollectionView { + if (!_colorCollectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.minimumInteritemSpacing = 0; + layout.minimumLineSpacing = 16; + layout.itemSize = CGSizeMake(28, 28); + layout.sectionInset = UIEdgeInsetsMake(0, 20, 0, 20); + _colorCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _colorCollectionView.translatesAutoresizingMaskIntoConstraints = NO; + _colorCollectionView.backgroundColor = [UIColor clearColor]; + _colorCollectionView.showsVerticalScrollIndicator = NO; + _colorCollectionView.showsHorizontalScrollIndicator = NO; + _colorCollectionView.dataSource = self; + _colorCollectionView.delegate = self; + [_colorCollectionView registerClass:[FUGreenScreenColorCell class] forCellWithReuseIdentifier:kFUGreenScreenColorCellIdentifier]; + _colorCollectionView.hidden = YES; + } + return _colorCollectionView; +} + +- (FUSquareButton *)recoverButton { + if (!_recoverButton) { + _recoverButton = [[FUSquareButton alloc] initWithFrame:CGRectMake(0, 0, 44, 74)]; + [_recoverButton setTitle:FUGreenScreenStringWithKey(@"恢复") forState:UIControlStateNormal]; + [_recoverButton setImage:FUGreenScreenImageNamed(@"demo_icon_recover") forState:UIControlStateNormal]; + _recoverButton.alpha = 0.6; + _recoverButton.userInteractionEnabled = NO; + [_recoverButton addTarget:self action:@selector(recoverAction) forControlEvents:UIControlEventTouchUpInside]; + _recoverButton.translatesAutoresizingMaskIntoConstraints = NO; + } + return _recoverButton; +} + +-(FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 16, CGRectGetWidth(self.frame) - 116, 30)]; + _slider.hidden = YES; + [_slider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + [_slider addTarget:self action:@selector(sliderChangeEnded) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; + } + return _slider; +} + +@end + +@interface FUGreenScreenKeyingCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUGreenScreenKeyingCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + NSLayoutConstraint *imageTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *imageLeading = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *imageTrailing = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *imageHeight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; + [self.contentView addConstraints:@[imageTop, imageLeading, imageTrailing]]; + [self.imageView addConstraint:imageHeight]; + + [self.contentView addSubview:self.textLabel]; + NSLayoutConstraint *textTop = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:7]; + + NSLayoutConstraint *textCenterX = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [self.contentView addConstraints:@[textTop, textCenterX]]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + BOOL changed = self.currentValue > 0.01; + if (selected) { + self.imageView.image = changed ? FUGreenScreenImageNamed([NSString stringWithFormat:@"%@_sel_open", self.imageName]) : FUGreenScreenImageNamed([NSString stringWithFormat:@"%@_sel", self.imageName]); + self.textLabel.textColor = [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1]; + } else { + self.imageView.image = changed ? FUGreenScreenImageNamed([NSString stringWithFormat:@"%@_nor_open", self.imageName]) : FUGreenScreenImageNamed([NSString stringWithFormat:@"%@_nor", self.imageName]); + self.textLabel.textColor = [UIColor whiteColor]; + } +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] init]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _textLabel; +} + +@end + +@interface FUGreenScreenColorCell () + +@property (nonatomic, strong) UIImageView *backgroundImageView; + +@property (nonatomic, strong) UIImageView *imageView; + +@end + +@implementation FUGreenScreenColorCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.backgroundImageView]; + [self.contentView addSubview:self.imageView]; + + self.contentView.layer.masksToBounds = YES; + self.contentView.layer.cornerRadius = CGRectGetWidth(frame) / 2.0; + self.contentView.layer.borderColor = [UIColor whiteColor].CGColor; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + if (selected) { + self.imageView.image = nil; + self.contentView.layer.borderWidth = 2; + [UIView animateWithDuration:0.25 animations:^{ + self.imageView.transform = CGAffineTransformMakeScale(0.7, 0.7); + if (!self.backgroundImageView.hidden) { + self.backgroundImageView.transform = CGAffineTransformMakeScale(0.7, 0.7); + } + }]; + } else { + if (self.pickerColorImage) { + self.imageView.image = self.pickerColorImage; + } + self.contentView.layer.borderWidth = 0; + self.imageView.transform = CGAffineTransformIdentity; + if (!self.backgroundImageView.hidden) { + self.backgroundImageView.transform = CGAffineTransformIdentity; + } + } +} + +- (UIImageView *)backgroundImageView { + if (!_backgroundImageView) { + _backgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(1, 1, CGRectGetWidth(self.frame) - 2, CGRectGetHeight(self.frame) - 2)]; + _backgroundImageView.image = FUGreenScreenImageNamed(@"demo_bg_transparent"); + _backgroundImageView.layer.cornerRadius = CGRectGetWidth(_backgroundImageView.frame) / 2.0; + } + return _backgroundImageView; +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame))]; + _imageView.layer.masksToBounds = YES; + _imageView.layer.cornerRadius = CGRectGetWidth(_imageView.frame) / 2.0; + } + return _imageView; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenSafeAreaView.h b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenSafeAreaView.h new file mode 100644 index 00000000..ddd25429 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenSafeAreaView.h @@ -0,0 +1,46 @@ +// +// FUGreenScreenSafeAreaView.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2021/8/10. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import +#import "FUGreenScreenSafeAreaViewModel.h" + +@class FUGreenScreenSafeAreaView; + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUGreenScreenSafeAreaViewDelegate + +@optional +/// 返回 +- (void)safeAreaCollectionViewDidClickBack; +/// 取消选择 +- (void)safeAreaCollectionViewDidClickCancel; +/// 自定义 +- (void)safeAreaCollectionViewDidClickAdd; +/// 选择 +- (void)safeAreaCollectionViewDidSelectItemAtIndex:(NSInteger)index; + +@end + +@interface FUGreenScreenSafeAreaView : UIView + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUGreenScreenSafeAreaViewModel *)viewModel; + +- (void)refreshSafeAreas; + +@end + +@interface FUGreenScreenSafeAreaCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenSafeAreaView.m b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenSafeAreaView.m new file mode 100644 index 00000000..5cae68d3 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/View/FUGreenScreenSafeAreaView.m @@ -0,0 +1,152 @@ +// +// FUGreenScreenSafeAreaView.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2021/8/10. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUGreenScreenSafeAreaView.h" +#import "FUGreenScreenDefine.h" + +@interface FUGreenScreenSafeAreaView () + +@property (nonatomic, strong) UICollectionView *collectionView; + +@property (nonatomic, strong) FUGreenScreenSafeAreaViewModel *viewModel; + +@end + +static NSString * const kFUGreenScreenSafeAreaCellIdentifierKey = @"FUGreenScreenSafeAreaCellIdentifier"; + +@implementation FUGreenScreenSafeAreaView + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUGreenScreenSafeAreaViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.collectionView]; + + [self refreshSafeAreas]; + } + return self; +} + +- (void)refreshSafeAreas { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + }); +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.safeAreaArray.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUGreenScreenSafeAreaCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUGreenScreenSafeAreaCellIdentifierKey forIndexPath:indexPath]; + cell.imageView.image = [self.viewModel safeAreaIconAtIndex:indexPath.item]; + return cell; +} + +#pragma mark - Collection view delegate + +- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.item == 0) { + // Back + if (self.delegate && [self.delegate respondsToSelector:@selector(safeAreaCollectionViewDidClickBack)]) { + [self.delegate safeAreaCollectionViewDidClickBack]; + } + [self refreshSafeAreas]; + return NO; + } else if (indexPath.item == 2) { + // Add + if (self.delegate && [self.delegate respondsToSelector:@selector(safeAreaCollectionViewDidClickAdd)]) { + [self.delegate safeAreaCollectionViewDidClickAdd]; + } + [self refreshSafeAreas]; + return NO; + } + return YES; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.item == self.viewModel.selectedIndex) { + return; + } + self.viewModel.selectedIndex = indexPath.item; + switch (indexPath.item) { + case 1:{ + // Cancel + if (self.delegate && [self.delegate respondsToSelector:@selector(safeAreaCollectionViewDidClickCancel)]) { + [self.delegate safeAreaCollectionViewDidClickCancel]; + } + } + break; + default:{ + if (self.delegate && [self.delegate respondsToSelector:@selector(safeAreaCollectionViewDidSelectItemAtIndex:)]) { + [self.delegate safeAreaCollectionViewDidSelectItemAtIndex:indexPath.item]; + } + } + break; + } +} + +#pragma mark - Getters + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(54, 70); + layout.minimumLineSpacing = 16; + layout.minimumInteritemSpacing = 50; + layout.sectionInset = UIEdgeInsetsMake(16, 18, 10, 18); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)) collectionViewLayout:layout]; + _collectionView.translatesAutoresizingMaskIntoConstraints = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.showsHorizontalScrollIndicator = NO; + _collectionView.dataSource = self; + _collectionView.delegate = self; + [_collectionView registerClass:[FUGreenScreenSafeAreaCell class] forCellWithReuseIdentifier:kFUGreenScreenSafeAreaCellIdentifierKey]; + } + return _collectionView; +} + +@end + +@interface FUGreenScreenSafeAreaCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@end + +@implementation FUGreenScreenSafeAreaCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 54, 54)]; + self.imageView.contentMode = UIViewContentModeScaleAspectFill; + self.imageView.layer.masksToBounds = YES; + self.imageView.layer.cornerRadius = 3.0; + [self addSubview:self.imageView]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.imageView.layer.borderWidth = selected ? 2 : 0; + self.imageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1].CGColor : [UIColor clearColor].CGColor; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenBackgroundViewModel.h b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenBackgroundViewModel.h new file mode 100644 index 00000000..1b63a4fc --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenBackgroundViewModel.h @@ -0,0 +1,27 @@ +// +// FUGreenScreenBackgroundViewModel.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import +#import + +@class FUGreenScreenBackgroundModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenBackgroundViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *backgroundArray; +/// 当前选中的背景索引,默认为2 +@property (nonatomic, assign) NSInteger selectedIndex; + +- (UIImage *)backgroundIconAtIndex:(NSInteger)index; + +- (NSString *)backgroundNameAtIndex:(NSInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenBackgroundViewModel.m b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenBackgroundViewModel.m new file mode 100644 index 00000000..5afeaff5 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenBackgroundViewModel.m @@ -0,0 +1,73 @@ +// +// FUGreenScreenBackgroundViewModel.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenBackgroundViewModel.h" +#import "FUGreenScreenBackgroundModel.h" +#import "FUGreenScreenDefine.h" + +#import + +@interface FUGreenScreenBackgroundViewModel () + +@property (nonatomic, copy) NSArray *backgroundArray; + +@end + +@implementation FUGreenScreenBackgroundViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + self.selectedIndex = 3; + } + return self; +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (![FURenderKit shareRenderKit].greenScreen || selectedIndex < 0 || selectedIndex >= self.backgroundArray.count) { + return; + } + FUGreenScreen *greenScreen = [FURenderKit shareRenderKit].greenScreen; + if (selectedIndex == 0) { + // 取消选中背景视频 + greenScreen.videoPath = nil; + } else { + FUGreenScreenBackgroundModel *backgroundModel = self.backgroundArray[selectedIndex]; + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *URLString = [bundle pathForResource:backgroundModel.videoName ofType:@"mp4"]; + greenScreen.videoPath = URLString; + } + _selectedIndex = selectedIndex; +} + +- (UIImage *)backgroundIconAtIndex:(NSInteger)index { + FUGreenScreenBackgroundModel *model = self.backgroundArray[index]; + return FUGreenScreenImageNamed(model.icon); +} + +- (NSString *)backgroundNameAtIndex:(NSInteger)index { + FUGreenScreenBackgroundModel *model = self.backgroundArray[index]; + return FUGreenScreenStringWithKey(model.name); +} + +- (NSArray *)backgroundArray { + if (!_backgroundArray) { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:@"green_screen_background" ofType:@"json"]; + NSArray *data = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *backgrounds = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in data) { + FUGreenScreenBackgroundModel *model = [[FUGreenScreenBackgroundModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + [backgrounds addObject:model]; + } + _backgroundArray = [backgrounds copy]; + } + return _backgroundArray; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenKeyingViewModel.h b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenKeyingViewModel.h new file mode 100644 index 00000000..61fa0966 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenKeyingViewModel.h @@ -0,0 +1,54 @@ +// +// FUGreenScreenKeyingViewModel.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +#import "FUGreenScreenSafeAreaViewModel.h" + +@class FUGreenScreenKeyingModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenKeyingViewModel : NSObject + +@property (nonatomic, strong, readonly) FUGreenScreenSafeAreaViewModel *safeAreaViewModel; + +@property (nonatomic, copy, readonly) NSArray *keyingArray; +/// 可选关键颜色数组 +@property (nonatomic, strong, readonly) NSMutableArray *keyColorArray; +/// 是否所有值都是默认 +@property (nonatomic, assign, readonly) BOOL isDefaultValue; + +/// 当前选中抠像功能索引,默认为0 +@property (nonatomic, assign) NSInteger selectedIndex; +/// 当前选中抠像功能指 +@property (nonatomic, assign) double selectedValue; +/// 当前选中关键颜色索引,默认为1 +@property (nonatomic, assign) NSInteger selectedColorIndex; +/// 当前取的关键颜色 +@property (nonatomic, strong) UIColor *currentKeyColor; + +/// 设置所有抠像效果值 +- (void)setAllKeyingValues; + +/// 恢复自定义取色为默认 +- (void)recoverCustomizedKeyColor; + +/// 恢复所有效果为默认 +- (void)recoverToDefault; + +- (NSString *)keyingNameAtIndex:(NSInteger)index; + +- (NSString *)keyingImageNameAtIndex:(NSInteger)index; + +- (double)keyingDefaultValueAtIndex:(NSInteger)index; + +- (double)keyingCurrentValueAtIndex:(NSInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenKeyingViewModel.m b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenKeyingViewModel.m new file mode 100644 index 00000000..3e72a53f --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenKeyingViewModel.m @@ -0,0 +1,200 @@ +// +// FUGreenScreenKeyingViewModel.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenKeyingViewModel.h" +#import "FUGreenScreenKeyingModel.h" + +#import + +@interface FUGreenScreenKeyingViewModel () + +@property (nonatomic, strong) FUGreenScreenSafeAreaViewModel *safeAreaViewModel; +@property (nonatomic, copy) NSArray *keyingArray; +@property (nonatomic, strong) NSMutableArray *keyColorArray; + +@end + +@implementation FUGreenScreenKeyingViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + [self setAllKeyingValues]; + self.selectedColorIndex = 1; + } + return self; +} + +#pragma mark - Instance methods + +- (void)setAllKeyingValues { + for (FUGreenScreenKeyingModel *model in self.keyingArray) { + [self setValue:model.currentValue forType:model.type]; + } +} + +- (void)recoverCustomizedKeyColor { + self.keyColorArray[0] = [UIColor clearColor]; +} + +- (void)recoverToDefault { + for (FUGreenScreenKeyingModel *model in self.keyingArray) { + model.currentValue = model.defaultValue; + [self setValue:model.currentValue forType:model.type]; + } + // 恢复锚点取色值为透明色 + self.keyColorArray[0] = [UIColor clearColor]; + // 恢复默认选择颜色 + self.selectedColorIndex = 1; + self.safeAreaViewModel.selectedIndex = 1; +} + +- (NSString *)keyingNameAtIndex:(NSInteger)index { + FUGreenScreenKeyingModel *model = self.keyingArray[index]; + return FUGreenScreenStringWithKey(model.name); +} + +- (NSString *)keyingImageNameAtIndex:(NSInteger)index { + FUGreenScreenKeyingModel *model = self.keyingArray[index]; + return model.icon; +} + +- (double)keyingDefaultValueAtIndex:(NSInteger)index { + FUGreenScreenKeyingModel *model = self.keyingArray[index]; + return model.defaultValue; +} + +- (double)keyingCurrentValueAtIndex:(NSInteger)index { + FUGreenScreenKeyingModel *model = self.keyingArray[index]; + if (model.type == FUGreenScreenKeyingTypeSafeArea) { + return self.safeAreaViewModel.selectedIndex > 2 ? 1 : 0; + } else { + return model.currentValue; + } +} + +#pragma mark - Setters + +- (void)setSelectedValue:(double)selectedValue { + if (self.selectedIndex <= FUGreenScreenKeyingTypeColor || self.selectedIndex >= FUGreenScreenKeyingTypeSafeArea) { + // 忽略关键颜色和安全区域 + return; + } + FUGreenScreenKeyingModel *model = self.keyingArray[self.selectedIndex]; + model.currentValue = selectedValue; + [self setValue:model.currentValue forType:model.type]; +} + +- (void)setSelectedColorIndex:(NSInteger)selectedColorIndex { + if (selectedColorIndex < 0 || selectedColorIndex >= self.keyColorArray.count) { + return; + } + _selectedColorIndex = selectedColorIndex; + if (selectedColorIndex == 0) { + // 设置绿幕效果失效 + [FURenderKit shareRenderKit].greenScreen.enable = NO; + } else { + // 设置绿幕效果有效,更新当前关键颜色 + [FURenderKit shareRenderKit].greenScreen.enable = YES; + self.currentKeyColor = self.keyColorArray[selectedColorIndex]; + } +} + +- (void)setCurrentKeyColor:(UIColor *)currentKeyColor { + if (!currentKeyColor) { + return; + } + _currentKeyColor = currentKeyColor; + if (![FURenderKit shareRenderKit].greenScreen.enable) { + [FURenderKit shareRenderKit].greenScreen.enable = YES; + } + [FURenderKit shareRenderKit].greenScreen.keyColor = FUColorMakeWithUIColor(currentKeyColor); + + // 设置关键颜色后FURenderKit层的相似度、平滑度、祛色度可能自动发生变化,所以需要更新程度值 + double chromaThresValue = [FURenderKit shareRenderKit].greenScreen.chromaThres; + double chromaThresTValue = [FURenderKit shareRenderKit].greenScreen.chromaThrest; + double alphaLValue = [FURenderKit shareRenderKit].greenScreen.alphal; + self.keyingArray[FUGreenScreenKeyingTypeChromaThres].currentValue = chromaThresValue; + self.keyingArray[FUGreenScreenKeyingTypeChromaThrest].currentValue = chromaThresTValue; + self.keyingArray[FUGreenScreenKeyingTypeAlphaL].currentValue = alphaLValue; +} + +- (void)setValue:(double)value forType:(FUGreenScreenKeyingType)type { + switch (type) { + case FUGreenScreenKeyingTypeChromaThres: + [FURenderKit shareRenderKit].greenScreen.chromaThres = value; + break; + case FUGreenScreenKeyingTypeChromaThrest: + [FURenderKit shareRenderKit].greenScreen.chromaThrest = value; + break; + case FUGreenScreenKeyingTypeAlphaL: + [FURenderKit shareRenderKit].greenScreen.alphal = value; + default: + break; + } +} + +#pragma mark - Getters + +- (double)selectedValue { + FUGreenScreenKeyingModel *model = self.keyingArray[self.selectedIndex]; + return model.currentValue; +} + +- (BOOL)isDefaultValue { + if (self.safeAreaViewModel.selectedIndex > 2) { + // 设置了安全区域 + return NO; + } + if (self.selectedColorIndex != 1) { + // 关键颜色发生变化 + return NO; + } + for (FUGreenScreenKeyingModel *model in self.keyingArray) { + if (fabs(model.currentValue - model.defaultValue) > 0.01) { + // 抠像功能某一项值发生了变化 + return NO; + } + } + return YES; +} + +- (FUGreenScreenSafeAreaViewModel *)safeAreaViewModel { + if (!_safeAreaViewModel) { + _safeAreaViewModel = [[FUGreenScreenSafeAreaViewModel alloc] init]; + } + return _safeAreaViewModel; +} + +- (NSArray *)keyingArray { + if (!_keyingArray) { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:@"green_screen_keying" ofType:@"json"]; + NSArray *data = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *keyings = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in data) { + FUGreenScreenKeyingModel *model = [[FUGreenScreenKeyingModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + [keyings addObject:model]; + } + _keyingArray = [keyings copy]; + } + return _keyingArray; +} + +- (NSMutableArray *)keyColorArray { + if (!_keyColorArray) { + _keyColorArray = [@[ + [UIColor clearColor], + [UIColor colorWithRed:0 green:1.0 blue:0 alpha:1.0], + [UIColor colorWithRed:0 green:0.0 blue:1 alpha:1.0], + [UIColor colorWithRed:1 green:1 blue:1 alpha:1.0]] mutableCopy]; + } + return _keyColorArray; +} + +@end diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenSafeAreaViewModel.h b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenSafeAreaViewModel.h new file mode 100644 index 00000000..4899fa8e --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenSafeAreaViewModel.h @@ -0,0 +1,34 @@ +// +// FUGreenScreenSafeAreaViewModel.h +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import + +@class FUGreenScreenSafeAreaModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenSafeAreaViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *safeAreaArray; + +/// 本地安全区域图片 +@property (nonatomic, strong, readonly) UIImage *localSafeAreaImage; + +/// 当前选中的安全区域索引,默认为1 +@property (nonatomic, assign) NSInteger selectedIndex; + +/// 更新数据 +- (void)realoadSafeAreaData; + +/// 保存本地安全区域图片 +- (BOOL)saveLocalSafeAreaImage:(UIImage *)image; + +- (UIImage *)safeAreaIconAtIndex:(NSInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenSafeAreaViewModel.m b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenSafeAreaViewModel.m new file mode 100644 index 00000000..726b2ed1 --- /dev/null +++ b/FUGreenScreenComponent/FUGreenScreenComponent/ViewModel/FUGreenScreenSafeAreaViewModel.m @@ -0,0 +1,128 @@ +// +// FUGreenScreenSafeAreaViewModel.m +// FUGreenScreenComponent +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenSafeAreaViewModel.h" +#import "FUGreenScreenSafeAreaModel.h" +#import "FUGreenScreenDefine.h" + +#import + +@interface FUGreenScreenSafeAreaViewModel () + +@property (nonatomic, copy) NSArray *safeAreaArray; + +@property (nonatomic, strong) UIImage *localSafeAreaImage; + +@end + +@implementation FUGreenScreenSafeAreaViewModel + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + [self realoadSafeAreaData]; + self.selectedIndex = 1; + } + return self; +} + +#pragma mark - Instance methods + +- (void)realoadSafeAreaData { + NSMutableArray *models = [[NSMutableArray alloc] init]; + + // 返回 + FUGreenScreenSafeAreaModel *backModel = [[FUGreenScreenSafeAreaModel alloc] init]; + backModel.iconName = @"demo_icon_returns"; + [models addObject:backModel]; + + // 取消选中 + FUGreenScreenSafeAreaModel *cancelModel = [[FUGreenScreenSafeAreaModel alloc] init]; + cancelModel.iconName = @"demo_icon_cancel"; + [models addObject:cancelModel]; + + // 增加本地自定义 + FUGreenScreenSafeAreaModel *addModel = [[FUGreenScreenSafeAreaModel alloc] init]; + addModel.iconName = @"demo_icon_add"; + [models addObject:addModel]; + + if (self.localSafeAreaImage) { + // 存在本地自定义 + FUGreenScreenSafeAreaModel *model = [[FUGreenScreenSafeAreaModel alloc] init]; + model.isLocal = YES; + model.iconName = @"safeArea.png"; + model.imageName = model.iconName; + [models addObject:model]; + } + + // 固定两个安全区域图片 + FUGreenScreenSafeAreaModel *model1 = [[FUGreenScreenSafeAreaModel alloc] init]; + model1.iconName = @"demo_icon_safe_area_1"; + model1.imageName = @"safe_area_1"; + [models addObject:model1]; + + FUGreenScreenSafeAreaModel *model2 = [[FUGreenScreenSafeAreaModel alloc] init]; + model2.iconName = @"demo_icon_safe_area_2"; + model2.imageName = @"safe_area_2"; + [models addObject:model2]; + self.safeAreaArray = [models copy]; +} + +- (void)updateSafeAreaImage:(UIImage *)image { + [FURenderKit shareRenderKit].greenScreen.safeAreaImage = image; +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex < 1 || selectedIndex == 2 || selectedIndex >= self.safeAreaArray.count) { + // 返回和添加项无法选中 + return; + } + _selectedIndex = selectedIndex; + if (selectedIndex == 1) { + // cancel + [self updateSafeAreaImage:nil]; + } else if (selectedIndex > 2) { + FUGreenScreenSafeAreaModel *safeArea = self.safeAreaArray[selectedIndex]; + if (safeArea.isLocal && self.localSafeAreaImage) { + // 本地自定义安全区域 + [self updateSafeAreaImage:self.localSafeAreaImage]; + } else { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + UIImage *image = [UIImage imageWithContentsOfFile:[bundle pathForResource:safeArea.imageName ofType:@"jpg"]]; + [self updateSafeAreaImage:image]; + } + } +} + +- (BOOL)saveLocalSafeAreaImage:(UIImage *)image { + if (!image) { + return NO; + } + NSString *localPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"safeArea.png"]; + return [UIImagePNGRepresentation(image) writeToFile:localPath atomically:YES]; +} + +- (UIImage *)localSafeAreaImage { + NSString *localPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"safeArea.png"]; + if (![[NSFileManager defaultManager] fileExistsAtPath:localPath]) { + return nil; + } + return [UIImage imageWithContentsOfFile:localPath]; +} + +- (UIImage *)safeAreaIconAtIndex:(NSInteger)index { + FUGreenScreenSafeAreaModel *safeArea = self.safeAreaArray[index]; + if (safeArea.isLocal && self.localSafeAreaImage) { + return self.localSafeAreaImage; + } else { + return FUGreenScreenImageNamed(safeArea.iconName); + } +} + +@end diff --git a/FULiveDemo.xcodeproj/project.pbxproj b/FULiveDemo.xcodeproj/project.pbxproj index d0819eff..5ce2db73 100644 --- a/FULiveDemo.xcodeproj/project.pbxproj +++ b/FULiveDemo.xcodeproj/project.pbxproj @@ -3,468 +3,304 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 55; objects = { /* Begin PBXBuildFile section */ - 0B5A0CC02021913900AAD47D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0B5A0CBE2021913900AAD47D /* Main.storyboard */; }; - 0B5A0CC52021913900AAD47D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0B5A0CC32021913900AAD47D /* LaunchScreen.storyboard */; }; - 0B5A0CC82021913900AAD47D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B5A0CC72021913900AAD47D /* main.m */; }; - 0B5A0D6D2021918000AAD47D /* FUCircleProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B5A0D2D2021917F00AAD47D /* FUCircleProgressView.m */; }; - 0B5A0D722021918000AAD47D /* FUPhotoButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B5A0D372021917F00AAD47D /* FUPhotoButton.m */; }; - 0B5A0D7C2021919700AAD47D /* dataSource.plist in Resources */ = {isa = PBXBuildFile; fileRef = 0B5A0D7B2021919600AAD47D /* dataSource.plist */; }; - 0B6B00FE20F49C0F0079118B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0B6B010020F49C0F0079118B /* Localizable.strings */; }; - 0BC0D25E2153891300324D7D /* FULightingSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0D25D2153891300324D7D /* FULightingSlider.m */; }; - 0BC0D26121538BA300324D7D /* FULightingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0D26021538BA300324D7D /* FULightingView.m */; }; - 0BE100FC2150F9ED00098F1B /* douyin.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100382150F9ED00098F1B /* douyin.mp3 */; }; - 0BE100FD2150F9ED00098F1B /* douyin_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100392150F9ED00098F1B /* douyin_01.bundle */; }; - 0BE100FE2150F9ED00098F1B /* douyin_01.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE1003A2150F9ED00098F1B /* douyin_01.png */; }; - 0BE100FF2150F9ED00098F1B /* douyin_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE1003B2150F9ED00098F1B /* douyin_02.bundle */; }; - 0BE101002150F9ED00098F1B /* douyin_02.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE1003C2150F9ED00098F1B /* douyin_02.png */; }; - 0BE1011F2150F9ED00098F1B /* facewarp2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE1005E2150F9ED00098F1B /* facewarp2.bundle */; }; - 0BE101202150F9ED00098F1B /* facewarp2.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE1005F2150F9ED00098F1B /* facewarp2.png */; }; - 0BE101212150F9ED00098F1B /* facewarp3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100602150F9ED00098F1B /* facewarp3.bundle */; }; - 0BE101222150F9ED00098F1B /* facewarp3.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100612150F9ED00098F1B /* facewarp3.png */; }; - 0BE101232150F9ED00098F1B /* facewarp4.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100622150F9ED00098F1B /* facewarp4.bundle */; }; - 0BE101242150F9ED00098F1B /* facewarp4.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100632150F9ED00098F1B /* facewarp4.png */; }; - 0BE101252150F9ED00098F1B /* facewarp5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100642150F9ED00098F1B /* facewarp5.bundle */; }; - 0BE101262150F9ED00098F1B /* facewarp5.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100652150F9ED00098F1B /* facewarp5.png */; }; - 0BE101272150F9ED00098F1B /* facewarp6.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100662150F9ED00098F1B /* facewarp6.bundle */; }; - 0BE101282150F9ED00098F1B /* facewarp6.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100672150F9ED00098F1B /* facewarp6.png */; }; - 0BE101322150F9EE00098F1B /* ssd_thread_cute.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100732150F9ED00098F1B /* ssd_thread_cute.bundle */; }; - 0BE101332150F9EE00098F1B /* ssd_thread_cute.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100742150F9ED00098F1B /* ssd_thread_cute.png */; }; - 0BE101352150F9EE00098F1B /* ssd_thread_six.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100762150F9ED00098F1B /* ssd_thread_six.bundle */; }; - 0BE101362150F9EE00098F1B /* ssd_thread_six.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100772150F9ED00098F1B /* ssd_thread_six.png */; }; - 0BE101372150F9EE00098F1B /* ssd_thread_thumb.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100782150F9ED00098F1B /* ssd_thread_thumb.bundle */; }; - 0BE101382150F9EE00098F1B /* ssd_thread_thumb.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BE100792150F9ED00098F1B /* ssd_thread_thumb.png */; }; - 410BC7A025F2332200FDB6C0 /* FUBodyBeautyController.m in Sources */ = {isa = PBXBuildFile; fileRef = 410BC79D25F2332200FDB6C0 /* FUBodyBeautyController.m */; }; - 410BC7AB25F2333C00FDB6C0 /* FUBodyBeautyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 410BC7AA25F2333C00FDB6C0 /* FUBodyBeautyManager.m */; }; - 410F43C825E75863000AFB72 /* FUStickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 410F43C725E75863000AFB72 /* FUStickerManager.m */; }; - 410F43D825E776E8000AFB72 /* FULocalDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 410F43D725E776E8000AFB72 /* FULocalDataManager.m */; }; - 410F43ED25E78C73000AFB72 /* FUAnimojiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 410F43EC25E78C73000AFB72 /* FUAnimojiManager.m */; }; - 412399992615767B00F0DFC3 /* bg_segment.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 412399982615767A00F0DFC3 /* bg_segment.bundle */; }; - 4124C3E3260A1F2E0090AF9E /* mu_style_eyepupil_09.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3DB260A1F2C0090AF9E /* mu_style_eyepupil_09.bundle */; }; - 4124C3E4260A1F2E0090AF9E /* mu_style_eyepupil_07.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3DC260A1F2C0090AF9E /* mu_style_eyepupil_07.bundle */; }; - 4124C3E5260A1F2E0090AF9E /* mu_style_eyepupil_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3DD260A1F2D0090AF9E /* mu_style_eyepupil_03.bundle */; }; - 4124C3E6260A1F2E0090AF9E /* mu_style_eyepupil_08.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3DE260A1F2D0090AF9E /* mu_style_eyepupil_08.bundle */; }; - 4124C3E7260A1F2E0090AF9E /* mu_style_eyepupil_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3DF260A1F2D0090AF9E /* mu_style_eyepupil_04.bundle */; }; - 4124C3E8260A1F2E0090AF9E /* mu_style_eyepupil_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3E0260A1F2D0090AF9E /* mu_style_eyepupil_01.bundle */; }; - 4124C3E9260A1F2E0090AF9E /* mu_style_eyepupil_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3E1260A1F2D0090AF9E /* mu_style_eyepupil_05.bundle */; }; - 4124C3EA260A1F2E0090AF9E /* mu_style_eyepupil_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4124C3E2260A1F2D0090AF9E /* mu_style_eyepupil_06.bundle */; }; - 4125E0502629C3EF008D31F7 /* cartoon_princess_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4125E04E2629C3EF008D31F7 /* cartoon_princess_Animoji.bundle */; }; - 4125E0512629C3EF008D31F7 /* cartoon_princess_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = 4125E04F2629C3EF008D31F7 /* cartoon_princess_Animoji.png */; }; - 41276649261DA2620001BDEF /* tiezhi_data.json in Resources */ = {isa = PBXBuildFile; fileRef = 41276637261DA2620001BDEF /* tiezhi_data.json */; }; - 4127664A261DA2620001BDEF /* 流星_00036.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276638261DA2620001BDEF /* 流星_00036.png */; }; - 4127664B261DA2620001BDEF /* 流星_00037.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276639261DA2620001BDEF /* 流星_00037.png */; }; - 4127664C261DA2620001BDEF /* 流星_00041.png in Resources */ = {isa = PBXBuildFile; fileRef = 4127663A261DA2620001BDEF /* 流星_00041.png */; }; - 4127664D261DA2620001BDEF /* 流星_00040.png in Resources */ = {isa = PBXBuildFile; fileRef = 4127663B261DA2620001BDEF /* 流星_00040.png */; }; - 4127664E261DA2620001BDEF /* 流星_00042.png in Resources */ = {isa = PBXBuildFile; fileRef = 4127663C261DA2620001BDEF /* 流星_00042.png */; }; - 4127664F261DA2620001BDEF /* 流星_00043.png in Resources */ = {isa = PBXBuildFile; fileRef = 4127663D261DA2620001BDEF /* 流星_00043.png */; }; - 41276650261DA2620001BDEF /* 流星_00047.png in Resources */ = {isa = PBXBuildFile; fileRef = 4127663E261DA2620001BDEF /* 流星_00047.png */; }; - 41276651261DA2620001BDEF /* 流星_00052.png in Resources */ = {isa = PBXBuildFile; fileRef = 4127663F261DA2620001BDEF /* 流星_00052.png */; }; - 41276652261DA2620001BDEF /* 流星_00046.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276640261DA2620001BDEF /* 流星_00046.png */; }; - 41276653261DA2620001BDEF /* 流星_00050.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276641261DA2620001BDEF /* 流星_00050.png */; }; - 41276654261DA2620001BDEF /* 流星_00044.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276642261DA2620001BDEF /* 流星_00044.png */; }; - 41276655261DA2620001BDEF /* 流星_00045.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276643261DA2620001BDEF /* 流星_00045.png */; }; - 41276656261DA2620001BDEF /* 流星_00051.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276644261DA2620001BDEF /* 流星_00051.png */; }; - 41276657261DA2620001BDEF /* 流星_00048.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276645261DA2620001BDEF /* 流星_00048.png */; }; - 41276658261DA2620001BDEF /* 流星_00049.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276646261DA2620001BDEF /* 流星_00049.png */; }; - 41276659261DA2620001BDEF /* 流星_00039.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276647261DA2620001BDEF /* 流星_00039.png */; }; - 4127665A261DA2620001BDEF /* 流星_00038.png in Resources */ = {isa = PBXBuildFile; fileRef = 41276648261DA2620001BDEF /* 流星_00038.png */; }; - 412F77502609C59C003AF848 /* FUBGSaveModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 412F774E2609C59C003AF848 /* FUBGSaveModel.m */; }; - 41391C2B25E8D067005451E5 /* FUMetaManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41391C2825E8D067005451E5 /* FUMetaManager.m */; }; - 41391C2C25E8D067005451E5 /* FUBaseViewControllerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41391C2A25E8D067005451E5 /* FUBaseViewControllerManager.m */; }; - 41391C3325E8D071005451E5 /* FUBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41391C3125E8D071005451E5 /* FUBaseViewController.m */; }; - 4156CD9526141DAE00DD72C1 /* FUBeautyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CD9326141DAE00DD72C1 /* FUBeautyModel.m */; }; - 4156CD9E26141DCB00DD72C1 /* FUStyleModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CD9A26141DCB00DD72C1 /* FUStyleModel.m */; }; - 4156CE05261470CF00DD72C1 /* FUQStickersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CDF9261470CF00DD72C1 /* FUQStickersViewController.m */; }; - 4156CE06261470CF00DD72C1 /* FUStickersPageController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CDFA261470CF00DD72C1 /* FUStickersPageController.m */; }; - 4156CE08261470CF00DD72C1 /* FUStickerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CDFE261470CF00DD72C1 /* FUStickerModel.m */; }; - 4156CE09261470CF00DD72C1 /* FUStickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CE00261470CF00DD72C1 /* FUStickerCell.m */; }; - 4156CE0B261470CF00DD72C1 /* FUStickerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4156CE04261470CF00DD72C1 /* FUStickerCell.xib */; }; - 4156CE1E2614715B00DD72C1 /* FUNetworkingHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CE1C2614715B00DD72C1 /* FUNetworkingHelper.m */; }; - 4156CE26261471B100DD72C1 /* UIColor+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CE24261471B100DD72C1 /* UIColor+FU.m */; }; - 4156CE33261472A700DD72C1 /* FUQualityStickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CE32261472A700DD72C1 /* FUQualityStickerManager.m */; }; - 4156CE3A261472C100DD72C1 /* FUStickerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4156CE39261472C100DD72C1 /* FUStickerHelper.m */; }; - 4165BCFC25F0FB350076FBFD /* FUAnimationFilterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4165BCFB25F0FB350076FBFD /* FUAnimationFilterManager.m */; }; - 4180A52726117F55003DC778 /* redribbt.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A4FC26117F55003DC778 /* redribbt.bundle */; }; - 4180A52826117F55003DC778 /* redribbt.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A4FD26117F55003DC778 /* redribbt.png */; }; - 4180A52E26117F55003DC778 /* sdlr.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A50426117F55003DC778 /* sdlr.png */; }; - 4180A52F26117F55003DC778 /* sdlr.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A50526117F55003DC778 /* sdlr.bundle */; }; - 4180A53426117F55003DC778 /* sdlu.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A50A26117F55003DC778 /* sdlu.png */; }; - 4180A53526117F55003DC778 /* xlong_zh_fu.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A50C26117F55003DC778 /* xlong_zh_fu.png */; }; - 4180A53626117F55003DC778 /* xlong_zh_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A50D26117F55003DC778 /* xlong_zh_fu.bundle */; }; - 4180A53726117F55003DC778 /* sdlu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A50E26117F55003DC778 /* sdlu.bundle */; }; - 4180A53B26117F55003DC778 /* CatSparks.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A51426117F55003DC778 /* CatSparks.png */; }; - 4180A53C26117F55003DC778 /* CatSparks.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A51526117F55003DC778 /* CatSparks.bundle */; }; - 4180A53F26117F55003DC778 /* fu_zh_fenshu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A51826117F55003DC778 /* fu_zh_fenshu.bundle */; }; - 4180A54226117F55003DC778 /* fu_zh_fenshu.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A51B26117F55003DC778 /* fu_zh_fenshu.png */; }; - 4180A54626117F55003DC778 /* newy1.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A52026117F55003DC778 /* newy1.png */; }; - 4180A54726117F55003DC778 /* newy1.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A52126117F55003DC778 /* newy1.bundle */; }; - 4180A54826117F55003DC778 /* DaisyPig.png in Resources */ = {isa = PBXBuildFile; fileRef = 4180A52226117F55003DC778 /* DaisyPig.png */; }; - 4180A54926117F55003DC778 /* DaisyPig.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4180A52326117F55003DC778 /* DaisyPig.bundle */; }; - 4191A03C25F1C83F0052AFB3 /* FUBgCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A03025F1C83F0052AFB3 /* FUBgCollectionView.m */; }; - 4191A03D25F1C83F0052AFB3 /* FUTakeColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A03325F1C83F0052AFB3 /* FUTakeColorView.m */; }; - 4191A03E25F1C83F0052AFB3 /* FULvMuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A03525F1C83F0052AFB3 /* FULvMuView.m */; }; - 4191A03F25F1C83F0052AFB3 /* FULvMuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A03725F1C83F0052AFB3 /* FULvMuViewController.m */; }; - 4191A04025F1C83F0052AFB3 /* FUGreenScreenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A03A25F1C83F0052AFB3 /* FUGreenScreenManager.m */; }; - 4191A06A25F1D5FB0052AFB3 /* FUGreenScreenModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A06925F1D5FB0052AFB3 /* FUGreenScreenModel.m */; }; - 4191A07125F1D7460052AFB3 /* FUGreenScreenBgModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191A07025F1D7460052AFB3 /* FUGreenScreenBgModel.m */; }; - 4198723125F08AEE0082AD1E /* FULightMakeupManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4198723025F08AEE0082AD1E /* FULightMakeupManager.m */; }; - 41C0FF3A260C6DF200CAFE62 /* NSObject+economizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 41C0FF38260C6DF200CAFE62 /* NSObject+economizer.m */; }; - 41C45F5F25F71CA2006F8F4C /* FUBodyAvatarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41C45F5E25F71CA2006F8F4C /* FUBodyAvatarManager.m */; }; - 41DD2E6F25E7A35F0030A363 /* FUMusicFilterController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41DD2E6D25E7A35F0030A363 /* FUMusicFilterController.m */; }; - 41DD2E7725E7A3940030A363 /* FUMusicFilterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41DD2E7625E7A3940030A363 /* FUMusicFilterManager.m */; }; - 41DD2E8625E7A5DB0030A363 /* FUBGSegmentationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41DD2E8525E7A5DB0030A363 /* FUBGSegmentationController.m */; }; - 41DD2E8E25E7A5F50030A363 /* FUBGSegmentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41DD2E8D25E7A5F50030A363 /* FUBGSegmentManager.m */; }; - 84218A5728ADEB3700A9D860 /* FUCommonUIComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E33C9793288E4C1400374C69 /* FUCommonUIComponent.framework */; }; - 84218A5828ADEB3700A9D860 /* FUCommonUIComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E33C9793288E4C1400374C69 /* FUCommonUIComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - AC931D2625F454B000834328 /* FUPosterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AC931D2525F454B000834328 /* FUPosterManager.m */; }; - ACBDCE3525F65D7B0036FC63 /* FULightMakeupController.m in Sources */ = {isa = PBXBuildFile; fileRef = ACBDCE3425F65D7B0036FC63 /* FULightMakeupController.m */; }; - ACBDCE3F25F65E310036FC63 /* FUBeautyController.m in Sources */ = {isa = PBXBuildFile; fileRef = ACBDCE3D25F65E310036FC63 /* FUBeautyController.m */; }; - ACC0B5B725F126F0002B56FC /* FUHairController.m in Sources */ = {isa = PBXBuildFile; fileRef = ACC0B5AE25F126F0002B56FC /* FUHairController.m */; }; - ACC0B5B825F126F0002B56FC /* FUHairManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACC0B5B225F126F0002B56FC /* FUHairManager.m */; }; - ACC0B5B925F126F0002B56FC /* FUHairView.m in Sources */ = {isa = PBXBuildFile; fileRef = ACC0B5B425F126F0002B56FC /* FUHairView.m */; }; - ACC0B5BA25F126F0002B56FC /* FUHairView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ACC0B5B625F126F0002B56FC /* FUHairView.xib */; }; - CD4D6EA621796EA400E02F39 /* change_face.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CD4D6EA521796EA400E02F39 /* change_face.bundle */; }; - CDA60866216F436F00A3DA93 /* kuloutou_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA60854216F436D00A3DA93 /* kuloutou_Animoji.png */; }; - CDA60867216F436F00A3DA93 /* baimao_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA60855216F436D00A3DA93 /* baimao_Animoji.bundle */; }; - CDA6086A216F436F00A3DA93 /* hetun_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA60858216F436E00A3DA93 /* hetun_Animoji.bundle */; }; - CDA6086B216F436F00A3DA93 /* baimao_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA60859216F436E00A3DA93 /* baimao_Animoji.png */; }; - CDA6086C216F436F00A3DA93 /* hashiqi_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA6085A216F436E00A3DA93 /* hashiqi_Animoji.bundle */; }; - CDA6086D216F436F00A3DA93 /* frog_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA6085B216F436E00A3DA93 /* frog_Animoji.png */; }; - CDA6086E216F436F00A3DA93 /* kuloutou_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA6085C216F436E00A3DA93 /* kuloutou_Animoji.bundle */; }; - CDA6086F216F436F00A3DA93 /* hashiqi_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA6085D216F436E00A3DA93 /* hashiqi_Animoji.png */; }; - CDA60870216F436F00A3DA93 /* huangya_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA6085E216F436E00A3DA93 /* huangya_Animoji.png */; }; - CDA60871216F436F00A3DA93 /* hetun_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA6085F216F436E00A3DA93 /* hetun_Animoji.png */; }; - CDA60872216F436F00A3DA93 /* douniuquan_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA60860216F436E00A3DA93 /* douniuquan_Animoji.bundle */; }; - CDA60873216F436F00A3DA93 /* douniuquan_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA60861216F436E00A3DA93 /* douniuquan_Animoji.png */; }; - CDA60875216F436F00A3DA93 /* huangya_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA60863216F436E00A3DA93 /* huangya_Animoji.bundle */; }; - CDA60876216F436F00A3DA93 /* frog_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDA60864216F436E00A3DA93 /* frog_Animoji.bundle */; }; - CDD1663C2628474C0070F570 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDD1663B2628474B0070F570 /* SystemConfiguration.framework */; }; - CDD1663E262847520070F570 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDD1663D262847520070F570 /* Security.framework */; }; - E307093D23580BFA006CC017 /* FULightMakeupCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E307093C23580BFA006CC017 /* FULightMakeupCollectionView.m */; }; - E3070941235815FF006CC017 /* FULightModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3070940235815FF006CC017 /* FULightModel.m */; }; - E30A2C172685F127000FFE0E /* baihu_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E30A2C132685F127000FFE0E /* baihu_Animoji.bundle */; }; - E30A2C182685F127000FFE0E /* wuxia_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E30A2C142685F127000FFE0E /* wuxia_Animoji.bundle */; }; - E30A2C192685F127000FFE0E /* baihu_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = E30A2C152685F127000FFE0E /* baihu_Animoji.png */; }; - E30A2C1A2685F127000FFE0E /* wuxia_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = E30A2C162685F127000FFE0E /* wuxia_Animoji.png */; }; - E30D5D012680984300EF70B1 /* UIImage+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = E30D5D002680984300EF70B1 /* UIImage+FU.m */; }; - E30EBA7C283341DC00538844 /* FUBGSegmentationRenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E30EBA7B283341DC00538844 /* FUBGSegmentationRenderMediaViewController.m */; }; - E30EFB8A273E61C500B6AE63 /* FUCombinationMakeupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E30EFB89273E61C500B6AE63 /* FUCombinationMakeupCell.m */; }; - E3120FCF274787F3000456D9 /* FUCustomizedMakeupView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3120FCE274787F3000456D9 /* FUCustomizedMakeupView.m */; }; - E3120FD227478AF7000456D9 /* FUCustomizedMakeupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3120FD127478AF7000456D9 /* FUCustomizedMakeupCell.m */; }; - E31D91282428D97D0054AFFA /* xiezhuan.json in Resources */ = {isa = PBXBuildFile; fileRef = E31D91272428D97D0054AFFA /* xiezhuan.json */; }; - E31D914F2429BE3D0054AFFA /* oumei.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E31D91442429BE3D0054AFFA /* oumei.bundle */; }; - E31D91502429BE3D0054AFFA /* linjia.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E31D91452429BE3D0054AFFA /* linjia.bundle */; }; - E31D91512429BE3D0054AFFA /* tianmei.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E31D91462429BE3D0054AFFA /* tianmei.bundle */; }; - E31D91522429BE3D0054AFFA /* wumei.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E31D91472429BE3D0054AFFA /* wumei.bundle */; }; - E31D91532429BE3D0054AFFA /* xinggan.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E31D91482429BE3D0054AFFA /* xinggan.bundle */; }; - E31D91542429BE3D0054AFFA /* wumei.json in Resources */ = {isa = PBXBuildFile; fileRef = E31D914A2429BE3D0054AFFA /* wumei.json */; }; - E31D91552429BE3D0054AFFA /* oumei.json in Resources */ = {isa = PBXBuildFile; fileRef = E31D914B2429BE3D0054AFFA /* oumei.json */; }; - E31D91562429BE3D0054AFFA /* tianmei.json in Resources */ = {isa = PBXBuildFile; fileRef = E31D914C2429BE3D0054AFFA /* tianmei.json */; }; - E31D91572429BE3D0054AFFA /* xinggan.json in Resources */ = {isa = PBXBuildFile; fileRef = E31D914D2429BE3D0054AFFA /* xinggan.json */; }; - E31D91582429BE3D0054AFFA /* linjia.json in Resources */ = {isa = PBXBuildFile; fileRef = E31D914E2429BE3D0054AFFA /* linjia.json */; }; - E3226451225F083F003A6182 /* xiandai_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226447225F083F003A6182 /* xiandai_ztt_fu.bundle */; }; - E3226452225F083F003A6182 /* ice_lm_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226448225F083F003A6182 /* ice_lm_fu.bundle */; }; - E3226455225F083F003A6182 /* sea_lm_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322644B225F083F003A6182 /* sea_lm_fu.bundle */; }; - E3226458225F083F003A6182 /* hez_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322644E225F083F003A6182 /* hez_ztt_fu.bundle */; }; - E3226459225F083F003A6182 /* gufeng_zh_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322644F225F083F003A6182 /* gufeng_zh_fu.bundle */; }; - E3226466225F097F003A6182 /* luhantongkuan_ztt_fu.png in Resources */ = {isa = PBXBuildFile; fileRef = E322645A225F097E003A6182 /* luhantongkuan_ztt_fu.png */; }; - E3226467225F097F003A6182 /* luhantongkuan_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322645B225F097E003A6182 /* luhantongkuan_ztt_fu.bundle */; }; - E3226468225F097F003A6182 /* sdx2.png in Resources */ = {isa = PBXBuildFile; fileRef = E322645C225F097E003A6182 /* sdx2.png */; }; - E3226469225F097F003A6182 /* xiaobianzi_zh_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322645D225F097E003A6182 /* xiaobianzi_zh_fu.bundle */; }; - E322646A225F097F003A6182 /* xiaoxueshen_ztt_fu.png in Resources */ = {isa = PBXBuildFile; fileRef = E322645E225F097E003A6182 /* xiaoxueshen_ztt_fu.png */; }; - E322646B225F097F003A6182 /* qingqing_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322645F225F097E003A6182 /* qingqing_ztt_fu.bundle */; }; - E322646C225F097F003A6182 /* sdx2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226460225F097E003A6182 /* sdx2.bundle */; }; - E322646D225F097F003A6182 /* future_warrior.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226461225F097E003A6182 /* future_warrior.bundle */; }; - E322646E225F097F003A6182 /* future_warrior.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226462225F097E003A6182 /* future_warrior.png */; }; - E322646F225F097F003A6182 /* qingqing_ztt_fu.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226463225F097F003A6182 /* qingqing_ztt_fu.png */; }; - E3226470225F097F003A6182 /* xiaobianzi_zh_fu.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226464225F097F003A6182 /* xiaobianzi_zh_fu.png */; }; - E3226471225F097F003A6182 /* xiaoxueshen_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226465225F097F003A6182 /* xiaoxueshen_ztt_fu.bundle */; }; - E3226474225F0B8C003A6182 /* ssd_thread_korheart.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226472225F0B8C003A6182 /* ssd_thread_korheart.png */; }; - E3226475225F0B8C003A6182 /* ssd_thread_korheart.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226473225F0B8C003A6182 /* ssd_thread_korheart.bundle */; }; - E3226488225F0CCB003A6182 /* bluebird.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226476225F0CCA003A6182 /* bluebird.png */; }; - E3226489225F0CCB003A6182 /* baozi.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226477225F0CCA003A6182 /* baozi.png */; }; - E322648A225F0CCB003A6182 /* tiger_huang.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226478225F0CCA003A6182 /* tiger_huang.bundle */; }; - E322648B225F0CCB003A6182 /* tiger.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226479225F0CCA003A6182 /* tiger.bundle */; }; - E322648C225F0CCB003A6182 /* tiger.png in Resources */ = {isa = PBXBuildFile; fileRef = E322647A225F0CCA003A6182 /* tiger.png */; }; - E322648D225F0CCB003A6182 /* xiongmao.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322647B225F0CCA003A6182 /* xiongmao.bundle */; }; - E322648E225F0CCB003A6182 /* bluebird.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322647C225F0CCA003A6182 /* bluebird.bundle */; }; - E322648F225F0CCB003A6182 /* xiongmao.png in Resources */ = {isa = PBXBuildFile; fileRef = E322647D225F0CCA003A6182 /* xiongmao.png */; }; - E3226490225F0CCB003A6182 /* baozi.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322647E225F0CCA003A6182 /* baozi.bundle */; }; - E3226491225F0CCB003A6182 /* lanhudie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322647F225F0CCA003A6182 /* lanhudie.bundle */; }; - E3226492225F0CCB003A6182 /* tiger_huang.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226480225F0CCA003A6182 /* tiger_huang.png */; }; - E3226493225F0CCB003A6182 /* lanhudie.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226481225F0CCA003A6182 /* lanhudie.png */; }; - E3226495225F0CCB003A6182 /* fenhudie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226483225F0CCA003A6182 /* fenhudie.bundle */; }; - E3226497225F0CCB003A6182 /* tiger_bai.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3226485225F0CCB003A6182 /* tiger_bai.bundle */; }; - E3226498225F0CCB003A6182 /* fenhudie.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226486225F0CCB003A6182 /* fenhudie.png */; }; - E3226499225F0CCB003A6182 /* tiger_bai.png in Resources */ = {isa = PBXBuildFile; fileRef = E3226487225F0CCB003A6182 /* tiger_bai.png */; }; - E322649C225F6CB7003A6182 /* jet_mask.png in Resources */ = {isa = PBXBuildFile; fileRef = E322649A225F6CB7003A6182 /* jet_mask.png */; }; - E322649D225F6CB7003A6182 /* jet_mask.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E322649B225F6CB7003A6182 /* jet_mask.bundle */; }; - E32D08DD2875608200884AE5 /* FUHomepageModuleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E32D08DC2875608200884AE5 /* FUHomepageModuleCell.m */; }; - E334038922A1022100D56810 /* FUColourView.m in Sources */ = {isa = PBXBuildFile; fileRef = E334038822A1022100D56810 /* FUColourView.m */; }; - E334038C22A10BE900D56810 /* FUColourFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = E334038B22A10BE900D56810 /* FUColourFlowLayout.m */; }; - E33835082862DD780023482D /* ai_human_processor_gpu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E33835052862DD770023482D /* ai_human_processor_gpu.bundle */; }; - E34202C52885033B0016DC9E /* mu_style_eyebrow_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E34202C12885033A0016DC9E /* mu_style_eyebrow_02.bundle */; }; - E34202C62885033B0016DC9E /* mu_style_eyebrow_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E34202C22885033A0016DC9E /* mu_style_eyebrow_01.bundle */; }; - E34202C72885033B0016DC9E /* mu_style_eyebrow_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E34202C32885033A0016DC9E /* mu_style_eyebrow_04.bundle */; }; - E34202C82885033B0016DC9E /* mu_style_eyebrow_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E34202C42885033A0016DC9E /* mu_style_eyebrow_03.bundle */; }; - E34202E7288532090016DC9E /* FUStickerRenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E34202E6288532090016DC9E /* FUStickerRenderMediaViewController.m */; }; - E342A82A23D0073900DC0464 /* chuqiu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951323CC6EBD000D1695 /* chuqiu.bundle */; }; - E34378A624EE3EF40040B94A /* green_screen.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E34378A524EE3EF30040B94A /* green_screen.bundle */; }; - E3447EA628C203A7008E164C /* FURenderKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3447EA428C203A2008E164C /* FURenderKit.framework */; }; - E3447EA728C203A7008E164C /* FURenderKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3447EA428C203A2008E164C /* FURenderKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - E3447F0828C61B88008E164C /* FUVideoComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3447F0728C61B7C008E164C /* FUVideoComponent.framework */; }; - E3447F0928C61B88008E164C /* FUVideoComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3447F0728C61B7C008E164C /* FUVideoComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - E346BFDB270413170090F3B3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E346BFDA270413160090F3B3 /* Assets.xcassets */; }; - E346BFE02704191F0090F3B3 /* dongling.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFDC2704191F0090F3B3 /* dongling.bundle */; }; - E346BFE12704191F0090F3B3 /* diadiatu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFDD2704191F0090F3B3 /* diadiatu.bundle */; }; - E346BFE22704191F0090F3B3 /* guofeng.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFDE2704191F0090F3B3 /* guofeng.bundle */; }; - E346BFE32704191F0090F3B3 /* hunxie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFDF2704191F0090F3B3 /* hunxie.bundle */; }; - E346BFE8270419380090F3B3 /* guofeng.json in Resources */ = {isa = PBXBuildFile; fileRef = E346BFE4270419370090F3B3 /* guofeng.json */; }; - E346BFE9270419380090F3B3 /* hunxie.json in Resources */ = {isa = PBXBuildFile; fileRef = E346BFE5270419370090F3B3 /* hunxie.json */; }; - E346BFEA270419380090F3B3 /* diadiatu.json in Resources */ = {isa = PBXBuildFile; fileRef = E346BFE6270419370090F3B3 /* diadiatu.json */; }; - E346BFEB270419380090F3B3 /* dongling.json in Resources */ = {isa = PBXBuildFile; fileRef = E346BFE7270419370090F3B3 /* dongling.json */; }; - E346BFF627044DF20090F3B3 /* mu_style_lip_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFF127044DF20090F3B3 /* mu_style_lip_03.bundle */; }; - E346BFF727044DF20090F3B3 /* mu_style_lip_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFF227044DF20090F3B3 /* mu_style_lip_01.bundle */; }; - E346BFF827044DF20090F3B3 /* mu_style_lip_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFF327044DF20090F3B3 /* mu_style_lip_05.bundle */; }; - E346BFF927044DF20090F3B3 /* mu_style_lip_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFF427044DF20090F3B3 /* mu_style_lip_02.bundle */; }; - E346BFFA27044DF20090F3B3 /* mu_style_lip_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E346BFF527044DF20090F3B3 /* mu_style_lip_04.bundle */; }; - E3583E852711422F008E52A7 /* FULandmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E3583E842711422F008E52A7 /* FULandmarkManager.m */; }; - E3583E8927117458008E52A7 /* landmarks.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3583E8827117458008E52A7 /* landmarks.bundle */; }; - E35AE65C2226709C0076C375 /* FUAPIDemoBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = E35AE63A2226709C0076C375 /* FUAPIDemoBar.xib */; }; - E35AE6602226709C0076C375 /* FUBeautyView.m in Sources */ = {isa = PBXBuildFile; fileRef = E35AE6432226709C0076C375 /* FUBeautyView.m */; }; - E35AE6632226709C0076C375 /* FUFilterView.m in Sources */ = {isa = PBXBuildFile; fileRef = E35AE64A2226709C0076C375 /* FUFilterView.m */; }; - E35AE6682226709C0076C375 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E35AE6532226709C0076C375 /* Media.xcassets */; }; - E35AE66B2226709C0076C375 /* UIImage+demobar.m in Sources */ = {isa = PBXBuildFile; fileRef = E35AE6592226709C0076C375 /* UIImage+demobar.m */; }; - E36055AE27424A4E000C4421 /* FUMakeupManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E36055AD27424A4E000C4421 /* FUMakeupManager.m */; }; - E3618FE12857307C00E7D8D2 /* FUPersistentBeautyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3618FE02857307C00E7D8D2 /* FUPersistentBeautyModel.m */; }; - E3618FF4285867A000E7D8D2 /* FUMakeupRenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3618FF3285867A000E7D8D2 /* FUMakeupRenderMediaViewController.m */; }; - E361CF90283DBDAA00AC1F4C /* ai_human_processor.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E361CF8F283DBDAA00AC1F4C /* ai_human_processor.bundle */; }; - E364E7D0268DA8EF008B6697 /* kaola_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E364E7CE268DA8EF008B6697 /* kaola_Animoji.bundle */; }; - E364E7D1268DA8EF008B6697 /* kaola_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = E364E7CF268DA8EF008B6697 /* kaola_Animoji.png */; }; - E3677127273D13420060E564 /* FUCombinationMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3677126273D13420060E564 /* FUCombinationMakeupModel.m */; }; - E367712A273E05B50060E564 /* FUSingleMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3677129273E05B50060E564 /* FUSingleMakeupModel.m */; }; - E3677130273E45850060E564 /* FUMakeupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E367712F273E45850060E564 /* FUMakeupViewController.m */; }; - E3677133273E45E50060E564 /* FUCombinationMakeupView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3677132273E45E50060E564 /* FUCombinationMakeupView.m */; }; - E3706F46216B3AE6004BFC7F /* FUPosterCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3706F45216B3AE6004BFC7F /* FUPosterCell.m */; }; - E3706F4C216B4DDC004BFC7F /* FUPosterListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3706F4A216B4DDC004BFC7F /* FUPosterListViewController.m */; }; - E3706F4D216B4DDC004BFC7F /* FUPosterListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3706F4B216B4DDC004BFC7F /* FUPosterListViewController.xib */; }; - E3706F4F216B4E4E004BFC7F /* FUPosterCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3706F4E216B4E4E004BFC7F /* FUPosterCell.xib */; }; - E3706F53216B68B1004BFC7F /* FUSaveViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3706F51216B68B1004BFC7F /* FUSaveViewController.m */; }; - E3706F54216B68B1004BFC7F /* FUSaveViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3706F52216B68B1004BFC7F /* FUSaveViewController.xib */; }; - E3706F58216C304C004BFC7F /* FUEditImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3706F56216C304C004BFC7F /* FUEditImageViewController.m */; }; - E3706F59216C304C004BFC7F /* FUEditImageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3706F57216C304C004BFC7F /* FUEditImageViewController.xib */; }; - E3706F6E216ED9E1004BFC7F /* loading.gif in Resources */ = {isa = PBXBuildFile; fileRef = E3706F6D216ED9E1004BFC7F /* loading.gif */; }; - E3728B912303F05B00B1B9BF /* qgirl_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3728B8F2303F05B00B1B9BF /* qgirl_Animoji.bundle */; }; - E3728B922303F05B00B1B9BF /* qgirl_Animoji.png in Resources */ = {isa = PBXBuildFile; fileRef = E3728B902303F05B00B1B9BF /* qgirl_Animoji.png */; }; - E3731236287BC02C004A465A /* boyfriend3_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3731233287BC02B004A465A /* boyfriend3_740.bundle */; }; - E3731237287BC02C004A465A /* boyfriend1_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3731234287BC02C004A465A /* boyfriend1_740.bundle */; }; - E3731238287BC02C004A465A /* boyfriend2_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3731235287BC02C004A465A /* boyfriend2_740.bundle */; }; - E373123A287BC033004A465A /* human_outline_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3731239287BC033004A465A /* human_outline_740.bundle */; }; - E374C005288548D700931142 /* FUARMaskViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C004288548D700931142 /* FUARMaskViewModel.m */; }; - E374C00828854AF500931142 /* FUARMaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C00728854AF500931142 /* FUARMaskViewController.m */; }; - E374C00E28854DE400931142 /* FUHilariousViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C00D28854DE400931142 /* FUHilariousViewController.m */; }; - E374C0572886627200931142 /* FUExpressionRecognitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C0562886627200931142 /* FUExpressionRecognitionViewController.m */; }; - E374C06C2886838900931142 /* FUDistortingMirrorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C06A2886838900931142 /* FUDistortingMirrorViewController.m */; }; - E374C06F2886839000931142 /* FUDistortingMirrorViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C06D2886839000931142 /* FUDistortingMirrorViewModel.m */; }; - E374C0752886840200931142 /* FUExpressionRecognitionViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C0732886840200931142 /* FUExpressionRecognitionViewModel.m */; }; - E374C0782886842B00931142 /* FUHilariousViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C0762886842B00931142 /* FUHilariousViewModel.m */; }; - E374C07B288684C500931142 /* FUGestureRecognitionViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C079288684C500931142 /* FUGestureRecognitionViewModel.m */; }; - E374C07E288684D000931142 /* FUGestureRecognitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C07D288684D000931142 /* FUGestureRecognitionViewController.m */; }; - E377439C2513663500682A2D /* hotStamping.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E37743972513663400682A2D /* hotStamping.mp4 */; }; - E377439F2513663500682A2D /* inkPainting.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E377439A2513663500682A2D /* inkPainting.mp4 */; }; - E37743A02513663500682A2D /* springForest.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E377439B2513663500682A2D /* springForest.mp4 */; }; - E37743A22513665B00682A2D /* beach.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E37743A12513665B00682A2D /* beach.mp4 */; }; - E37743A42513666400682A2D /* classroom.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E37743A32513666400682A2D /* classroom.mp4 */; }; - E379ED71223644B20080BD04 /* makeup_whole.json in Resources */ = {isa = PBXBuildFile; fileRef = E379ED70223644B20080BD04 /* makeup_whole.json */; }; - E37B0B4E218147BA00066133 /* ctrl_rain.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37B0B4D218147B700066133 /* ctrl_rain.bundle */; }; - E37B0B50218147CE00066133 /* ctrl_snow.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37B0B4F218147CE00066133 /* ctrl_snow.bundle */; }; - E37B0B52218147E200066133 /* ctrl_flower.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37B0B51218147E200066133 /* ctrl_flower.bundle */; }; - E37B0B5421814AF200066133 /* ctrl_flower.png in Resources */ = {isa = PBXBuildFile; fileRef = E37B0B5321814AF200066133 /* ctrl_flower.png */; }; - E37B0B5621814AFA00066133 /* ctrl_rain.png in Resources */ = {isa = PBXBuildFile; fileRef = E37B0B5521814AFA00066133 /* ctrl_rain.png */; }; - E37B0B5821814AFF00066133 /* ctrl_snow.png in Resources */ = {isa = PBXBuildFile; fileRef = E37B0B5721814AFF00066133 /* ctrl_snow.png */; }; - E37CBD9621FFE728000C9C42 /* FUHeadButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = E37CBD9521FFE728000C9C42 /* FUHeadButtonView.m */; }; - E37CBDA722029EF0000C9C42 /* FUPosterController.m in Sources */ = {isa = PBXBuildFile; fileRef = E37CBDA622029EF0000C9C42 /* FUPosterController.m */; }; - E37CBDAB2202C937000C9C42 /* FUAnimojiController.m in Sources */ = {isa = PBXBuildFile; fileRef = E37CBDAA2202C937000C9C42 /* FUAnimojiController.m */; }; - E37D20B62754A472007BE062 /* FULightMakeupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E37D20B52754A472007BE062 /* FULightMakeupCell.m */; }; - E37E54F428729A01002952A1 /* FUHomepageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E37E54F328729A01002952A1 /* FUHomepageViewController.m */; }; - E37E54F728729A38002952A1 /* FUHomepageViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E37E54F628729A38002952A1 /* FUHomepageViewModel.m */; }; - E37E54FA28729BC3002952A1 /* FUHomepageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E37E54F928729BC3002952A1 /* FUHomepageModel.m */; }; - E37E55092872BD11002952A1 /* homepage_data_source.json in Resources */ = {isa = PBXBuildFile; fileRef = E37E55082872BD11002952A1 /* homepage_data_source.json */; }; - E37ED5F0282A4500004E6A0B /* ai_face_recognizer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5DF282A44FF004E6A0B /* ai_face_recognizer.bundle */; }; - E37ED5F1282A4500004E6A0B /* ai_hand_processor.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E0282A44FF004E6A0B /* ai_hand_processor.bundle */; }; - E37ED5F2282A4500004E6A0B /* ai_face_processor.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E1282A44FF004E6A0B /* ai_face_processor.bundle */; }; - E37ED5F3282A4500004E6A0B /* ai_bgseg_green.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E2282A44FF004E6A0B /* ai_bgseg_green.bundle */; }; - E37ED5F4282A4500004E6A0B /* ai_face_processor_lite.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E3282A44FF004E6A0B /* ai_face_processor_lite.bundle */; }; - E37ED5F7282A4500004E6A0B /* tongue.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E7282A44FF004E6A0B /* tongue.bundle */; }; - E37ED5F8282A4500004E6A0B /* fxaa.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E8282A44FF004E6A0B /* fxaa.bundle */; }; - E37ED5F9282A4500004E6A0B /* face_makeup.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5E9282A44FF004E6A0B /* face_makeup.bundle */; }; - E37ED5FA282A4500004E6A0B /* controller_cpp.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5EA282A44FF004E6A0B /* controller_cpp.bundle */; }; - E37ED5FB282A4500004E6A0B /* body_slim.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5EB282A44FF004E6A0B /* body_slim.bundle */; }; - E37ED5FC282A4500004E6A0B /* fuzzytoonfilter.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5EC282A44FF004E6A0B /* fuzzytoonfilter.bundle */; }; - E37ED5FD282A4500004E6A0B /* face_beautification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E37ED5ED282A44FF004E6A0B /* face_beautification.bundle */; }; - E37FF63922F3E6A80014821C /* FUPositionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E37FF63822F3E6A80014821C /* FUPositionInfo.m */; }; - E37FF63B22F3E82F0014821C /* BodyBeautyDefault.json in Resources */ = {isa = PBXBuildFile; fileRef = E37FF63A22F3E82F0014821C /* BodyBeautyDefault.json */; }; - E37FF63E22F3EA560014821C /* FUBodyBeautyView.m in Sources */ = {isa = PBXBuildFile; fileRef = E37FF63D22F3EA560014821C /* FUBodyBeautyView.m */; }; - E37FF64122F404820014821C /* FUPositionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E37FF64022F404820014821C /* FUPositionCell.m */; }; - E3833EC323150782007D3A47 /* FUSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = E3833EC223150782007D3A47 /* FUSwitch.m */; }; - E384F1B0277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E384F1AF277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.m */; }; - E386784E28813F8F005A94A4 /* FUStickerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E386784D28813F8F005A94A4 /* FUStickerViewModel.m */; }; - E386785A288147DA005A94A4 /* FUStickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3867859288147DA005A94A4 /* FUStickerViewController.m */; }; - E38A62D924A0D181006F4465 /* FUBodyCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E38A62D824A0D181006F4465 /* FUBodyCollectionView.m */; }; - E38A679B23CDA1E600AD9DD0 /* FUManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B5A0D312021917F00AAD47D /* FUManager.m */; }; - E38A67D723CF1E9E00AD9DD0 /* mu_style_blush_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67D223CF1E9D00AD9DD0 /* mu_style_blush_02.bundle */; }; - E38A67D823CF1E9E00AD9DD0 /* mu_style_blush_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67D323CF1E9D00AD9DD0 /* mu_style_blush_04.bundle */; }; - E38A67D923CF1E9E00AD9DD0 /* mu_style_blush_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67D423CF1E9D00AD9DD0 /* mu_style_blush_01.bundle */; }; - E38A67DA23CF1E9E00AD9DD0 /* mu_style_blush_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67D523CF1E9D00AD9DD0 /* mu_style_blush_03.bundle */; }; - E38A67DB23CF1E9E00AD9DD0 /* mu_style_blush_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67D623CF1E9D00AD9DD0 /* mu_style_blush_05.bundle */; }; - E38A67DD23CF1EB800AD9DD0 /* mu_style_foundation_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67DC23CF1EB800AD9DD0 /* mu_style_foundation_01.bundle */; }; - E38A67E023CF1ECB00AD9DD0 /* mu_style_highlight_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67DE23CF1ECA00AD9DD0 /* mu_style_highlight_01.bundle */; }; - E38A67E123CF1ECB00AD9DD0 /* mu_style_highlight_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67DF23CF1ECB00AD9DD0 /* mu_style_highlight_02.bundle */; }; - E38A67E823CF1EE300AD9DD0 /* mu_style_eyelash_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67E223CF1EE200AD9DD0 /* mu_style_eyelash_06.bundle */; }; - E38A67E923CF1EE300AD9DD0 /* mu_style_eyelash_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67E323CF1EE300AD9DD0 /* mu_style_eyelash_02.bundle */; }; - E38A67EA23CF1EE300AD9DD0 /* mu_style_eyelash_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67E423CF1EE300AD9DD0 /* mu_style_eyelash_03.bundle */; }; - E38A67EB23CF1EE300AD9DD0 /* mu_style_eyelash_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67E523CF1EE300AD9DD0 /* mu_style_eyelash_01.bundle */; }; - E38A67EC23CF1EE300AD9DD0 /* mu_style_eyelash_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67E623CF1EE300AD9DD0 /* mu_style_eyelash_04.bundle */; }; - E38A67ED23CF1EE300AD9DD0 /* mu_style_eyelash_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67E723CF1EE300AD9DD0 /* mu_style_eyelash_05.bundle */; }; - E38A67F923CF1F3E00AD9DD0 /* mu_style_eyeliner_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F223CF1F3D00AD9DD0 /* mu_style_eyeliner_06.bundle */; }; - E38A67FA23CF1F3E00AD9DD0 /* mu_style_eyeliner_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F323CF1F3D00AD9DD0 /* mu_style_eyeliner_03.bundle */; }; - E38A67FB23CF1F3E00AD9DD0 /* mu_style_eyeliner_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F423CF1F3D00AD9DD0 /* mu_style_eyeliner_01.bundle */; }; - E38A67FC23CF1F3E00AD9DD0 /* mu_style_eyeliner_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F523CF1F3D00AD9DD0 /* mu_style_eyeliner_04.bundle */; }; - E38A67FD23CF1F3E00AD9DD0 /* mu_style_eyeliner_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F623CF1F3D00AD9DD0 /* mu_style_eyeliner_02.bundle */; }; - E38A67FE23CF1F3E00AD9DD0 /* mu_style_eyeliner_07.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F723CF1F3D00AD9DD0 /* mu_style_eyeliner_07.bundle */; }; - E38A67FF23CF1F3E00AD9DD0 /* mu_style_eyeliner_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A67F823CF1F3E00AD9DD0 /* mu_style_eyeliner_05.bundle */; }; - E38A680823CF1F7800AD9DD0 /* mu_style_eyeshadow_08.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680023CF1F7700AD9DD0 /* mu_style_eyeshadow_08.bundle */; }; - E38A680923CF1F7800AD9DD0 /* mu_style_eyeshadow_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680123CF1F7700AD9DD0 /* mu_style_eyeshadow_01.bundle */; }; - E38A680A23CF1F7800AD9DD0 /* mu_style_eyeshadow_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680223CF1F7700AD9DD0 /* mu_style_eyeshadow_02.bundle */; }; - E38A680B23CF1F7800AD9DD0 /* mu_style_eyeshadow_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680323CF1F7800AD9DD0 /* mu_style_eyeshadow_06.bundle */; }; - E38A680C23CF1F7800AD9DD0 /* mu_style_eyeshadow_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680423CF1F7800AD9DD0 /* mu_style_eyeshadow_05.bundle */; }; - E38A680D23CF1F7800AD9DD0 /* mu_style_eyeshadow_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680523CF1F7800AD9DD0 /* mu_style_eyeshadow_04.bundle */; }; - E38A680E23CF1F7800AD9DD0 /* mu_style_eyeshadow_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680623CF1F7800AD9DD0 /* mu_style_eyeshadow_03.bundle */; }; - E38A680F23CF1F7800AD9DD0 /* mu_style_eyeshadow_07.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A680723CF1F7800AD9DD0 /* mu_style_eyeshadow_07.bundle */; }; - E38A681123CF1F9200AD9DD0 /* mu_style_contour_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38A681023CF1F9200AD9DD0 /* mu_style_contour_01.bundle */; }; - E38CA9CD2823ABB400414FCA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E38CA9CC2823ABB400414FCA /* AppDelegate.m */; }; - E38D2F3924A07D760069AA0A /* anim_idle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E38D2F3824A07D760069AA0A /* anim_idle.bundle */; }; - E39944C426C250BE003E4EFA /* FUSafeAreaCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E39944C326C250BE003E4EFA /* FUSafeAreaCollectionView.m */; }; - E39944D926C29492003E4EFA /* FUGreenScreenSafeAreaModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E39944D826C29492003E4EFA /* FUGreenScreenSafeAreaModel.m */; }; - E39944EF26C3B5BA003E4EFA /* safe_area_2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E39944ED26C3B5BA003E4EFA /* safe_area_2.jpg */; }; - E39944F026C3B5BA003E4EFA /* safe_area_1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E39944EE26C3B5BA003E4EFA /* safe_area_1.jpg */; }; - E39B803E242A18D900E837E0 /* mu_eyebrow_01.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B803D242A18D900E837E0 /* mu_eyebrow_01.png */; }; - E39B8040242A192100E837E0 /* mu_blush_01.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B803F242A192100E837E0 /* mu_blush_01.png */; }; - E39B8042242A192B00E837E0 /* mu_blush_23.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8041242A192A00E837E0 /* mu_blush_23.png */; }; - E39B8044242A194200E837E0 /* mu_blush_20.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8043242A194200E837E0 /* mu_blush_20.png */; }; - E39B8046242A194700E837E0 /* mu_blush_22.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8045242A194700E837E0 /* mu_blush_22.png */; }; - E39B804B242A197500E837E0 /* mu_eyebrow_17.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8047242A197500E837E0 /* mu_eyebrow_17.png */; }; - E39B804C242A197500E837E0 /* mu_eyebrow_18.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8048242A197500E837E0 /* mu_eyebrow_18.png */; }; - E39B804D242A197500E837E0 /* mu_eyebrow_16.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8049242A197500E837E0 /* mu_eyebrow_16.png */; }; - E39B804E242A197500E837E0 /* mu_eyebrow_19.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B804A242A197500E837E0 /* mu_eyebrow_19.png */; }; - E39B8050242A19AD00E837E0 /* mu_eyeshadow_01.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B804F242A19AD00E837E0 /* mu_eyeshadow_01.png */; }; - E39B8055242A19B900E837E0 /* mu_eyeshadow_19.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8051242A19B900E837E0 /* mu_eyeshadow_19.png */; }; - E39B8056242A19B900E837E0 /* mu_eyeshadow_21.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8052242A19B900E837E0 /* mu_eyeshadow_21.png */; }; - E39B8057242A19B900E837E0 /* mu_eyeshadow_18.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8053242A19B900E837E0 /* mu_eyeshadow_18.png */; }; - E39B8058242A19B900E837E0 /* mu_eyeshadow_20.png in Resources */ = {isa = PBXBuildFile; fileRef = E39B8054242A19B900E837E0 /* mu_eyeshadow_20.png */; }; - E39CF9482499F9E8003A6C14 /* FUBodyAvatarController.m in Sources */ = {isa = PBXBuildFile; fileRef = E39CF9472499F9E8003A6C14 /* FUBodyAvatarController.m */; }; - E39CF96B249A030A003A6C14 /* lipgloss_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF94A249A0307003A6C14 /* lipgloss_1@3x.png */; }; - E39CF96C249A030A003A6C14 /* female_hair_23.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF94B249A0307003A6C14 /* female_hair_23.bundle */; }; - E39CF96D249A030A003A6C14 /* xiezi_danxie@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF94C249A0307003A6C14 /* xiezi_danxie@3x.png */; }; - E39CF96E249A030A003A6C14 /* Eyeliner_1.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF94D249A0307003A6C14 /* Eyeliner_1.bundle */; }; - E39CF96F249A030A003A6C14 /* facemakeup_3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF94E249A0307003A6C14 /* facemakeup_3.bundle */; }; - E39CF970249A030A003A6C14 /* taozhuang_12.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF94F249A0307003A6C14 /* taozhuang_12.bundle */; }; - E39CF971249A030A003A6C14 /* Eyelash_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF950249A0307003A6C14 /* Eyelash_1@3x.png */; }; - E39CF972249A030A003A6C14 /* lipgloss_1.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF951249A0307003A6C14 /* lipgloss_1.bundle */; }; - E39CF973249A030A003A6C14 /* Eyeshadow_4.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF952249A0307003A6C14 /* Eyeshadow_4.bundle */; }; - E39CF974249A030A003A6C14 /* toushi_5@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF953249A0307003A6C14 /* toushi_5@3x.png */; }; - E39CF975249A030A003A6C14 /* headnv.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF954249A0307003A6C14 /* headnv.bundle */; }; - E39CF976249A030A003A6C14 /* midBody_female.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF955249A0307003A6C14 /* midBody_female.bundle */; }; - E39CF977249A030A003A6C14 /* Eyeshadow_4@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF956249A0307003A6C14 /* Eyeshadow_4@3x.png */; }; - E39CF978249A030A003A6C14 /* toushi_5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF957249A0307003A6C14 /* toushi_5.bundle */; }; - E39CF979249A030A003A6C14 /* taozhuang_12@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF958249A0307003A6C14 /* taozhuang_12@3x.png */; }; - E39CF97A249A030A003A6C14 /* Eyeliner_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF959249A0307003A6C14 /* Eyeliner_1@3x.png */; }; - E39CF97B249A030A003A6C14 /* facemakeup_3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF95A249A0307003A6C14 /* facemakeup_3@3x.png */; }; - E39CF97C249A030A003A6C14 /* xiezi_danxie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF95B249A0307003A6C14 /* xiezi_danxie.bundle */; }; - E39CF97D249A030A003A6C14 /* eyelash_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF95C249A0307003A6C14 /* eyelash_01.bundle */; }; - E39CF97E249A030A003A6C14 /* male_hair_5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF95E249A030A003A6C14 /* male_hair_5.bundle */; }; - E39CF97F249A030A003A6C14 /* xiezi_tuoxie_2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF95F249A030A003A6C14 /* xiezi_tuoxie_2.bundle */; }; - E39CF980249A030A003A6C14 /* toushi_7@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF960249A030A003A6C14 /* toushi_7@3x.png */; }; - E39CF981249A030A003A6C14 /* peishi_erding_2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF961249A030A003A6C14 /* peishi_erding_2.bundle */; }; - E39CF982249A030A003A6C14 /* kuzi_changku_5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF962249A030A003A6C14 /* kuzi_changku_5.bundle */; }; - E39CF983249A030A003A6C14 /* waitao_3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF963249A030A003A6C14 /* waitao_3@3x.png */; }; - E39CF984249A030A003A6C14 /* headnan.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF964249A030A003A6C14 /* headnan.bundle */; }; - E39CF985249A030A003A6C14 /* toushi_7.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF965249A030A003A6C14 /* toushi_7.bundle */; }; - E39CF986249A030A003A6C14 /* peishi_erding_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF966249A030A003A6C14 /* peishi_erding_2@3x.png */; }; - E39CF987249A030A003A6C14 /* kuzi_changku_5@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF967249A030A003A6C14 /* kuzi_changku_5@3x.png */; }; - E39CF988249A030A003A6C14 /* waitao_3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF968249A030A003A6C14 /* waitao_3.bundle */; }; - E39CF989249A030A003A6C14 /* xiezi_tuoxie_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF969249A030A003A6C14 /* xiezi_tuoxie_2@3x.png */; }; - E39CF98A249A030A003A6C14 /* midBody_male.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF96A249A030A003A6C14 /* midBody_male.bundle */; }; - E39CF98C249A117B003A6C14 /* controller_config.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF98B249A117B003A6C14 /* controller_config.bundle */; }; - E39CF98E249A1187003A6C14 /* default_bg.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF98D249A1187003A6C14 /* default_bg.bundle */; }; - E39CF992249A1DB4003A6C14 /* avatar_nv_image.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF991249A1DB4003A6C14 /* avatar_nv_image.png */; }; - E39CF994249A1DBD003A6C14 /* avatar_nan_image.png in Resources */ = {isa = PBXBuildFile; fileRef = E39CF993249A1DBD003A6C14 /* avatar_nan_image.png */; }; - E39CF99A249A39F4003A6C14 /* big_head_facewarp5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF996249A39F0003A6C14 /* big_head_facewarp5.bundle */; }; - E39CF99B249A39F4003A6C14 /* big_head_facewarp6.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF997249A39F1003A6C14 /* big_head_facewarp6.bundle */; }; - E39CF99C249A39F4003A6C14 /* big_head_facewarp4.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF998249A39F3003A6C14 /* big_head_facewarp4.bundle */; }; - E39CF99D249A39F4003A6C14 /* big_head_facewarp2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39CF999249A39F4003A6C14 /* big_head_facewarp2.bundle */; }; - E39E1B13222D0F49008F76A4 /* makeup.json in Resources */ = {isa = PBXBuildFile; fileRef = E39E1B12222D0F49008F76A4 /* makeup.json */; }; - E3A74CE6224B24AF0058E1EE /* light_makeup.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A74CE5224B24AA0058E1EE /* light_makeup.bundle */; }; - E3B3D0F12350A99000263116 /* FUPopupMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = E3B3D0F02350A99000263116 /* FUPopupMenu.m */; }; - E3B3D7682761AF4700FF0FAC /* FUBeautyRenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3B3D7672761AF4700FF0FAC /* FUBeautyRenderMediaViewController.m */; }; - E3B3D7702761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3B3D76F2761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.m */; }; - E3B51FF3275F43490098314E /* FURenderMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3B51FF2275F43490098314E /* FURenderMediaViewController.m */; }; - E3BE2B7B274B6389001679AD /* FUMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3BE2B7A274B6389001679AD /* FUMakeupModel.m */; }; - E3BEE31C26BA8831001220D1 /* UIView+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = E3BEE31B26BA8831001220D1 /* UIView+FU.m */; }; - E3C14DDC22ADFE7D004C20C4 /* lightMakeup.json in Resources */ = {isa = PBXBuildFile; fileRef = E3C14DDB22ADFE7D004C20C4 /* lightMakeup.json */; }; - E3C4889F2485EB050070D88E /* FUHomepageHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C4889D2485EB050070D88E /* FUHomepageHeaderView.m */; }; - E3C8875423C4771E00CA732C /* FUSelectedImageController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B5B9F3920E9C17F00FF7789 /* FUSelectedImageController.m */; }; - E3C8875823C479EA00CA732C /* FUBeautyParam.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C8875723C479EA00CA732C /* FUBeautyParam.m */; }; - E3C8875B23C47AEC00CA732C /* FUAPIDemoBar.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C8875923C47AEC00CA732C /* FUAPIDemoBar.m */; }; - E3CB951C23CC6EBF000D1695 /* jianling.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950123CC6EBC000D1695 /* jianling.bundle */; }; - E3CB951D23CC6EBF000D1695 /* chaomo.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950223CC6EBC000D1695 /* chaomo.bundle */; }; - E3CB951E23CC6EBF000D1695 /* nuandong.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950323CC6EBC000D1695 /* nuandong.bundle */; }; - E3CB951F23CC6EBF000D1695 /* chuju.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950523CC6EBD000D1695 /* chuju.json */; }; - E3CB952023CC6EBF000D1695 /* Rose.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950623CC6EBD000D1695 /* Rose.json */; }; - E3CB952123CC6EBF000D1695 /* nuandong.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950723CC6EBD000D1695 /* nuandong.json */; }; - E3CB952223CC6EBF000D1695 /* qianzhihe.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950823CC6EBD000D1695 /* qianzhihe.json */; }; - E3CB952323CC6EBF000D1695 /* renyu.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950923CC6EBD000D1695 /* renyu.json */; }; - E3CB952423CC6EBF000D1695 /* yanshimao.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950A23CC6EBD000D1695 /* yanshimao.json */; }; - E3CB952523CC6EBF000D1695 /* gangfeng.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950B23CC6EBD000D1695 /* gangfeng.json */; }; - E3CB952623CC6EBF000D1695 /* chuqiu.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950C23CC6EBD000D1695 /* chuqiu.json */; }; - E3CB952723CC6EBF000D1695 /* shaonv.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950D23CC6EBD000D1695 /* shaonv.json */; }; - E3CB952823CC6EBF000D1695 /* ziyun.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950E23CC6EBD000D1695 /* ziyun.json */; }; - E3CB952923CC6EBF000D1695 /* jianling.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB950F23CC6EBD000D1695 /* jianling.json */; }; - E3CB952A23CC6EBF000D1695 /* hongfeng.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951023CC6EBD000D1695 /* hongfeng.json */; }; - E3CB952B23CC6EBF000D1695 /* chaomo.json in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951123CC6EBD000D1695 /* chaomo.json */; }; - E3CB952C23CC6EBF000D1695 /* yanshimao.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951223CC6EBD000D1695 /* yanshimao.bundle */; }; - E3CB952E23CC6EBF000D1695 /* chuju.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951423CC6EBD000D1695 /* chuju.bundle */; }; - E3CB952F23CC6EBF000D1695 /* gangfeng.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951523CC6EBE000D1695 /* gangfeng.bundle */; }; - E3CB953023CC6EBF000D1695 /* renyu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951623CC6EBE000D1695 /* renyu.bundle */; }; - E3CB953123CC6EBF000D1695 /* ziyun.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951723CC6EBE000D1695 /* ziyun.bundle */; }; - E3CB953223CC6EBF000D1695 /* shaonv.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951823CC6EBE000D1695 /* shaonv.bundle */; }; - E3CB953323CC6EBF000D1695 /* qianzhihe.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951923CC6EBE000D1695 /* qianzhihe.bundle */; }; - E3CB953423CC6EBF000D1695 /* hongfeng.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951A23CC6EBE000D1695 /* hongfeng.bundle */; }; - E3CB953523CC6EBF000D1695 /* Rose.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CB951B23CC6EBF000D1695 /* Rose.bundle */; }; - E3CE4CB126CBBDD300ED0B4E /* docs in Resources */ = {isa = PBXBuildFile; fileRef = E3CE4CB026CBBDD300ED0B4E /* docs */; }; - E3DD0F6F2484D7FC0064CF7E /* hair_gradient.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DD0F5B2484D7FC0064CF7E /* hair_gradient.bundle */; }; - E3DD0F712484D7FC0064CF7E /* hair_normal.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DD0F5D2484D7FC0064CF7E /* hair_normal.bundle */; }; - E3DF96BC2369403D00DB49B2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E3DF96BE2369403D00DB49B2 /* InfoPlist.strings */; }; - E3EFB836249B0CEE00E2903E /* big_head_facewarp1.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3EFB834249B0CED00E2903E /* big_head_facewarp1.bundle */; }; - E3EFB837249B0CEE00E2903E /* big_head_facewarp3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3EFB835249B0CEE00E2903E /* big_head_facewarp3.bundle */; }; - E3FA7BAE2514985300D07E92 /* science.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E3FA7BAD2514985300D07E92 /* science.mp4 */; }; - FA81545D4E2DB365DE180E5B /* Pods_FULiveDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB07A208DF5E6AEABC56481E /* Pods_FULiveDemo.framework */; }; + 27BE3933B157474D17FA167D /* Pods_FULiveDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9F1F94AA483BAD589411157 /* Pods_FULiveDemo.framework */; }; + E30721C828A234A000332859 /* FUImageRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E30721C728A234A000332859 /* FUImageRenderViewModel.m */; }; + E30721CC28A2369300332859 /* FUVideoRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E30721CB28A2369300332859 /* FUVideoRenderViewModel.m */; }; + E30721D328A2545100332859 /* FUStickerImageRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E30721D228A2545100332859 /* FUStickerImageRenderViewController.m */; }; + E30721D628A2548500332859 /* FUStickerImageRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E30721D528A2548500332859 /* FUStickerImageRenderViewModel.m */; }; + E3328D9428E4705800216BDC /* test_configurations.plist in Resources */ = {isa = PBXBuildFile; fileRef = E3328D9328E4705800216BDC /* test_configurations.plist */; }; + E3381CE228DD647E005C2E57 /* SVProgressHUD+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = E3381CE128DD647E005C2E57 /* SVProgressHUD+FU.m */; }; + E3381CF528DD864F005C2E57 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3381CF428DD864F005C2E57 /* LaunchScreen.storyboard */; }; + E3406990288A730300373612 /* FURenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E340698F288A730300373612 /* FURenderViewController.m */; }; + E3406993288A76FE00373612 /* FUNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406992288A76FE00373612 /* FUNavigationController.m */; }; + E340699C288A824700373612 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E340699E288A824700373612 /* Localizable.strings */; }; + E34069A3288A836D00373612 /* UIColor+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = E34069A2288A836D00373612 /* UIColor+FU.m */; }; + E34069A7288A87D200373612 /* homepage_data_source.json in Resources */ = {isa = PBXBuildFile; fileRef = E34069A6288A87D200373612 /* homepage_data_source.json */; }; + E34069BE288A891700373612 /* tiezhi_data.json in Resources */ = {isa = PBXBuildFile; fileRef = E34069AC288A891700373612 /* tiezhi_data.json */; }; + E34069BF288A891700373612 /* 流星_00036.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069AD288A891700373612 /* 流星_00036.png */; }; + E34069C0288A891700373612 /* 流星_00037.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069AE288A891700373612 /* 流星_00037.png */; }; + E34069C1288A891700373612 /* 流星_00041.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069AF288A891700373612 /* 流星_00041.png */; }; + E34069C2288A891700373612 /* 流星_00040.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B0288A891700373612 /* 流星_00040.png */; }; + E34069C3288A891700373612 /* 流星_00042.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B1288A891700373612 /* 流星_00042.png */; }; + E34069C4288A891700373612 /* 流星_00043.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B2288A891700373612 /* 流星_00043.png */; }; + E34069C5288A891700373612 /* 流星_00047.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B3288A891700373612 /* 流星_00047.png */; }; + E34069C6288A891700373612 /* 流星_00052.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B4288A891700373612 /* 流星_00052.png */; }; + E34069C7288A891700373612 /* 流星_00046.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B5288A891700373612 /* 流星_00046.png */; }; + E34069C8288A891700373612 /* 流星_00050.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B6288A891700373612 /* 流星_00050.png */; }; + E34069C9288A891700373612 /* 流星_00044.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B7288A891700373612 /* 流星_00044.png */; }; + E34069CA288A891700373612 /* 流星_00045.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B8288A891700373612 /* 流星_00045.png */; }; + E34069CB288A891700373612 /* 流星_00051.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069B9288A891700373612 /* 流星_00051.png */; }; + E34069CC288A891700373612 /* 流星_00048.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069BA288A891700373612 /* 流星_00048.png */; }; + E34069CD288A891700373612 /* 流星_00049.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069BB288A891700373612 /* 流星_00049.png */; }; + E34069CE288A891700373612 /* 流星_00039.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069BC288A891700373612 /* 流星_00039.png */; }; + E34069CF288A891700373612 /* 流星_00038.png in Resources */ = {isa = PBXBuildFile; fileRef = E34069BD288A891700373612 /* 流星_00038.png */; }; + E34069D9288A992800373612 /* FURenderKitManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E34069D8288A992800373612 /* FURenderKitManager.m */; }; + E3406A28288AAA0600373612 /* FURenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A26288AAA0600373612 /* FURenderViewModel.m */; }; + E3406A34288AAAF600373612 /* FULightingView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A2B288AAAF500373612 /* FULightingView.m */; }; + E3406A35288AAAF600373612 /* FUHeadButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A2D288AAAF500373612 /* FUHeadButtonView.m */; }; + E3406A37288AAAF600373612 /* FULightingSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A30288AAAF600373612 /* FULightingSlider.m */; }; + E3406A38288AAAF600373612 /* FUCircleProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A32288AAAF600373612 /* FUCircleProgressView.m */; }; + E3406A40288AAB0800373612 /* FUPopupMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A3B288AAB0800373612 /* FUPopupMenu.m */; }; + E3406A41288AAB0800373612 /* FUSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = E3406A3C288AAB0800373612 /* FUSwitch.m */; }; + E3447D6628A9FDCD008E164C /* FUBeautyVideoRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D6528A9FDCD008E164C /* FUBeautyVideoRenderViewController.m */; }; + E3447D6928A9FDE7008E164C /* FUBeautyVideoRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D6828A9FDE7008E164C /* FUBeautyVideoRenderViewModel.m */; }; + E3447D6C28AA2028008E164C /* FUGreenScreenVideoRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D6B28AA2028008E164C /* FUGreenScreenVideoRenderViewController.m */; }; + E3447D6F28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D6E28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.m */; }; + E3447D8328AA4467008E164C /* FUGestureRecognitionViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D7828AA4467008E164C /* FUGestureRecognitionViewModel.m */; }; + E3447D8428AA4467008E164C /* FUGestureRecognitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D7A28AA4467008E164C /* FUGestureRecognitionViewController.m */; }; + E3447D8D28AA4887008E164C /* ctrl_rain_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447D8628AA4880008E164C /* ctrl_rain_740.bundle */; }; + E3447D8E28AA4887008E164C /* ssd_thread_cute.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447D8728AA4881008E164C /* ssd_thread_cute.bundle */; }; + E3447D8F28AA4887008E164C /* ssd_thread_six.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447D8828AA4882008E164C /* ssd_thread_six.bundle */; }; + E3447D9028AA4887008E164C /* ssd_thread_korheart.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447D8928AA4883008E164C /* ssd_thread_korheart.bundle */; }; + E3447D9228AA4887008E164C /* ctrl_flower_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447D8B28AA4886008E164C /* ctrl_flower_740.bundle */; }; + E3447D9328AA4887008E164C /* ctrl_snow_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447D8C28AA4887008E164C /* ctrl_snow_740.bundle */; }; + E3447D9928AB3A45008E164C /* FUBodyAvatarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D9828AB3A45008E164C /* FUBodyAvatarViewController.m */; }; + E3447D9C28AB3A56008E164C /* FUBodyAvatarViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447D9B28AB3A56008E164C /* FUBodyAvatarViewModel.m */; }; + E3447DBE28AB69CD008E164C /* anim_idle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DBC28AB69CC008E164C /* anim_idle.bundle */; }; + E3447DBF28AB69CD008E164C /* default_bg.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DBD28AB69CD008E164C /* default_bg.bundle */; }; + E3447DC828AB6A21008E164C /* headnv.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DC128AB6A1D008E164C /* headnv.bundle */; }; + E3447DC928AB6A21008E164C /* toushi_5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DC228AB6A1E008E164C /* toushi_5.bundle */; }; + E3447DCA28AB6A21008E164C /* midBody_female.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DC328AB6A1F008E164C /* midBody_female.bundle */; }; + E3447DCB28AB6A21008E164C /* taozhuang_12.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DC428AB6A20008E164C /* taozhuang_12.bundle */; }; + E3447DCC28AB6A21008E164C /* female_hair_23.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DC528AB6A20008E164C /* female_hair_23.bundle */; }; + E3447DCD28AB6A21008E164C /* xiezi_danxie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DC728AB6A21008E164C /* xiezi_danxie.bundle */; }; + E3447DCF28AB6A3B008E164C /* facemakeup_3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DCE28AB6A3A008E164C /* facemakeup_3.bundle */; }; + E3447DD828AB6A75008E164C /* toushi_7.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD028AB6A6F008E164C /* toushi_7.bundle */; }; + E3447DD928AB6A75008E164C /* midBody_male.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD128AB6A70008E164C /* midBody_male.bundle */; }; + E3447DDA28AB6A75008E164C /* headnan.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD228AB6A71008E164C /* headnan.bundle */; }; + E3447DDB28AB6A75008E164C /* male_hair_5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD328AB6A72008E164C /* male_hair_5.bundle */; }; + E3447DDC28AB6A75008E164C /* kuzi_changku_5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD428AB6A73008E164C /* kuzi_changku_5.bundle */; }; + E3447DDD28AB6A75008E164C /* peishi_erding_2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD528AB6A74008E164C /* peishi_erding_2.bundle */; }; + E3447DDE28AB6A75008E164C /* xiezi_tuoxie_2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD628AB6A74008E164C /* xiezi_tuoxie_2.bundle */; }; + E3447DDF28AB6A75008E164C /* waitao_3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447DD728AB6A75008E164C /* waitao_3.bundle */; }; + E3447DFD28AB7EBE008E164C /* FUSegmentationViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447DFC28AB7EBE008E164C /* FUSegmentationViewModel.m */; }; + E3447E0128AB7F1A008E164C /* FUSegmentationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E0028AB7F1A008E164C /* FUSegmentationViewController.m */; }; + E3447E0428AB8172008E164C /* FUSegmentationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E0328AB8172008E164C /* FUSegmentationModel.m */; }; + E3447E0928AB853E008E164C /* segmentation.json in Resources */ = {isa = PBXBuildFile; fileRef = E3447E0828AB853E008E164C /* segmentation.json */; }; + E3447E1528AB8FF9008E164C /* boyfriend1_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E0B28AB8FE7008E164C /* boyfriend1_740.bundle */; }; + E3447E1628AB8FF9008E164C /* boyfriend3_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E0C28AB8FE9008E164C /* boyfriend3_740.bundle */; }; + E3447E1728AB8FF9008E164C /* human_outline_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E0D28AB8FEA008E164C /* human_outline_740.bundle */; }; + E3447E1828AB8FF9008E164C /* sea_lm_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E0E28AB8FEC008E164C /* sea_lm_fu.bundle */; }; + E3447E1928AB8FF9008E164C /* xiandai_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E0F28AB8FEE008E164C /* xiandai_ztt_fu.bundle */; }; + E3447E1A28AB8FF9008E164C /* boyfriend2_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E1028AB8FF0008E164C /* boyfriend2_740.bundle */; }; + E3447E1B28AB8FF9008E164C /* bg_segment.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E1128AB8FF1008E164C /* bg_segment.bundle */; }; + E3447E1C28AB8FF9008E164C /* gufeng_zh_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E1228AB8FF3008E164C /* gufeng_zh_fu.bundle */; }; + E3447E1D28AB8FF9008E164C /* hez_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E1328AB8FF5008E164C /* hez_ztt_fu.bundle */; }; + E3447E1E28AB8FF9008E164C /* ice_lm_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447E1428AB8FF8008E164C /* ice_lm_fu.bundle */; }; + E3447E2128AB9BA5008E164C /* FUUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E2028AB9BA5008E164C /* FUUtility.m */; }; + E3447E5228AC889A008E164C /* FUFaceFusionCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E5128AC889A008E164C /* FUFaceFusionCollectionViewController.m */; }; + E3447E5528AC8D29008E164C /* FUFaceFusionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E5428AC8D29008E164C /* FUFaceFusionCell.m */; }; + E3447E7228C1CE9D008E164C /* FUFaceFusionCaptureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E7128C1CE9D008E164C /* FUFaceFusionCaptureViewController.m */; }; + E3447E7F28C1D07F008E164C /* FUFaceFusionCaptureViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E7E28C1D07F008E164C /* FUFaceFusionCaptureViewModel.m */; }; + E3447E8228C1D319008E164C /* FUFaceFusionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E8128C1D319008E164C /* FUFaceFusionManager.m */; }; + E3447E8A28C1E244008E164C /* FUFaceFusionCaptureResultViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E8928C1E244008E164C /* FUFaceFusionCaptureResultViewController.m */; }; + E3447E8D28C1E2AF008E164C /* FUFaceFusionEffectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447E8C28C1E2AF008E164C /* FUFaceFusionEffectViewController.m */; }; + E3447EDB28C59984008E164C /* FUFaceFusionTipView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3447EDA28C59984008E164C /* FUFaceFusionTipView.m */; }; + E3447EE828C5DC5E008E164C /* change_face.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3447EE728C5DC5E008E164C /* change_face.bundle */; }; + E354E79C28E1728500749C80 /* FUHairBeautyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E354E79B28E1728500749C80 /* FUHairBeautyModel.m */; }; + E354E79E28E1733400749C80 /* hair_beauty.json in Resources */ = {isa = PBXBuildFile; fileRef = E354E79D28E1733400749C80 /* hair_beauty.json */; }; + E354E7E728E2C89700749C80 /* comic_filter.json in Resources */ = {isa = PBXBuildFile; fileRef = E354E7E628E2C89700749C80 /* comic_filter.json */; }; + E354E7EB28E2CC0500749C80 /* FUComicFilterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E354E7EA28E2CC0500749C80 /* FUComicFilterModel.m */; }; + E354E7F028E2E0C600749C80 /* FURenderKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E354E7EE28E2E0C100749C80 /* FURenderKit.framework */; }; + E354E7F128E2E0C600749C80 /* FURenderKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E354E7EE28E2E0C100749C80 /* FURenderKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E369F8C928D849930036AC5A /* FUBeautyComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8C828D849810036AC5A /* FUBeautyComponent.framework */; }; + E369F8CA28D849930036AC5A /* FUBeautyComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8C828D849810036AC5A /* FUBeautyComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E369F8CB28D849980036AC5A /* FUGreenScreenComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8BC28D849790036AC5A /* FUGreenScreenComponent.framework */; }; + E369F8CC28D849980036AC5A /* FUGreenScreenComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8BC28D849790036AC5A /* FUGreenScreenComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E369F8CD28D8499C0036AC5A /* FUMakeupComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8C228D8497E0036AC5A /* FUMakeupComponent.framework */; }; + E369F8CE28D8499C0036AC5A /* FUMakeupComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8C228D8497E0036AC5A /* FUMakeupComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E369F91428D867730036AC5A /* FUStickerVideoRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F91328D867730036AC5A /* FUStickerVideoRenderViewController.m */; }; + E369F91728D867CF0036AC5A /* FUStickerVideoRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F91628D867CE0036AC5A /* FUStickerVideoRenderViewModel.m */; }; + E369F91C28D969EE0036AC5A /* FUMakeupVideoRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F91B28D969EE0036AC5A /* FUMakeupVideoRenderViewController.m */; }; + E369F91F28D96A030036AC5A /* FUMakeupImageRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F91E28D96A030036AC5A /* FUMakeupImageRenderViewController.m */; }; + E369F92228D96A510036AC5A /* FUMakeupImageRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F92128D96A510036AC5A /* FUMakeupImageRenderViewModel.m */; }; + E369F92528D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F92428D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.m */; }; + E369F94D28D9AB530036AC5A /* FUStickerComponentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F94C28D9AB530036AC5A /* FUStickerComponentManager.m */; }; + E369F95028D9AE3C0036AC5A /* FUStickerComponentViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E369F94F28D9AE3C0036AC5A /* FUStickerComponentViewModel.m */; }; + E3923E3E288FC10000A5FB31 /* FUStickerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3923E3D288FC10000A5FB31 /* FUStickerViewModel.m */; }; + E3923E42288FC18E00A5FB31 /* FUStickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3923E41288FC18E00A5FB31 /* FUStickerViewController.m */; }; + E3923E57288FC99B00A5FB31 /* CatSparks.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E47288FC99A00A5FB31 /* CatSparks.bundle */; }; + E3923E58288FC99B00A5FB31 /* redribbt.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E48288FC99A00A5FB31 /* redribbt.bundle */; }; + E3923E59288FC99B00A5FB31 /* DaisyPig.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E49288FC99A00A5FB31 /* DaisyPig.bundle */; }; + E3923E5B288FC99B00A5FB31 /* sdlr.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E4B288FC99A00A5FB31 /* sdlr.bundle */; }; + E3923E5C288FC99B00A5FB31 /* newy1.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E4C288FC99A00A5FB31 /* newy1.bundle */; }; + E3923E5E288FC99B00A5FB31 /* xlong_zh_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E4E288FC99B00A5FB31 /* xlong_zh_fu.bundle */; }; + E3923E63288FC99B00A5FB31 /* fu_zh_fenshu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E53288FC99B00A5FB31 /* fu_zh_fenshu.bundle */; }; + E3923E65288FC99B00A5FB31 /* sdlu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3923E55288FC99B00A5FB31 /* sdlu.bundle */; }; + E3923E70288FDEF400A5FB31 /* FUBeautyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3923E6F288FDEF400A5FB31 /* FUBeautyViewController.m */; }; + E39709AF28A0B37A00FC0F46 /* FULightMakeupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709A528A0B37A00FC0F46 /* FULightMakeupViewController.m */; }; + E39709B128A0B37A00FC0F46 /* FULightMakeupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709AC28A0B37A00FC0F46 /* FULightMakeupCell.m */; }; + E39709B628A0B93100FC0F46 /* FULightMakeupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709B528A0B93100FC0F46 /* FULightMakeupViewModel.m */; }; + E39709B928A0BC4100FC0F46 /* FULightMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709B828A0BC4100FC0F46 /* FULightMakeupModel.m */; }; + E39709BC28A0C15200FC0F46 /* light_makeup.json in Resources */ = {isa = PBXBuildFile; fileRef = E39709BB28A0C15200FC0F46 /* light_makeup.json */; }; + E39709C128A0EA6700FC0F46 /* light_makeup.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39709C028A0EA6700FC0F46 /* light_makeup.bundle */; }; + E39709C528A0EFA500FC0F46 /* mu_blush_01.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709C428A0EFA400FC0F46 /* mu_blush_01.png */; }; + E39709C728A0EFE200FC0F46 /* mu_eyebrow_01.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709C628A0EFE200FC0F46 /* mu_eyebrow_01.png */; }; + E39709C928A0F00700FC0F46 /* mu_eyeshadow_01.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709C828A0F00700FC0F46 /* mu_eyeshadow_01.png */; }; + E39709CB28A0F01000FC0F46 /* mu_blush_23.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709CA28A0F01000FC0F46 /* mu_blush_23.png */; }; + E39709CD28A0F01E00FC0F46 /* mu_eyebrow_19.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709CC28A0F01E00FC0F46 /* mu_eyebrow_19.png */; }; + E39709CF28A0F02700FC0F46 /* mu_eyeshadow_21.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709CE28A0F02700FC0F46 /* mu_eyeshadow_21.png */; }; + E39709D128A0F03400FC0F46 /* mu_blush_20.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709D028A0F03400FC0F46 /* mu_blush_20.png */; }; + E39709D328A0F03E00FC0F46 /* mu_eyebrow_16.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709D228A0F03E00FC0F46 /* mu_eyebrow_16.png */; }; + E39709D528A0F04D00FC0F46 /* mu_eyeshadow_18.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709D428A0F04D00FC0F46 /* mu_eyeshadow_18.png */; }; + E39709D728A0F05A00FC0F46 /* mu_blush_22.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709D628A0F05A00FC0F46 /* mu_blush_22.png */; }; + E39709D928A0F06300FC0F46 /* mu_eyebrow_18.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709D828A0F06300FC0F46 /* mu_eyebrow_18.png */; }; + E39709DB28A0F06900FC0F46 /* mu_eyeshadow_20.png in Resources */ = {isa = PBXBuildFile; fileRef = E39709DA28A0F06900FC0F46 /* mu_eyeshadow_20.png */; }; + E39709EE28A0F44900FC0F46 /* FUQualityStickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709E028A0F44900FC0F46 /* FUQualityStickerViewController.m */; }; + E39709EF28A0F44900FC0F46 /* FUQualityStickerPageController.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709E128A0F44900FC0F46 /* FUQualityStickerPageController.m */; }; + E39709F028A0F44900FC0F46 /* FUQualityStickerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709E528A0F44900FC0F46 /* FUQualityStickerHelper.m */; }; + E39709F228A0F44900FC0F46 /* FUQualityStickerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709E928A0F44900FC0F46 /* FUQualityStickerModel.m */; }; + E39709F328A0F44900FC0F46 /* FUQualityStickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E39709EB28A0F44900FC0F46 /* FUQualityStickerCell.m */; }; + E39709F428A0F44900FC0F46 /* FUQualityStickerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E39709ED28A0F44900FC0F46 /* FUQualityStickerCell.xib */; }; + E397136A289BBB5D002933BE /* UIImage+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = E3971369289BBB5D002933BE /* UIImage+FU.m */; }; + E3971386289BC0A3002933BE /* FUAnimojiViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3971383289BC0A3002933BE /* FUAnimojiViewController.m */; }; + E397138B289BC147002933BE /* FUAnimojiViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E397138A289BC147002933BE /* FUAnimojiViewModel.m */; }; + E39713A6289BD055002933BE /* cartoon_princess_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E397138E289BD055002933BE /* cartoon_princess_Animoji.bundle */; }; + E39713A7289BD055002933BE /* baihu_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E397138F289BD055002933BE /* baihu_Animoji.bundle */; }; + E39713A8289BD055002933BE /* douniuquan_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3971390289BD055002933BE /* douniuquan_Animoji.bundle */; }; + E39713AA289BD055002933BE /* kaola_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3971392289BD055002933BE /* kaola_Animoji.bundle */; }; + E39713AD289BD055002933BE /* qgirl_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3971395289BD055002933BE /* qgirl_Animoji.bundle */; }; + E39713AE289BD055002933BE /* kuloutou_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3971396289BD055002933BE /* kuloutou_Animoji.bundle */; }; + E39713B0289BD055002933BE /* huangya_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3971398289BD055002933BE /* huangya_Animoji.bundle */; }; + E39713B2289BD055002933BE /* wuxia_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E397139A289BD055002933BE /* wuxia_Animoji.bundle */; }; + E39713B3289BD055002933BE /* baimao_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E397139B289BD055002933BE /* baimao_Animoji.bundle */; }; + E39713B8289BD055002933BE /* hashiqi_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39713A0289BD055002933BE /* hashiqi_Animoji.bundle */; }; + E39713BA289BD055002933BE /* hetun_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39713A2289BD055002933BE /* hetun_Animoji.bundle */; }; + E39713BC289BD055002933BE /* frog_Animoji.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39713A4289BD055002933BE /* frog_Animoji.bundle */; }; + E39713D9289CBBDF002933BE /* FUHairBeautyViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E39713D1289CBBDF002933BE /* FUHairBeautyViewModel.m */; }; + E39713DF289CE648002933BE /* FUHairBeautyView.m in Sources */ = {isa = PBXBuildFile; fileRef = E39713DE289CE648002933BE /* FUHairBeautyView.m */; }; + E39713E3289CF4BD002933BE /* FUHairBeautyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E39713E2289CF4BD002933BE /* FUHairBeautyViewController.m */; }; + E39713EA289D076D002933BE /* hair_normal.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39713E8289D076C002933BE /* hair_normal.bundle */; }; + E39713EB289D076D002933BE /* hair_gradient.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39713E9289D076D002933BE /* hair_gradient.bundle */; }; + E3A07C94288939BD00E6F7E5 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07C93288939BD00E6F7E5 /* AppDelegate.m */; }; + E3A07C9F288939BE00E6F7E5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E3A07C9E288939BE00E6F7E5 /* Assets.xcassets */; }; + E3A07CA5288939BE00E6F7E5 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07CA4288939BE00E6F7E5 /* main.m */; }; + E3A07CBF28893D4300E6F7E5 /* FUHomepageViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07CAE28893D4300E6F7E5 /* FUHomepageViewModel.m */; }; + E3A07CC028893D4300E6F7E5 /* FUHomepageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07CB128893D4300E6F7E5 /* FUHomepageModel.m */; }; + E3A07CC228893D4300E6F7E5 /* FUHomepageHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07CB928893D4300E6F7E5 /* FUHomepageHeaderView.m */; }; + E3A07CC428893D4300E6F7E5 /* FUHomepageModuleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07CBB28893D4300E6F7E5 /* FUHomepageModuleCell.m */; }; + E3A07CC528893D4300E6F7E5 /* FUHomepageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A07CBE28893D4300E6F7E5 /* FUHomepageViewController.m */; }; + E3A13D6C28C87A65009402A3 /* FUMakeupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D6B28C87A65009402A3 /* FUMakeupViewModel.m */; }; + E3A13D6F28C87B1E009402A3 /* FUMakeupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D6E28C87B1E009402A3 /* FUMakeupViewController.m */; }; + E3A58C0328A2726800941101 /* FUARMaskViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58BF928A2726800941101 /* FUARMaskViewModel.m */; }; + E3A58C0428A2726800941101 /* FUARMaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58BFC28A2726800941101 /* FUARMaskViewController.m */; }; + E3A58C1728A2754000941101 /* fenhudie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C0728A2753400941101 /* fenhudie.bundle */; }; + E3A58C1928A2754000941101 /* lanhudie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C0928A2753600941101 /* lanhudie.bundle */; }; + E3A58C1A28A2754000941101 /* tiger.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C0A28A2753700941101 /* tiger.bundle */; }; + E3A58C1B28A2754000941101 /* bluebird.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C0B28A2753800941101 /* bluebird.bundle */; }; + E3A58C2228A2754000941101 /* tiger_bai.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C1228A2753D00941101 /* tiger_bai.bundle */; }; + E3A58C2328A2754000941101 /* tiger_huang.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C1328A2753E00941101 /* tiger_huang.bundle */; }; + E3A58C2428A2754000941101 /* baozi.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C1428A2753F00941101 /* baozi.bundle */; }; + E3A58C2528A2754000941101 /* xiongmao.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C1528A2754000941101 /* xiongmao.bundle */; }; + E3A58C3028A2759F00941101 /* FUHilariousViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C2928A2759E00941101 /* FUHilariousViewModel.m */; }; + E3A58C3128A2759F00941101 /* FUHilariousViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C2E28A2759E00941101 /* FUHilariousViewController.m */; }; + E3A58C3928A278EB00941101 /* big_head_facewarp1.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C3328A278E700941101 /* big_head_facewarp1.bundle */; }; + E3A58C3A28A278EB00941101 /* big_head_facewarp5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C3428A278E800941101 /* big_head_facewarp5.bundle */; }; + E3A58C3B28A278EB00941101 /* big_head_facewarp6.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C3528A278E900941101 /* big_head_facewarp6.bundle */; }; + E3A58C3C28A278EB00941101 /* big_head_facewarp3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C3628A278E900941101 /* big_head_facewarp3.bundle */; }; + E3A58C3D28A278EB00941101 /* big_head_facewarp4.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C3728A278EA00941101 /* big_head_facewarp4.bundle */; }; + E3A58C3E28A278EB00941101 /* big_head_facewarp2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C3828A278EB00941101 /* big_head_facewarp2.bundle */; }; + E3A58C4628A34F2600941101 /* FUExpressionRecognitionViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C4128A34F2500941101 /* FUExpressionRecognitionViewModel.m */; }; + E3A58C4728A34F2600941101 /* FUExpressionRecognitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C4428A34F2500941101 /* FUExpressionRecognitionViewController.m */; }; + E3A58C5028A352E300941101 /* xiaoxueshen_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4928A352DE00941101 /* xiaoxueshen_ztt_fu.bundle */; }; + E3A58C5128A352E300941101 /* xiaobianzi_zh_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4A28A352DF00941101 /* xiaobianzi_zh_fu.bundle */; }; + E3A58C5228A352E300941101 /* future_warrior.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4B28A352E000941101 /* future_warrior.bundle */; }; + E3A58C5328A352E300941101 /* qingqing_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4C28A352E100941101 /* qingqing_ztt_fu.bundle */; }; + E3A58C5428A352E300941101 /* jet_mask.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4D28A352E100941101 /* jet_mask.bundle */; }; + E3A58C5528A352E300941101 /* luhantongkuan_ztt_fu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4E28A352E200941101 /* luhantongkuan_ztt_fu.bundle */; }; + E3A58C5628A352E300941101 /* sdx2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C4F28A352E300941101 /* sdx2.bundle */; }; + E3A58C5E28A3592A00941101 /* FUMusicFilterViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C5A28A3592A00941101 /* FUMusicFilterViewModel.m */; }; + E3A58C5F28A3592A00941101 /* FUMusicFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C5D28A3592A00941101 /* FUMusicFilterViewController.m */; }; + E3A58C6428A360F500941101 /* douyin_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C6128A360F400941101 /* douyin_01.bundle */; }; + E3A58C6528A360F500941101 /* douyin_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C6228A360F400941101 /* douyin_02.bundle */; }; + E3A58C6628A360F500941101 /* douyin.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C6328A360F500941101 /* douyin.mp3 */; }; + E3A58C6E28A364B800941101 /* FUDistortingMirrorViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C6A28A364B800941101 /* FUDistortingMirrorViewModel.m */; }; + E3A58C6F28A364B800941101 /* FUDistortingMirrorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C6C28A364B800941101 /* FUDistortingMirrorViewController.m */; }; + E3A58C7628A37D4A00941101 /* facewarp6.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C7128A37D4600941101 /* facewarp6.bundle */; }; + E3A58C7728A37D4A00941101 /* facewarp2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C7228A37D4700941101 /* facewarp2.bundle */; }; + E3A58C7828A37D4A00941101 /* facewarp3.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C7328A37D4800941101 /* facewarp3.bundle */; }; + E3A58C7928A37D4A00941101 /* facewarp4.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C7428A37D4900941101 /* facewarp4.bundle */; }; + E3A58C7A28A37D4A00941101 /* facewarp5.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C7528A37D4A00941101 /* facewarp5.bundle */; }; + E3A58C9528A3801700941101 /* body_beauty.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A58C9428A3801700941101 /* body_beauty.json */; }; + E3A58C9828A380C000941101 /* FUBodyBeautyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C9728A380C000941101 /* FUBodyBeautyModel.m */; }; + E3A58C9B28A3838600941101 /* FUBodyBeautyViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58C9A28A3838600941101 /* FUBodyBeautyViewModel.m */; }; + E3A58CA128A38B9F00941101 /* FUBodyBeautyCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CA028A38B9F00941101 /* FUBodyBeautyCell.m */; }; + E3A58CA728A38C3700941101 /* FUBodyBeautyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CA628A38C3700941101 /* FUBodyBeautyViewController.m */; }; + E3A58CAA28A38CB000941101 /* FUBeautyImageRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CA928A38CB000941101 /* FUBeautyImageRenderViewController.m */; }; + E3A58CAD28A38CCA00941101 /* FUBeautyImageRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CAC28A38CCA00941101 /* FUBeautyImageRenderViewModel.m */; }; + E3A58CB028A3AA5500941101 /* UIButton+FU.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CAF28A3AA5500941101 /* UIButton+FU.m */; }; + E3A58CB328A3AEB100941101 /* FUCaptureButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58CB228A3AEB100941101 /* FUCaptureButton.m */; }; + E3A58DE128A6484B00941101 /* FUGreenScreenImageRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58DE028A6484B00941101 /* FUGreenScreenImageRenderViewController.m */; }; + E3A58DEB28A653A300941101 /* FUGreenScreenImageRenderViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A58DEA28A653A300941101 /* FUGreenScreenImageRenderViewModel.m */; }; + E3A58DF228A66F6A00941101 /* FUCommonUIComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3A58DF128A66F5A00941101 /* FUCommonUIComponent.framework */; }; + E3A58DF328A66F6A00941101 /* FUCommonUIComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3A58DF128A66F5A00941101 /* FUCommonUIComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E3AD21EF28D9E153004D3F80 /* FUVideoComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3AD21EE28D9E14A004D3F80 /* FUVideoComponent.framework */; }; + E3AD21F028D9E153004D3F80 /* FUVideoComponent.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3AD21EE28D9E14A004D3F80 /* FUVideoComponent.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E3AD21F728DACB2B004D3F80 /* FULandmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E3AD21F528DACB2A004D3F80 /* FULandmarkManager.m */; }; + E3AD21F928DACBCF004D3F80 /* landmarks.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3AD21F828DACBCF004D3F80 /* landmarks.bundle */; }; + E3CD59A328977B2B0088ED12 /* FUGreenScreenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3CD59A228977B2B0088ED12 /* FUGreenScreenViewController.m */; }; + E3CD59A628977B460088ED12 /* FUGreenScreenViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3CD59A528977B460088ED12 /* FUGreenScreenViewModel.m */; }; + E3CD59AA289780C90088ED12 /* FUBeautyViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3CD59A8289780C90088ED12 /* FUBeautyViewModel.m */; }; + E3CD5A0328991D120088ED12 /* green_screen_740.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3CD5A0228991D120088ED12 /* green_screen_740.bundle */; }; + E3DC94C32890E3630016C9B1 /* ai_face_recognizer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B02890E3630016C9B1 /* ai_face_recognizer.bundle */; }; + E3DC94C42890E3630016C9B1 /* ai_hand_processor.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B12890E3630016C9B1 /* ai_hand_processor.bundle */; }; + E3DC94C52890E3630016C9B1 /* ai_face_processor.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B22890E3630016C9B1 /* ai_face_processor.bundle */; }; + E3DC94C62890E3630016C9B1 /* ai_bgseg_green.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B32890E3630016C9B1 /* ai_bgseg_green.bundle */; }; + E3DC94C72890E3630016C9B1 /* ai_face_processor_lite.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B42890E3630016C9B1 /* ai_face_processor_lite.bundle */; }; + E3DC94C82890E3630016C9B1 /* ai_human_processor.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B52890E3630016C9B1 /* ai_human_processor.bundle */; }; + E3DC94C92890E3630016C9B1 /* ai_human_processor_gpu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B62890E3630016C9B1 /* ai_human_processor_gpu.bundle */; }; + E3DC94CA2890E3630016C9B1 /* tongue.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B82890E3630016C9B1 /* tongue.bundle */; }; + E3DC94CB2890E3630016C9B1 /* fxaa.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94B92890E3630016C9B1 /* fxaa.bundle */; }; + E3DC94CC2890E3630016C9B1 /* face_makeup.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94BA2890E3630016C9B1 /* face_makeup.bundle */; }; + E3DC94CD2890E3630016C9B1 /* controller_cpp.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94BB2890E3630016C9B1 /* controller_cpp.bundle */; }; + E3DC94CE2890E3630016C9B1 /* body_slim.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94BC2890E3630016C9B1 /* body_slim.bundle */; }; + E3DC94CF2890E3630016C9B1 /* fuzzytoonfilter.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94BD2890E3630016C9B1 /* fuzzytoonfilter.bundle */; }; + E3DC94D02890E3630016C9B1 /* face_beautification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3DC94BE2890E3630016C9B1 /* face_beautification.bundle */; }; + E3ED025428A0F6D5000F28CD /* FUQualityStickerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ED024C28A0F6D5000F28CD /* FUQualityStickerViewModel.m */; }; + E3ED025928A0F709000F28CD /* FUNetworkingHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ED025828A0F709000F28CD /* FUNetworkingHelper.m */; }; + E3ED025C28A10CE8000F28CD /* controller_config.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3ED025B28A10CE8000F28CD /* controller_config.bundle */; }; + E3ED026028A113D6000F28CD /* FUImageRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ED025F28A113D6000F28CD /* FUImageRenderViewController.m */; }; + E3ED026428A113E8000F28CD /* FUVideoRenderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ED026328A113E8000F28CD /* FUVideoRenderViewController.m */; }; + E3ED026728A11790000F28CD /* FUMediaPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ED026628A11790000F28CD /* FUMediaPickerViewController.m */; }; + E3ED026C28A126CC000F28CD /* FUMediaPickerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ED026B28A126CC000F28CD /* FUMediaPickerViewModel.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - E33C9792288E4C1400374C69 /* PBXContainerItemProxy */ = { + E369F8BB28D849790036AC5A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = E33C978E288E4C1400374C69 /* FUCommonUIComponent.xcodeproj */; + containerPortal = E369F8B728D849790036AC5A /* FUGreenScreenComponent.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E3A58CC628A3CCA100941101; + remoteInfo = FUGreenScreenComponent; + }; + E369F8C128D8497E0036AC5A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E369F8BD28D8497E0036AC5A /* FUMakeupComponent.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E3A13D4728C877D9009402A3; + remoteInfo = FUMakeupComponent; + }; + E369F8C728D849810036AC5A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E369F8C328D849810036AC5A /* FUBeautyComponent.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E34C47EA285338080040093C; + remoteInfo = FUBeautyComponent; + }; + E3A58DF028A66F5A00941101 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E3A58DEC28A66F5A00941101 /* FUCommonUIComponent.xcodeproj */; proxyType = 2; remoteGlobalIDString = E36A0821285C895900A83553; remoteInfo = FUCommonUIComponent; }; - E3447F0628C61B7C008E164C /* PBXContainerItemProxy */ = { + E3AD21ED28D9E14A004D3F80 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = E3447F0228C61B7C008E164C /* FUVideoComponent.xcodeproj */; + containerPortal = E3AD21E928D9E14A004D3F80 /* FUVideoComponent.xcodeproj */; proxyType = 2; remoteGlobalIDString = E3346D4F2828B88B00D70F69; remoteInfo = FUVideoComponent; @@ -472,15 +308,18 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 414DE96726959A3F00E4CB7E /* Embed Frameworks */ = { + E34069FE288A9AB300373612 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 84218A5828ADEB3700A9D860 /* FUCommonUIComponent.framework in Embed Frameworks */, - E3447F0928C61B88008E164C /* FUVideoComponent.framework in Embed Frameworks */, - E3447EA728C203A7008E164C /* FURenderKit.framework in Embed Frameworks */, + E369F8CC28D849980036AC5A /* FUGreenScreenComponent.framework in Embed Frameworks */, + E3AD21F028D9E153004D3F80 /* FUVideoComponent.framework in Embed Frameworks */, + E354E7F128E2E0C600749C80 /* FURenderKit.framework in Embed Frameworks */, + E369F8CE28D8499C0036AC5A /* FUMakeupComponent.framework in Embed Frameworks */, + E3A58DF328A66F6A00941101 /* FUCommonUIComponent.framework in Embed Frameworks */, + E369F8CA28D849930036AC5A /* FUBeautyComponent.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -488,2229 +327,1719 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0B5A0CB52021913900AAD47D /* FULiveDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FULiveDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 0B5A0CB82021913900AAD47D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 0B5A0CBF2021913900AAD47D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 0B5A0CC42021913900AAD47D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 0B5A0CC62021913900AAD47D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0B5A0CC72021913900AAD47D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 0B5A0CEB2021917F00AAD47D /* authpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = authpack.h; sourceTree = ""; }; - 0B5A0D2C2021917F00AAD47D /* FUCircleProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUCircleProgressView.h; sourceTree = ""; }; - 0B5A0D2D2021917F00AAD47D /* FUCircleProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUCircleProgressView.m; sourceTree = ""; }; - 0B5A0D302021917F00AAD47D /* FUManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUManager.h; sourceTree = ""; }; - 0B5A0D312021917F00AAD47D /* FUManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUManager.m; sourceTree = ""; }; - 0B5A0D362021917F00AAD47D /* FUPhotoButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUPhotoButton.h; sourceTree = ""; }; - 0B5A0D372021917F00AAD47D /* FUPhotoButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUPhotoButton.m; sourceTree = ""; }; - 0B5A0D7B2021919600AAD47D /* dataSource.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = dataSource.plist; sourceTree = ""; }; - 0B5A0D81202191B600AAD47D /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 0B5A0D832021921700AAD47D /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; }; - 0B5B9F3820E9C17F00FF7789 /* FUSelectedImageController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSelectedImageController.h; sourceTree = ""; }; - 0B5B9F3920E9C17F00FF7789 /* FUSelectedImageController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSelectedImageController.m; sourceTree = ""; }; - 0B6B00FA20F49BE90079118B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = ""; }; - 0B6B00FB20F49BEA0079118B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = ""; }; - 0B6B00FF20F49C0F0079118B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 0B6B010120F49C110079118B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 0B6B010320F4A25C0079118B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; }; - 0BC0D25C2153891300324D7D /* FULightingSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightingSlider.h; sourceTree = ""; }; - 0BC0D25D2153891300324D7D /* FULightingSlider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightingSlider.m; sourceTree = ""; }; - 0BC0D25F21538BA300324D7D /* FULightingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightingView.h; sourceTree = ""; }; - 0BC0D26021538BA300324D7D /* FULightingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightingView.m; sourceTree = ""; }; - 0BE100382150F9ED00098F1B /* douyin.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = douyin.mp3; sourceTree = ""; }; - 0BE100392150F9ED00098F1B /* douyin_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = douyin_01.bundle; sourceTree = ""; }; - 0BE1003A2150F9ED00098F1B /* douyin_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = douyin_01.png; sourceTree = ""; }; - 0BE1003B2150F9ED00098F1B /* douyin_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = douyin_02.bundle; sourceTree = ""; }; - 0BE1003C2150F9ED00098F1B /* douyin_02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = douyin_02.png; sourceTree = ""; }; - 0BE1005E2150F9ED00098F1B /* facewarp2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp2.bundle; sourceTree = ""; }; - 0BE1005F2150F9ED00098F1B /* facewarp2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = facewarp2.png; sourceTree = ""; }; - 0BE100602150F9ED00098F1B /* facewarp3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp3.bundle; sourceTree = ""; }; - 0BE100612150F9ED00098F1B /* facewarp3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = facewarp3.png; sourceTree = ""; }; - 0BE100622150F9ED00098F1B /* facewarp4.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp4.bundle; sourceTree = ""; }; - 0BE100632150F9ED00098F1B /* facewarp4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = facewarp4.png; sourceTree = ""; }; - 0BE100642150F9ED00098F1B /* facewarp5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp5.bundle; sourceTree = ""; }; - 0BE100652150F9ED00098F1B /* facewarp5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = facewarp5.png; sourceTree = ""; }; - 0BE100662150F9ED00098F1B /* facewarp6.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp6.bundle; sourceTree = ""; }; - 0BE100672150F9ED00098F1B /* facewarp6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = facewarp6.png; sourceTree = ""; }; - 0BE100732150F9ED00098F1B /* ssd_thread_cute.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_cute.bundle; sourceTree = ""; }; - 0BE100742150F9ED00098F1B /* ssd_thread_cute.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ssd_thread_cute.png; sourceTree = ""; }; - 0BE100762150F9ED00098F1B /* ssd_thread_six.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_six.bundle; sourceTree = ""; }; - 0BE100772150F9ED00098F1B /* ssd_thread_six.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ssd_thread_six.png; sourceTree = ""; }; - 0BE100782150F9ED00098F1B /* ssd_thread_thumb.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_thumb.bundle; sourceTree = ""; }; - 0BE100792150F9ED00098F1B /* ssd_thread_thumb.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ssd_thread_thumb.png; sourceTree = ""; }; - 29B79CC7B81FD9FA254B7E7E /* Pods-FULiveDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FULiveDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo.debug.xcconfig"; sourceTree = ""; }; - 410BC79D25F2332200FDB6C0 /* FUBodyBeautyController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyController.m; sourceTree = ""; }; - 410BC79E25F2332200FDB6C0 /* FUBodyBeautyController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyController.h; sourceTree = ""; }; - 410BC7A925F2333B00FDB6C0 /* FUBodyBeautyManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyManager.h; sourceTree = ""; }; - 410BC7AA25F2333C00FDB6C0 /* FUBodyBeautyManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyManager.m; sourceTree = ""; }; - 410BC7B225F2361A00FDB6C0 /* FUBodyBeautyDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyDefine.h; sourceTree = ""; }; - 410F43C625E75863000AFB72 /* FUStickerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerManager.h; sourceTree = ""; }; - 410F43C725E75863000AFB72 /* FUStickerManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerManager.m; sourceTree = ""; }; - 410F43D625E776E8000AFB72 /* FULocalDataManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULocalDataManager.h; sourceTree = ""; }; - 410F43D725E776E8000AFB72 /* FULocalDataManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULocalDataManager.m; sourceTree = ""; }; - 410F43EB25E78C73000AFB72 /* FUAnimojiManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUAnimojiManager.h; sourceTree = ""; }; - 410F43EC25E78C73000AFB72 /* FUAnimojiManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUAnimojiManager.m; sourceTree = ""; }; - 412399982615767A00F0DFC3 /* bg_segment.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = bg_segment.bundle; sourceTree = ""; }; - 4124C3DB260A1F2C0090AF9E /* mu_style_eyepupil_09.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_09.bundle; sourceTree = ""; }; - 4124C3DC260A1F2C0090AF9E /* mu_style_eyepupil_07.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_07.bundle; sourceTree = ""; }; - 4124C3DD260A1F2D0090AF9E /* mu_style_eyepupil_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_03.bundle; sourceTree = ""; }; - 4124C3DE260A1F2D0090AF9E /* mu_style_eyepupil_08.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_08.bundle; sourceTree = ""; }; - 4124C3DF260A1F2D0090AF9E /* mu_style_eyepupil_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_04.bundle; sourceTree = ""; }; - 4124C3E0260A1F2D0090AF9E /* mu_style_eyepupil_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_01.bundle; sourceTree = ""; }; - 4124C3E1260A1F2D0090AF9E /* mu_style_eyepupil_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_05.bundle; sourceTree = ""; }; - 4124C3E2260A1F2D0090AF9E /* mu_style_eyepupil_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyepupil_06.bundle; sourceTree = ""; }; - 4125E04E2629C3EF008D31F7 /* cartoon_princess_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = cartoon_princess_Animoji.bundle; sourceTree = ""; }; - 4125E04F2629C3EF008D31F7 /* cartoon_princess_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cartoon_princess_Animoji.png; sourceTree = ""; }; - 41276637261DA2620001BDEF /* tiezhi_data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tiezhi_data.json; sourceTree = ""; }; - 41276638261DA2620001BDEF /* 流星_00036.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00036.png"; sourceTree = ""; }; - 41276639261DA2620001BDEF /* 流星_00037.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00037.png"; sourceTree = ""; }; - 4127663A261DA2620001BDEF /* 流星_00041.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00041.png"; sourceTree = ""; }; - 4127663B261DA2620001BDEF /* 流星_00040.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00040.png"; sourceTree = ""; }; - 4127663C261DA2620001BDEF /* 流星_00042.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00042.png"; sourceTree = ""; }; - 4127663D261DA2620001BDEF /* 流星_00043.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00043.png"; sourceTree = ""; }; - 4127663E261DA2620001BDEF /* 流星_00047.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00047.png"; sourceTree = ""; }; - 4127663F261DA2620001BDEF /* 流星_00052.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00052.png"; sourceTree = ""; }; - 41276640261DA2620001BDEF /* 流星_00046.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00046.png"; sourceTree = ""; }; - 41276641261DA2620001BDEF /* 流星_00050.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00050.png"; sourceTree = ""; }; - 41276642261DA2620001BDEF /* 流星_00044.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00044.png"; sourceTree = ""; }; - 41276643261DA2620001BDEF /* 流星_00045.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00045.png"; sourceTree = ""; }; - 41276644261DA2620001BDEF /* 流星_00051.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00051.png"; sourceTree = ""; }; - 41276645261DA2620001BDEF /* 流星_00048.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00048.png"; sourceTree = ""; }; - 41276646261DA2620001BDEF /* 流星_00049.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00049.png"; sourceTree = ""; }; - 41276647261DA2620001BDEF /* 流星_00039.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00039.png"; sourceTree = ""; }; - 41276648261DA2620001BDEF /* 流星_00038.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00038.png"; sourceTree = ""; }; - 412F774E2609C59C003AF848 /* FUBGSaveModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBGSaveModel.m; sourceTree = ""; }; - 412F774F2609C59C003AF848 /* FUBGSaveModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBGSaveModel.h; sourceTree = ""; }; - 41391C2725E8D067005451E5 /* FUBaseViewControllerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBaseViewControllerManager.h; sourceTree = ""; }; - 41391C2825E8D067005451E5 /* FUMetaManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUMetaManager.m; sourceTree = ""; }; - 41391C2925E8D067005451E5 /* FUMetaManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUMetaManager.h; sourceTree = ""; }; - 41391C2A25E8D067005451E5 /* FUBaseViewControllerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBaseViewControllerManager.m; sourceTree = ""; }; - 41391C3125E8D071005451E5 /* FUBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBaseViewController.m; sourceTree = ""; }; - 41391C3225E8D071005451E5 /* FUBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBaseViewController.h; sourceTree = ""; }; - 4156CD9326141DAE00DD72C1 /* FUBeautyModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBeautyModel.m; sourceTree = ""; }; - 4156CD9426141DAE00DD72C1 /* FUBeautyModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBeautyModel.h; sourceTree = ""; }; - 4156CD9A26141DCB00DD72C1 /* FUStyleModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUStyleModel.m; sourceTree = ""; }; - 4156CD9D26141DCB00DD72C1 /* FUStyleModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUStyleModel.h; sourceTree = ""; }; - 4156CDA426141E0900DD72C1 /* FUBeautyDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyDefine.h; sourceTree = ""; }; - 4156CDF7261470CF00DD72C1 /* FUQStickersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQStickersViewController.h; sourceTree = ""; }; - 4156CDF8261470CF00DD72C1 /* FUStickersPageController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUStickersPageController.h; sourceTree = ""; }; - 4156CDF9261470CF00DD72C1 /* FUQStickersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQStickersViewController.m; sourceTree = ""; }; - 4156CDFA261470CF00DD72C1 /* FUStickersPageController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUStickersPageController.m; sourceTree = ""; }; - 4156CDFD261470CF00DD72C1 /* FUStickerModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUStickerModel.h; sourceTree = ""; }; - 4156CDFE261470CF00DD72C1 /* FUStickerModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUStickerModel.m; sourceTree = ""; }; - 4156CE00261470CF00DD72C1 /* FUStickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUStickerCell.m; sourceTree = ""; }; - 4156CE02261470CF00DD72C1 /* FUStickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUStickerCell.h; sourceTree = ""; }; - 4156CE04261470CF00DD72C1 /* FUStickerCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUStickerCell.xib; sourceTree = ""; }; - 4156CE1C2614715B00DD72C1 /* FUNetworkingHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUNetworkingHelper.m; sourceTree = ""; }; - 4156CE1D2614715B00DD72C1 /* FUNetworkingHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUNetworkingHelper.h; sourceTree = ""; }; - 4156CE24261471B100DD72C1 /* UIColor+FU.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+FU.m"; sourceTree = ""; }; - 4156CE25261471B100DD72C1 /* UIColor+FU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+FU.h"; sourceTree = ""; }; - 4156CE2C2614727B00DD72C1 /* FULiveDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULiveDefine.h; sourceTree = ""; }; - 4156CE31261472A700DD72C1 /* FUQualityStickerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerManager.h; sourceTree = ""; }; - 4156CE32261472A700DD72C1 /* FUQualityStickerManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerManager.m; sourceTree = ""; }; - 4156CE38261472C100DD72C1 /* FUStickerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUStickerHelper.h; sourceTree = ""; }; - 4156CE39261472C100DD72C1 /* FUStickerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUStickerHelper.m; sourceTree = ""; }; - 4165BCFA25F0FB350076FBFD /* FUAnimationFilterManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUAnimationFilterManager.h; sourceTree = ""; }; - 4165BCFB25F0FB350076FBFD /* FUAnimationFilterManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUAnimationFilterManager.m; sourceTree = ""; }; - 416B7E8725EE494200B895BB /* FUMakeupDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupDefine.h; sourceTree = ""; }; - 4180A4FC26117F55003DC778 /* redribbt.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = redribbt.bundle; sourceTree = ""; }; - 4180A4FD26117F55003DC778 /* redribbt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = redribbt.png; sourceTree = ""; }; - 4180A50426117F55003DC778 /* sdlr.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = sdlr.png; sourceTree = ""; }; - 4180A50526117F55003DC778 /* sdlr.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = sdlr.bundle; sourceTree = ""; }; - 4180A50A26117F55003DC778 /* sdlu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = sdlu.png; sourceTree = ""; }; - 4180A50C26117F55003DC778 /* xlong_zh_fu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = xlong_zh_fu.png; sourceTree = ""; }; - 4180A50D26117F55003DC778 /* xlong_zh_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = xlong_zh_fu.bundle; sourceTree = ""; }; - 4180A50E26117F55003DC778 /* sdlu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = sdlu.bundle; sourceTree = ""; }; - 4180A51426117F55003DC778 /* CatSparks.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = CatSparks.png; sourceTree = ""; }; - 4180A51526117F55003DC778 /* CatSparks.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = CatSparks.bundle; sourceTree = ""; }; - 4180A51826117F55003DC778 /* fu_zh_fenshu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fu_zh_fenshu.bundle; sourceTree = ""; }; - 4180A51B26117F55003DC778 /* fu_zh_fenshu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fu_zh_fenshu.png; sourceTree = ""; }; - 4180A52026117F55003DC778 /* newy1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = newy1.png; sourceTree = ""; }; - 4180A52126117F55003DC778 /* newy1.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = newy1.bundle; sourceTree = ""; }; - 4180A52226117F55003DC778 /* DaisyPig.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DaisyPig.png; sourceTree = ""; }; - 4180A52326117F55003DC778 /* DaisyPig.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = DaisyPig.bundle; sourceTree = ""; }; - 4191A03025F1C83F0052AFB3 /* FUBgCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBgCollectionView.m; sourceTree = ""; }; - 4191A03125F1C83F0052AFB3 /* FUTakeColorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUTakeColorView.h; sourceTree = ""; }; - 4191A03225F1C83F0052AFB3 /* FULvMuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULvMuView.h; sourceTree = ""; }; - 4191A03325F1C83F0052AFB3 /* FUTakeColorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUTakeColorView.m; sourceTree = ""; }; - 4191A03425F1C83F0052AFB3 /* FUBgCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBgCollectionView.h; sourceTree = ""; }; - 4191A03525F1C83F0052AFB3 /* FULvMuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULvMuView.m; sourceTree = ""; }; - 4191A03725F1C83F0052AFB3 /* FULvMuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULvMuViewController.m; sourceTree = ""; }; - 4191A03825F1C83F0052AFB3 /* FULvMuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULvMuViewController.h; sourceTree = ""; }; - 4191A03A25F1C83F0052AFB3 /* FUGreenScreenManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenManager.m; sourceTree = ""; }; - 4191A03B25F1C83F0052AFB3 /* FUGreenScreenManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenManager.h; sourceTree = ""; }; - 4191A04E25F1CDB10052AFB3 /* FUGreenScreenDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenDefine.h; sourceTree = ""; }; - 4191A05825F1D3C30052AFB3 /* FUBaseUIModelProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBaseUIModelProtocol.h; sourceTree = ""; }; - 4191A06825F1D5FB0052AFB3 /* FUGreenScreenModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenModel.h; sourceTree = ""; }; - 4191A06925F1D5FB0052AFB3 /* FUGreenScreenModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenModel.m; sourceTree = ""; }; - 4191A06F25F1D7460052AFB3 /* FUGreenScreenBgModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenBgModel.h; sourceTree = ""; }; - 4191A07025F1D7460052AFB3 /* FUGreenScreenBgModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenBgModel.m; sourceTree = ""; }; - 4198722F25F08AEE0082AD1E /* FULightMakeupManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightMakeupManager.h; sourceTree = ""; }; - 4198723025F08AEE0082AD1E /* FULightMakeupManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupManager.m; sourceTree = ""; }; - 41C0FF38260C6DF200CAFE62 /* NSObject+economizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+economizer.m"; sourceTree = ""; }; - 41C0FF39260C6DF200CAFE62 /* NSObject+economizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+economizer.h"; sourceTree = ""; }; - 41C45F5D25F71CA2006F8F4C /* FUBodyAvatarManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyAvatarManager.h; sourceTree = ""; }; - 41C45F5E25F71CA2006F8F4C /* FUBodyAvatarManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyAvatarManager.m; sourceTree = ""; }; - 41DC51C725E8EF0200693F6F /* FUStickerProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerProtocol.h; sourceTree = ""; }; - 41DD2E6D25E7A35F0030A363 /* FUMusicFilterController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUMusicFilterController.m; sourceTree = ""; }; - 41DD2E6E25E7A35F0030A363 /* FUMusicFilterController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUMusicFilterController.h; sourceTree = ""; }; - 41DD2E7525E7A3940030A363 /* FUMusicFilterManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMusicFilterManager.h; sourceTree = ""; }; - 41DD2E7625E7A3940030A363 /* FUMusicFilterManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMusicFilterManager.m; sourceTree = ""; }; - 41DD2E8425E7A5DB0030A363 /* FUBGSegmentationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBGSegmentationController.h; sourceTree = ""; }; - 41DD2E8525E7A5DB0030A363 /* FUBGSegmentationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBGSegmentationController.m; sourceTree = ""; }; - 41DD2E8C25E7A5F50030A363 /* FUBGSegmentManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBGSegmentManager.h; sourceTree = ""; }; - 41DD2E8D25E7A5F50030A363 /* FUBGSegmentManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBGSegmentManager.m; sourceTree = ""; }; - 41E23B3F261D907F00EE2E75 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; - AC931D2425F454B000834328 /* FUPosterManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPosterManager.h; sourceTree = ""; }; - AC931D2525F454B000834328 /* FUPosterManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPosterManager.m; sourceTree = ""; }; - ACBDCE3325F65D7B0036FC63 /* FULightMakeupController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULightMakeupController.h; sourceTree = ""; }; - ACBDCE3425F65D7B0036FC63 /* FULightMakeupController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupController.m; sourceTree = ""; }; - ACBDCE3D25F65E310036FC63 /* FUBeautyController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBeautyController.m; sourceTree = ""; }; - ACBDCE3E25F65E310036FC63 /* FUBeautyController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBeautyController.h; sourceTree = ""; }; - ACC0B5AE25F126F0002B56FC /* FUHairController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHairController.m; sourceTree = ""; }; - ACC0B5AF25F126F0002B56FC /* FUHairController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHairController.h; sourceTree = ""; }; - ACC0B5B125F126F0002B56FC /* FUHairManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHairManager.h; sourceTree = ""; }; - ACC0B5B225F126F0002B56FC /* FUHairManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHairManager.m; sourceTree = ""; }; - ACC0B5B425F126F0002B56FC /* FUHairView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHairView.m; sourceTree = ""; }; - ACC0B5B525F126F0002B56FC /* FUHairView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHairView.h; sourceTree = ""; }; - ACC0B5B625F126F0002B56FC /* FUHairView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUHairView.xib; sourceTree = ""; }; - CB07A208DF5E6AEABC56481E /* Pods_FULiveDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FULiveDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD4D6EA521796EA400E02F39 /* change_face.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = change_face.bundle; sourceTree = ""; }; - CDA60854216F436D00A3DA93 /* kuloutou_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kuloutou_Animoji.png; sourceTree = ""; }; - CDA60855216F436D00A3DA93 /* baimao_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = baimao_Animoji.bundle; sourceTree = ""; }; - CDA60858216F436E00A3DA93 /* hetun_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = hetun_Animoji.bundle; sourceTree = ""; }; - CDA60859216F436E00A3DA93 /* baimao_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = baimao_Animoji.png; sourceTree = ""; }; - CDA6085A216F436E00A3DA93 /* hashiqi_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = hashiqi_Animoji.bundle; sourceTree = ""; }; - CDA6085B216F436E00A3DA93 /* frog_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = frog_Animoji.png; sourceTree = ""; }; - CDA6085C216F436E00A3DA93 /* kuloutou_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = kuloutou_Animoji.bundle; sourceTree = ""; }; - CDA6085D216F436E00A3DA93 /* hashiqi_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = hashiqi_Animoji.png; sourceTree = ""; }; - CDA6085E216F436E00A3DA93 /* huangya_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = huangya_Animoji.png; sourceTree = ""; }; - CDA6085F216F436E00A3DA93 /* hetun_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = hetun_Animoji.png; sourceTree = ""; }; - CDA60860216F436E00A3DA93 /* douniuquan_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = douniuquan_Animoji.bundle; sourceTree = ""; }; - CDA60861216F436E00A3DA93 /* douniuquan_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = douniuquan_Animoji.png; sourceTree = ""; }; - CDA60863216F436E00A3DA93 /* huangya_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = huangya_Animoji.bundle; sourceTree = ""; }; - CDA60864216F436E00A3DA93 /* frog_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = frog_Animoji.bundle; sourceTree = ""; }; - CDD1663B2628474B0070F570 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - CDD1663D262847520070F570 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - D595CE4A595DEF848B6EF7B3 /* Pods-FULiveDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FULiveDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo.release.xcconfig"; sourceTree = ""; }; - E3068C5E2510DA350034BDFE /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; - E307093B23580BFA006CC017 /* FULightMakeupCollectionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightMakeupCollectionView.h; sourceTree = ""; }; - E307093C23580BFA006CC017 /* FULightMakeupCollectionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupCollectionView.m; sourceTree = ""; }; - E307093F235815FF006CC017 /* FULightModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightModel.h; sourceTree = ""; }; - E3070940235815FF006CC017 /* FULightModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightModel.m; sourceTree = ""; }; - E30A2C132685F127000FFE0E /* baihu_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = baihu_Animoji.bundle; sourceTree = ""; }; - E30A2C142685F127000FFE0E /* wuxia_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = wuxia_Animoji.bundle; sourceTree = ""; }; - E30A2C152685F127000FFE0E /* baihu_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = baihu_Animoji.png; sourceTree = ""; }; - E30A2C162685F127000FFE0E /* wuxia_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = wuxia_Animoji.png; sourceTree = ""; }; - E30D5CFF2680984300EF70B1 /* UIImage+FU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImage+FU.h"; sourceTree = ""; }; - E30D5D002680984300EF70B1 /* UIImage+FU.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+FU.m"; sourceTree = ""; }; - E30EBA7A283341DC00538844 /* FUBGSegmentationRenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBGSegmentationRenderMediaViewController.h; sourceTree = ""; }; - E30EBA7B283341DC00538844 /* FUBGSegmentationRenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBGSegmentationRenderMediaViewController.m; sourceTree = ""; }; - E30EFB88273E61C500B6AE63 /* FUCombinationMakeupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCombinationMakeupCell.h; sourceTree = ""; }; - E30EFB89273E61C500B6AE63 /* FUCombinationMakeupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCombinationMakeupCell.m; sourceTree = ""; }; - E3120FC7274666FF000456D9 /* FUSingleMakeupProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSingleMakeupProtocol.h; sourceTree = ""; }; - E3120FCD274787F3000456D9 /* FUCustomizedMakeupView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCustomizedMakeupView.h; sourceTree = ""; }; - E3120FCE274787F3000456D9 /* FUCustomizedMakeupView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCustomizedMakeupView.m; sourceTree = ""; }; - E3120FD027478AF7000456D9 /* FUCustomizedMakeupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCustomizedMakeupCell.h; sourceTree = ""; }; - E3120FD127478AF7000456D9 /* FUCustomizedMakeupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCustomizedMakeupCell.m; sourceTree = ""; }; - E31D91272428D97D0054AFFA /* xiezhuan.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = xiezhuan.json; sourceTree = ""; }; - E31D91442429BE3D0054AFFA /* oumei.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = oumei.bundle; sourceTree = ""; }; - E31D91452429BE3D0054AFFA /* linjia.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = linjia.bundle; sourceTree = ""; }; - E31D91462429BE3D0054AFFA /* tianmei.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tianmei.bundle; sourceTree = ""; }; - E31D91472429BE3D0054AFFA /* wumei.bundle */ = {isa = PBXFileReference; lastKnownFileType = text; path = wumei.bundle; sourceTree = ""; }; - E31D91482429BE3D0054AFFA /* xinggan.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = xinggan.bundle; sourceTree = ""; }; - E31D914A2429BE3D0054AFFA /* wumei.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = wumei.json; sourceTree = ""; }; - E31D914B2429BE3D0054AFFA /* oumei.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = oumei.json; sourceTree = ""; }; - E31D914C2429BE3D0054AFFA /* tianmei.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tianmei.json; sourceTree = ""; }; - E31D914D2429BE3D0054AFFA /* xinggan.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = xinggan.json; sourceTree = ""; }; - E31D914E2429BE3D0054AFFA /* linjia.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = linjia.json; sourceTree = ""; }; - E3226447225F083F003A6182 /* xiandai_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = xiandai_ztt_fu.bundle; sourceTree = ""; }; - E3226448225F083F003A6182 /* ice_lm_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = ice_lm_fu.bundle; sourceTree = ""; }; - E322644B225F083F003A6182 /* sea_lm_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = sea_lm_fu.bundle; sourceTree = ""; }; - E322644E225F083F003A6182 /* hez_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = hez_ztt_fu.bundle; sourceTree = ""; }; - E322644F225F083F003A6182 /* gufeng_zh_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = text; path = gufeng_zh_fu.bundle; sourceTree = ""; }; - E322645A225F097E003A6182 /* luhantongkuan_ztt_fu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = luhantongkuan_ztt_fu.png; sourceTree = ""; }; - E322645B225F097E003A6182 /* luhantongkuan_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = luhantongkuan_ztt_fu.bundle; sourceTree = ""; }; - E322645C225F097E003A6182 /* sdx2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = sdx2.png; sourceTree = ""; }; - E322645D225F097E003A6182 /* xiaobianzi_zh_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiaobianzi_zh_fu.bundle; sourceTree = ""; }; - E322645E225F097E003A6182 /* xiaoxueshen_ztt_fu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = xiaoxueshen_ztt_fu.png; sourceTree = ""; }; - E322645F225F097E003A6182 /* qingqing_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = qingqing_ztt_fu.bundle; sourceTree = ""; }; - E3226460225F097E003A6182 /* sdx2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = sdx2.bundle; sourceTree = ""; }; - E3226461225F097E003A6182 /* future_warrior.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = future_warrior.bundle; sourceTree = ""; }; - E3226462225F097E003A6182 /* future_warrior.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = future_warrior.png; sourceTree = ""; }; - E3226463225F097F003A6182 /* qingqing_ztt_fu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = qingqing_ztt_fu.png; sourceTree = ""; }; - E3226464225F097F003A6182 /* xiaobianzi_zh_fu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = xiaobianzi_zh_fu.png; sourceTree = ""; }; - E3226465225F097F003A6182 /* xiaoxueshen_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiaoxueshen_ztt_fu.bundle; sourceTree = ""; }; - E3226472225F0B8C003A6182 /* ssd_thread_korheart.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ssd_thread_korheart.png; sourceTree = ""; }; - E3226473225F0B8C003A6182 /* ssd_thread_korheart.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_korheart.bundle; sourceTree = ""; }; - E3226476225F0CCA003A6182 /* bluebird.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = bluebird.png; sourceTree = ""; }; - E3226477225F0CCA003A6182 /* baozi.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = baozi.png; sourceTree = ""; }; - E3226478225F0CCA003A6182 /* tiger_huang.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tiger_huang.bundle; sourceTree = ""; }; - E3226479225F0CCA003A6182 /* tiger.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tiger.bundle; sourceTree = ""; }; - E322647A225F0CCA003A6182 /* tiger.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tiger.png; sourceTree = ""; }; - E322647B225F0CCA003A6182 /* xiongmao.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiongmao.bundle; sourceTree = ""; }; - E322647C225F0CCA003A6182 /* bluebird.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = bluebird.bundle; sourceTree = ""; }; - E322647D225F0CCA003A6182 /* xiongmao.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = xiongmao.png; sourceTree = ""; }; - E322647E225F0CCA003A6182 /* baozi.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = baozi.bundle; sourceTree = ""; }; - E322647F225F0CCA003A6182 /* lanhudie.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = lanhudie.bundle; sourceTree = ""; }; - E3226480225F0CCA003A6182 /* tiger_huang.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tiger_huang.png; sourceTree = ""; }; - E3226481225F0CCA003A6182 /* lanhudie.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = lanhudie.png; sourceTree = ""; }; - E3226483225F0CCA003A6182 /* fenhudie.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fenhudie.bundle; sourceTree = ""; }; - E3226485225F0CCB003A6182 /* tiger_bai.bundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tiger_bai.bundle; sourceTree = ""; }; - E3226486225F0CCB003A6182 /* fenhudie.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fenhudie.png; sourceTree = ""; }; - E3226487225F0CCB003A6182 /* tiger_bai.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tiger_bai.png; sourceTree = ""; }; - E322649A225F6CB7003A6182 /* jet_mask.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = jet_mask.png; sourceTree = ""; }; - E322649B225F6CB7003A6182 /* jet_mask.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = jet_mask.bundle; sourceTree = ""; }; - E32D08DB2875608200884AE5 /* FUHomepageModuleCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHomepageModuleCell.h; sourceTree = ""; }; - E32D08DC2875608200884AE5 /* FUHomepageModuleCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHomepageModuleCell.m; sourceTree = ""; }; - E334038722A1022100D56810 /* FUColourView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUColourView.h; sourceTree = ""; }; - E334038822A1022100D56810 /* FUColourView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUColourView.m; sourceTree = ""; }; - E334038A22A10BE900D56810 /* FUColourFlowLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUColourFlowLayout.h; sourceTree = ""; }; - E334038B22A10BE900D56810 /* FUColourFlowLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUColourFlowLayout.m; sourceTree = ""; }; - E33835052862DD770023482D /* ai_human_processor_gpu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_human_processor_gpu.bundle; sourceTree = ""; }; - E33C978E288E4C1400374C69 /* FUCommonUIComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUCommonUIComponent.xcodeproj; path = FUCommonUIComponent/FUCommonUIComponent.xcodeproj; sourceTree = ""; }; - E34202C12885033A0016DC9E /* mu_style_eyebrow_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_02.bundle; sourceTree = ""; }; - E34202C22885033A0016DC9E /* mu_style_eyebrow_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_01.bundle; sourceTree = ""; }; - E34202C32885033A0016DC9E /* mu_style_eyebrow_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_04.bundle; sourceTree = ""; }; - E34202C42885033A0016DC9E /* mu_style_eyebrow_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_03.bundle; sourceTree = ""; }; - E34202E5288532090016DC9E /* FUStickerRenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerRenderMediaViewController.h; sourceTree = ""; }; - E34202E6288532090016DC9E /* FUStickerRenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerRenderMediaViewController.m; sourceTree = ""; }; - E34378A524EE3EF30040B94A /* green_screen.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = green_screen.bundle; sourceTree = ""; }; - E3447EA428C203A2008E164C /* FURenderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FURenderKit.framework; sourceTree = ""; }; - E3447F0228C61B7C008E164C /* FUVideoComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUVideoComponent.xcodeproj; path = FUVideoComponent/FUVideoComponent.xcodeproj; sourceTree = ""; }; - E346BFDA270413160090F3B3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - E346BFDC2704191F0090F3B3 /* dongling.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = dongling.bundle; sourceTree = ""; }; - E346BFDD2704191F0090F3B3 /* diadiatu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = diadiatu.bundle; sourceTree = ""; }; - E346BFDE2704191F0090F3B3 /* guofeng.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = guofeng.bundle; sourceTree = ""; }; - E346BFDF2704191F0090F3B3 /* hunxie.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = hunxie.bundle; sourceTree = ""; }; - E346BFE4270419370090F3B3 /* guofeng.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = guofeng.json; sourceTree = ""; }; - E346BFE5270419370090F3B3 /* hunxie.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = hunxie.json; sourceTree = ""; }; - E346BFE6270419370090F3B3 /* diadiatu.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = diadiatu.json; sourceTree = ""; }; - E346BFE7270419370090F3B3 /* dongling.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dongling.json; sourceTree = ""; }; - E346BFF127044DF20090F3B3 /* mu_style_lip_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_lip_03.bundle; sourceTree = ""; }; - E346BFF227044DF20090F3B3 /* mu_style_lip_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_lip_01.bundle; sourceTree = ""; }; - E346BFF327044DF20090F3B3 /* mu_style_lip_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_lip_05.bundle; sourceTree = ""; }; - E346BFF427044DF20090F3B3 /* mu_style_lip_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_lip_02.bundle; sourceTree = ""; }; - E346BFF527044DF20090F3B3 /* mu_style_lip_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_lip_04.bundle; sourceTree = ""; }; - E3583E832711422F008E52A7 /* FULandmarkManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULandmarkManager.h; sourceTree = ""; }; - E3583E842711422F008E52A7 /* FULandmarkManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULandmarkManager.m; sourceTree = ""; }; - E3583E8827117458008E52A7 /* landmarks.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = landmarks.bundle; sourceTree = ""; }; - E35AE63B2226709C0076C375 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/FUAPIDemoBar.xib; sourceTree = ""; }; - E35AE6422226709C0076C375 /* FUBeautyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBeautyView.h; sourceTree = ""; }; - E35AE6432226709C0076C375 /* FUBeautyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBeautyView.m; sourceTree = ""; }; - E35AE6462226709C0076C375 /* FUDemoBarDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUDemoBarDefine.h; sourceTree = ""; }; - E35AE6492226709C0076C375 /* FUFilterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUFilterView.h; sourceTree = ""; }; - E35AE64A2226709C0076C375 /* FUFilterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUFilterView.m; sourceTree = ""; }; - E35AE6532226709C0076C375 /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = ""; }; - E35AE6582226709C0076C375 /* UIImage+demobar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+demobar.h"; sourceTree = ""; }; - E35AE6592226709C0076C375 /* UIImage+demobar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+demobar.m"; sourceTree = ""; }; - E36055AC27424A4E000C4421 /* FUMakeupManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupManager.h; sourceTree = ""; }; - E36055AD27424A4E000C4421 /* FUMakeupManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupManager.m; sourceTree = ""; }; - E3618FDF2857307C00E7D8D2 /* FUPersistentBeautyModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPersistentBeautyModel.h; sourceTree = ""; }; - E3618FE02857307C00E7D8D2 /* FUPersistentBeautyModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPersistentBeautyModel.m; sourceTree = ""; }; - E3618FF2285867A000E7D8D2 /* FUMakeupRenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupRenderMediaViewController.h; sourceTree = ""; }; - E3618FF3285867A000E7D8D2 /* FUMakeupRenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupRenderMediaViewController.m; sourceTree = ""; }; - E361CF8F283DBDAA00AC1F4C /* ai_human_processor.bundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ai_human_processor.bundle; sourceTree = ""; }; - E364E7CE268DA8EF008B6697 /* kaola_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = kaola_Animoji.bundle; sourceTree = ""; }; - E364E7CF268DA8EF008B6697 /* kaola_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kaola_Animoji.png; sourceTree = ""; }; - E3677125273D13420060E564 /* FUCombinationMakeupModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCombinationMakeupModel.h; sourceTree = ""; }; - E3677126273D13420060E564 /* FUCombinationMakeupModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCombinationMakeupModel.m; sourceTree = ""; }; - E3677128273E05B50060E564 /* FUSingleMakeupModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSingleMakeupModel.h; sourceTree = ""; }; - E3677129273E05B50060E564 /* FUSingleMakeupModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSingleMakeupModel.m; sourceTree = ""; }; - E367712E273E45850060E564 /* FUMakeupViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupViewController.h; sourceTree = ""; }; - E367712F273E45850060E564 /* FUMakeupViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupViewController.m; sourceTree = ""; }; - E3677131273E45E50060E564 /* FUCombinationMakeupView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCombinationMakeupView.h; sourceTree = ""; }; - E3677132273E45E50060E564 /* FUCombinationMakeupView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCombinationMakeupView.m; sourceTree = ""; }; - E3706F44216B3AE6004BFC7F /* FUPosterCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPosterCell.h; sourceTree = ""; }; - E3706F45216B3AE6004BFC7F /* FUPosterCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPosterCell.m; sourceTree = ""; }; - E3706F49216B4DDC004BFC7F /* FUPosterListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPosterListViewController.h; sourceTree = ""; }; - E3706F4A216B4DDC004BFC7F /* FUPosterListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPosterListViewController.m; sourceTree = ""; }; - E3706F4B216B4DDC004BFC7F /* FUPosterListViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FUPosterListViewController.xib; sourceTree = ""; }; - E3706F4E216B4E4E004BFC7F /* FUPosterCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FUPosterCell.xib; sourceTree = ""; }; - E3706F50216B68B1004BFC7F /* FUSaveViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSaveViewController.h; sourceTree = ""; }; - E3706F51216B68B1004BFC7F /* FUSaveViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSaveViewController.m; sourceTree = ""; }; - E3706F52216B68B1004BFC7F /* FUSaveViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FUSaveViewController.xib; sourceTree = ""; }; - E3706F55216C304C004BFC7F /* FUEditImageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUEditImageViewController.h; sourceTree = ""; }; - E3706F56216C304C004BFC7F /* FUEditImageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUEditImageViewController.m; sourceTree = ""; }; - E3706F57216C304C004BFC7F /* FUEditImageViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FUEditImageViewController.xib; sourceTree = ""; }; - E3706F6D216ED9E1004BFC7F /* loading.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = loading.gif; sourceTree = ""; }; - E3728B8F2303F05B00B1B9BF /* qgirl_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = qgirl_Animoji.bundle; sourceTree = ""; }; - E3728B902303F05B00B1B9BF /* qgirl_Animoji.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = qgirl_Animoji.png; sourceTree = ""; }; - E3731233287BC02B004A465A /* boyfriend3_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = boyfriend3_740.bundle; sourceTree = ""; }; - E3731234287BC02C004A465A /* boyfriend1_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = boyfriend1_740.bundle; sourceTree = ""; }; - E3731235287BC02C004A465A /* boyfriend2_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = boyfriend2_740.bundle; sourceTree = ""; }; - E3731239287BC033004A465A /* human_outline_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = human_outline_740.bundle; sourceTree = ""; }; - E374C003288548D700931142 /* FUARMaskViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUARMaskViewModel.h; sourceTree = ""; }; - E374C004288548D700931142 /* FUARMaskViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUARMaskViewModel.m; sourceTree = ""; }; - E374C00628854AF500931142 /* FUARMaskViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUARMaskViewController.h; sourceTree = ""; }; - E374C00728854AF500931142 /* FUARMaskViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUARMaskViewController.m; sourceTree = ""; }; - E374C00C28854DE400931142 /* FUHilariousViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHilariousViewController.h; sourceTree = ""; }; - E374C00D28854DE400931142 /* FUHilariousViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHilariousViewController.m; sourceTree = ""; }; - E374C0552886627200931142 /* FUExpressionRecognitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUExpressionRecognitionViewController.h; sourceTree = ""; }; - E374C0562886627200931142 /* FUExpressionRecognitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUExpressionRecognitionViewController.m; sourceTree = ""; }; - E374C06A2886838900931142 /* FUDistortingMirrorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUDistortingMirrorViewController.m; sourceTree = ""; }; - E374C06B2886838900931142 /* FUDistortingMirrorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUDistortingMirrorViewController.h; sourceTree = ""; }; - E374C06D2886839000931142 /* FUDistortingMirrorViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUDistortingMirrorViewModel.m; sourceTree = ""; }; - E374C06E2886839000931142 /* FUDistortingMirrorViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUDistortingMirrorViewModel.h; sourceTree = ""; }; - E374C0732886840200931142 /* FUExpressionRecognitionViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUExpressionRecognitionViewModel.m; sourceTree = ""; }; - E374C0742886840200931142 /* FUExpressionRecognitionViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUExpressionRecognitionViewModel.h; sourceTree = ""; }; - E374C0762886842B00931142 /* FUHilariousViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHilariousViewModel.m; sourceTree = ""; }; - E374C0772886842B00931142 /* FUHilariousViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHilariousViewModel.h; sourceTree = ""; }; - E374C079288684C500931142 /* FUGestureRecognitionViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGestureRecognitionViewModel.m; sourceTree = ""; }; - E374C07A288684C500931142 /* FUGestureRecognitionViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGestureRecognitionViewModel.h; sourceTree = ""; }; - E374C07C288684D000931142 /* FUGestureRecognitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGestureRecognitionViewController.h; sourceTree = ""; }; - E374C07D288684D000931142 /* FUGestureRecognitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGestureRecognitionViewController.m; sourceTree = ""; }; - E37743972513663400682A2D /* hotStamping.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = hotStamping.mp4; sourceTree = ""; }; - E377439A2513663500682A2D /* inkPainting.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = inkPainting.mp4; sourceTree = ""; }; - E377439B2513663500682A2D /* springForest.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = springForest.mp4; sourceTree = ""; }; - E37743A12513665B00682A2D /* beach.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = beach.mp4; sourceTree = ""; }; - E37743A32513666400682A2D /* classroom.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = classroom.mp4; sourceTree = ""; }; - E379ED70223644B20080BD04 /* makeup_whole.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = makeup_whole.json; sourceTree = ""; }; - E37B0B4D218147B700066133 /* ctrl_rain.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ctrl_rain.bundle; sourceTree = ""; }; - E37B0B4F218147CE00066133 /* ctrl_snow.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ctrl_snow.bundle; sourceTree = ""; }; - E37B0B51218147E200066133 /* ctrl_flower.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ctrl_flower.bundle; sourceTree = ""; }; - E37B0B5321814AF200066133 /* ctrl_flower.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ctrl_flower.png; sourceTree = ""; }; - E37B0B5521814AFA00066133 /* ctrl_rain.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ctrl_rain.png; sourceTree = ""; }; - E37B0B5721814AFF00066133 /* ctrl_snow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ctrl_snow.png; sourceTree = ""; }; - E37CBD9421FFE728000C9C42 /* FUHeadButtonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHeadButtonView.h; sourceTree = ""; }; - E37CBD9521FFE728000C9C42 /* FUHeadButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHeadButtonView.m; sourceTree = ""; }; - E37CBDA522029EF0000C9C42 /* FUPosterController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPosterController.h; sourceTree = ""; }; - E37CBDA622029EF0000C9C42 /* FUPosterController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPosterController.m; sourceTree = ""; }; - E37CBDA92202C937000C9C42 /* FUAnimojiController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUAnimojiController.h; sourceTree = ""; }; - E37CBDAA2202C937000C9C42 /* FUAnimojiController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUAnimojiController.m; sourceTree = ""; }; - E37D20B42754A472007BE062 /* FULightMakeupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightMakeupCell.h; sourceTree = ""; }; - E37D20B52754A472007BE062 /* FULightMakeupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupCell.m; sourceTree = ""; }; - E37E54F228729A01002952A1 /* FUHomepageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHomepageViewController.h; sourceTree = ""; }; - E37E54F328729A01002952A1 /* FUHomepageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHomepageViewController.m; sourceTree = ""; }; - E37E54F528729A38002952A1 /* FUHomepageViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHomepageViewModel.h; sourceTree = ""; }; - E37E54F628729A38002952A1 /* FUHomepageViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHomepageViewModel.m; sourceTree = ""; }; - E37E54F828729BC3002952A1 /* FUHomepageModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHomepageModel.h; sourceTree = ""; }; - E37E54F928729BC3002952A1 /* FUHomepageModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHomepageModel.m; sourceTree = ""; }; - E37E55082872BD11002952A1 /* homepage_data_source.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = homepage_data_source.json; sourceTree = ""; }; - E37ED5DF282A44FF004E6A0B /* ai_face_recognizer.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_face_recognizer.bundle; sourceTree = ""; }; - E37ED5E0282A44FF004E6A0B /* ai_hand_processor.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_hand_processor.bundle; sourceTree = ""; }; - E37ED5E1282A44FF004E6A0B /* ai_face_processor.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_face_processor.bundle; sourceTree = ""; }; - E37ED5E2282A44FF004E6A0B /* ai_bgseg_green.bundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ai_bgseg_green.bundle; sourceTree = ""; }; - E37ED5E3282A44FF004E6A0B /* ai_face_processor_lite.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_face_processor_lite.bundle; sourceTree = ""; }; - E37ED5E7282A44FF004E6A0B /* tongue.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tongue.bundle; sourceTree = ""; }; - E37ED5E8282A44FF004E6A0B /* fxaa.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fxaa.bundle; sourceTree = ""; }; - E37ED5E9282A44FF004E6A0B /* face_makeup.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = face_makeup.bundle; sourceTree = ""; }; - E37ED5EA282A44FF004E6A0B /* controller_cpp.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = controller_cpp.bundle; sourceTree = ""; }; - E37ED5EB282A44FF004E6A0B /* body_slim.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = body_slim.bundle; sourceTree = ""; }; - E37ED5EC282A44FF004E6A0B /* fuzzytoonfilter.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fuzzytoonfilter.bundle; sourceTree = ""; }; - E37ED5ED282A44FF004E6A0B /* face_beautification.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = face_beautification.bundle; sourceTree = ""; }; - E37FF63722F3E6A80014821C /* FUPositionInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPositionInfo.h; sourceTree = ""; }; - E37FF63822F3E6A80014821C /* FUPositionInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPositionInfo.m; sourceTree = ""; }; - E37FF63A22F3E82F0014821C /* BodyBeautyDefault.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = BodyBeautyDefault.json; sourceTree = ""; }; - E37FF63C22F3EA560014821C /* FUBodyBeautyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyView.h; sourceTree = ""; }; - E37FF63D22F3EA560014821C /* FUBodyBeautyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyView.m; sourceTree = ""; }; - E37FF63F22F404820014821C /* FUPositionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPositionCell.h; sourceTree = ""; }; - E37FF64022F404820014821C /* FUPositionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPositionCell.m; sourceTree = ""; }; - E3833EC123150781007D3A47 /* FUSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUSwitch.h; sourceTree = ""; }; - E3833EC223150782007D3A47 /* FUSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUSwitch.m; sourceTree = ""; }; - E384F1AE277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyRenderMediaViewController.h; sourceTree = ""; }; - E384F1AF277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyRenderMediaViewController.m; sourceTree = ""; }; - E386784C28813F8F005A94A4 /* FUStickerViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerViewModel.h; sourceTree = ""; }; - E386784D28813F8F005A94A4 /* FUStickerViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerViewModel.m; sourceTree = ""; }; - E3867858288147DA005A94A4 /* FUStickerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerViewController.h; sourceTree = ""; }; - E3867859288147DA005A94A4 /* FUStickerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerViewController.m; sourceTree = ""; }; - E38A62D724A0D181006F4465 /* FUBodyCollectionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyCollectionView.h; sourceTree = ""; }; - E38A62D824A0D181006F4465 /* FUBodyCollectionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyCollectionView.m; sourceTree = ""; }; - E38A67D223CF1E9D00AD9DD0 /* mu_style_blush_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_blush_02.bundle; sourceTree = ""; }; - E38A67D323CF1E9D00AD9DD0 /* mu_style_blush_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_blush_04.bundle; sourceTree = ""; }; - E38A67D423CF1E9D00AD9DD0 /* mu_style_blush_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_blush_01.bundle; sourceTree = ""; }; - E38A67D523CF1E9D00AD9DD0 /* mu_style_blush_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_blush_03.bundle; sourceTree = ""; }; - E38A67D623CF1E9D00AD9DD0 /* mu_style_blush_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_blush_05.bundle; sourceTree = ""; }; - E38A67DC23CF1EB800AD9DD0 /* mu_style_foundation_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_foundation_01.bundle; sourceTree = ""; }; - E38A67DE23CF1ECA00AD9DD0 /* mu_style_highlight_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_highlight_01.bundle; sourceTree = ""; }; - E38A67DF23CF1ECB00AD9DD0 /* mu_style_highlight_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_highlight_02.bundle; sourceTree = ""; }; - E38A67E223CF1EE200AD9DD0 /* mu_style_eyelash_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyelash_06.bundle; sourceTree = ""; }; - E38A67E323CF1EE300AD9DD0 /* mu_style_eyelash_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyelash_02.bundle; sourceTree = ""; }; - E38A67E423CF1EE300AD9DD0 /* mu_style_eyelash_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyelash_03.bundle; sourceTree = ""; }; - E38A67E523CF1EE300AD9DD0 /* mu_style_eyelash_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyelash_01.bundle; sourceTree = ""; }; - E38A67E623CF1EE300AD9DD0 /* mu_style_eyelash_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyelash_04.bundle; sourceTree = ""; }; - E38A67E723CF1EE300AD9DD0 /* mu_style_eyelash_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyelash_05.bundle; sourceTree = ""; }; - E38A67F223CF1F3D00AD9DD0 /* mu_style_eyeliner_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_06.bundle; sourceTree = ""; }; - E38A67F323CF1F3D00AD9DD0 /* mu_style_eyeliner_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_03.bundle; sourceTree = ""; }; - E38A67F423CF1F3D00AD9DD0 /* mu_style_eyeliner_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_01.bundle; sourceTree = ""; }; - E38A67F523CF1F3D00AD9DD0 /* mu_style_eyeliner_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_04.bundle; sourceTree = ""; }; - E38A67F623CF1F3D00AD9DD0 /* mu_style_eyeliner_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_02.bundle; sourceTree = ""; }; - E38A67F723CF1F3D00AD9DD0 /* mu_style_eyeliner_07.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_07.bundle; sourceTree = ""; }; - E38A67F823CF1F3E00AD9DD0 /* mu_style_eyeliner_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeliner_05.bundle; sourceTree = ""; }; - E38A680023CF1F7700AD9DD0 /* mu_style_eyeshadow_08.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_08.bundle; sourceTree = ""; }; - E38A680123CF1F7700AD9DD0 /* mu_style_eyeshadow_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_01.bundle; sourceTree = ""; }; - E38A680223CF1F7700AD9DD0 /* mu_style_eyeshadow_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_02.bundle; sourceTree = ""; }; - E38A680323CF1F7800AD9DD0 /* mu_style_eyeshadow_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_06.bundle; sourceTree = ""; }; - E38A680423CF1F7800AD9DD0 /* mu_style_eyeshadow_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_05.bundle; sourceTree = ""; }; - E38A680523CF1F7800AD9DD0 /* mu_style_eyeshadow_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_04.bundle; sourceTree = ""; }; - E38A680623CF1F7800AD9DD0 /* mu_style_eyeshadow_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_03.bundle; sourceTree = ""; }; - E38A680723CF1F7800AD9DD0 /* mu_style_eyeshadow_07.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_eyeshadow_07.bundle; sourceTree = ""; }; - E38A681023CF1F9200AD9DD0 /* mu_style_contour_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mu_style_contour_01.bundle; sourceTree = ""; }; - E38CA9CC2823ABB400414FCA /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - E38D2F3824A07D760069AA0A /* anim_idle.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = anim_idle.bundle; sourceTree = ""; }; - E39944C226C250BE003E4EFA /* FUSafeAreaCollectionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSafeAreaCollectionView.h; sourceTree = ""; }; - E39944C326C250BE003E4EFA /* FUSafeAreaCollectionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSafeAreaCollectionView.m; sourceTree = ""; }; - E39944D726C29492003E4EFA /* FUGreenScreenSafeAreaModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenSafeAreaModel.h; sourceTree = ""; }; - E39944D826C29492003E4EFA /* FUGreenScreenSafeAreaModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenSafeAreaModel.m; sourceTree = ""; }; - E39944ED26C3B5BA003E4EFA /* safe_area_2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = safe_area_2.jpg; sourceTree = ""; }; - E39944EE26C3B5BA003E4EFA /* safe_area_1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = safe_area_1.jpg; sourceTree = ""; }; - E39B803D242A18D900E837E0 /* mu_eyebrow_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_01.png; sourceTree = ""; }; - E39B803F242A192100E837E0 /* mu_blush_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_01.png; sourceTree = ""; }; - E39B8041242A192A00E837E0 /* mu_blush_23.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_23.png; sourceTree = ""; }; - E39B8043242A194200E837E0 /* mu_blush_20.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_20.png; sourceTree = ""; }; - E39B8045242A194700E837E0 /* mu_blush_22.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_22.png; sourceTree = ""; }; - E39B8047242A197500E837E0 /* mu_eyebrow_17.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_17.png; sourceTree = ""; }; - E39B8048242A197500E837E0 /* mu_eyebrow_18.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_18.png; sourceTree = ""; }; - E39B8049242A197500E837E0 /* mu_eyebrow_16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_16.png; sourceTree = ""; }; - E39B804A242A197500E837E0 /* mu_eyebrow_19.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_19.png; sourceTree = ""; }; - E39B804F242A19AD00E837E0 /* mu_eyeshadow_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_01.png; sourceTree = ""; }; - E39B8051242A19B900E837E0 /* mu_eyeshadow_19.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_19.png; sourceTree = ""; }; - E39B8052242A19B900E837E0 /* mu_eyeshadow_21.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_21.png; sourceTree = ""; }; - E39B8053242A19B900E837E0 /* mu_eyeshadow_18.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_18.png; sourceTree = ""; }; - E39B8054242A19B900E837E0 /* mu_eyeshadow_20.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_20.png; sourceTree = ""; }; - E39CF9462499F9E8003A6C14 /* FUBodyAvatarController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyAvatarController.h; sourceTree = ""; }; - E39CF9472499F9E8003A6C14 /* FUBodyAvatarController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyAvatarController.m; sourceTree = ""; }; - E39CF94A249A0307003A6C14 /* lipgloss_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lipgloss_1@3x.png"; sourceTree = ""; }; - E39CF94B249A0307003A6C14 /* female_hair_23.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = female_hair_23.bundle; sourceTree = ""; }; - E39CF94C249A0307003A6C14 /* xiezi_danxie@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xiezi_danxie@3x.png"; sourceTree = ""; }; - E39CF94D249A0307003A6C14 /* Eyeliner_1.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = Eyeliner_1.bundle; sourceTree = ""; }; - E39CF94E249A0307003A6C14 /* facemakeup_3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facemakeup_3.bundle; sourceTree = ""; }; - E39CF94F249A0307003A6C14 /* taozhuang_12.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = taozhuang_12.bundle; sourceTree = ""; }; - E39CF950249A0307003A6C14 /* Eyelash_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Eyelash_1@3x.png"; sourceTree = ""; }; - E39CF951249A0307003A6C14 /* lipgloss_1.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = lipgloss_1.bundle; sourceTree = ""; }; - E39CF952249A0307003A6C14 /* Eyeshadow_4.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = Eyeshadow_4.bundle; sourceTree = ""; }; - E39CF953249A0307003A6C14 /* toushi_5@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "toushi_5@3x.png"; sourceTree = ""; }; - E39CF954249A0307003A6C14 /* headnv.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = headnv.bundle; sourceTree = ""; }; - E39CF955249A0307003A6C14 /* midBody_female.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = midBody_female.bundle; sourceTree = ""; }; - E39CF956249A0307003A6C14 /* Eyeshadow_4@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Eyeshadow_4@3x.png"; sourceTree = ""; }; - E39CF957249A0307003A6C14 /* toushi_5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = toushi_5.bundle; sourceTree = ""; }; - E39CF958249A0307003A6C14 /* taozhuang_12@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "taozhuang_12@3x.png"; sourceTree = ""; }; - E39CF959249A0307003A6C14 /* Eyeliner_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Eyeliner_1@3x.png"; sourceTree = ""; }; - E39CF95A249A0307003A6C14 /* facemakeup_3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "facemakeup_3@3x.png"; sourceTree = ""; }; - E39CF95B249A0307003A6C14 /* xiezi_danxie.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiezi_danxie.bundle; sourceTree = ""; }; - E39CF95C249A0307003A6C14 /* eyelash_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = eyelash_01.bundle; sourceTree = ""; }; - E39CF95E249A030A003A6C14 /* male_hair_5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = male_hair_5.bundle; sourceTree = ""; }; - E39CF95F249A030A003A6C14 /* xiezi_tuoxie_2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiezi_tuoxie_2.bundle; sourceTree = ""; }; - E39CF960249A030A003A6C14 /* toushi_7@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "toushi_7@3x.png"; sourceTree = ""; }; - E39CF961249A030A003A6C14 /* peishi_erding_2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = peishi_erding_2.bundle; sourceTree = ""; }; - E39CF962249A030A003A6C14 /* kuzi_changku_5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = kuzi_changku_5.bundle; sourceTree = ""; }; - E39CF963249A030A003A6C14 /* waitao_3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "waitao_3@3x.png"; sourceTree = ""; }; - E39CF964249A030A003A6C14 /* headnan.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = headnan.bundle; sourceTree = ""; }; - E39CF965249A030A003A6C14 /* toushi_7.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = toushi_7.bundle; sourceTree = ""; }; - E39CF966249A030A003A6C14 /* peishi_erding_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "peishi_erding_2@3x.png"; sourceTree = ""; }; - E39CF967249A030A003A6C14 /* kuzi_changku_5@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "kuzi_changku_5@3x.png"; sourceTree = ""; }; - E39CF968249A030A003A6C14 /* waitao_3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = waitao_3.bundle; sourceTree = ""; }; - E39CF969249A030A003A6C14 /* xiezi_tuoxie_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xiezi_tuoxie_2@3x.png"; sourceTree = ""; }; - E39CF96A249A030A003A6C14 /* midBody_male.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = midBody_male.bundle; sourceTree = ""; }; - E39CF98B249A117B003A6C14 /* controller_config.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = controller_config.bundle; sourceTree = ""; }; - E39CF98D249A1187003A6C14 /* default_bg.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = default_bg.bundle; sourceTree = ""; }; - E39CF991249A1DB4003A6C14 /* avatar_nv_image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = avatar_nv_image.png; sourceTree = ""; }; - E39CF993249A1DBD003A6C14 /* avatar_nan_image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = avatar_nan_image.png; sourceTree = ""; }; - E39CF996249A39F0003A6C14 /* big_head_facewarp5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp5.bundle; sourceTree = ""; }; - E39CF997249A39F1003A6C14 /* big_head_facewarp6.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp6.bundle; sourceTree = ""; }; - E39CF998249A39F3003A6C14 /* big_head_facewarp4.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp4.bundle; sourceTree = ""; }; - E39CF999249A39F4003A6C14 /* big_head_facewarp2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp2.bundle; sourceTree = ""; }; - E39E1B12222D0F49008F76A4 /* makeup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = makeup.json; sourceTree = ""; }; - E3A74CE5224B24AA0058E1EE /* light_makeup.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = light_makeup.bundle; sourceTree = ""; }; - E3B3D0EF2350A99000263116 /* FUPopupMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUPopupMenu.h; sourceTree = ""; }; - E3B3D0F02350A99000263116 /* FUPopupMenu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUPopupMenu.m; sourceTree = ""; }; - E3B3D7662761AF4700FF0FAC /* FUBeautyRenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyRenderMediaViewController.h; sourceTree = ""; }; - E3B3D7672761AF4700FF0FAC /* FUBeautyRenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyRenderMediaViewController.m; sourceTree = ""; }; - E3B3D76E2761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenRenderMediaViewController.h; sourceTree = ""; }; - E3B3D76F2761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenRenderMediaViewController.m; sourceTree = ""; }; - E3B51FF1275F43490098314E /* FURenderMediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FURenderMediaViewController.h; sourceTree = ""; }; - E3B51FF2275F43490098314E /* FURenderMediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FURenderMediaViewController.m; sourceTree = ""; }; - E3BE2B79274B6389001679AD /* FUMakeupModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupModel.h; sourceTree = ""; }; - E3BE2B7A274B6389001679AD /* FUMakeupModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupModel.m; sourceTree = ""; }; - E3BEE31A26BA8831001220D1 /* UIView+FU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+FU.h"; sourceTree = ""; }; - E3BEE31B26BA8831001220D1 /* UIView+FU.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+FU.m"; sourceTree = ""; }; - E3C14DDB22ADFE7D004C20C4 /* lightMakeup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = lightMakeup.json; sourceTree = ""; }; - E3C4889D2485EB050070D88E /* FUHomepageHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHomepageHeaderView.m; sourceTree = ""; }; - E3C4889E2485EB050070D88E /* FUHomepageHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHomepageHeaderView.h; sourceTree = ""; }; - E3C8253E2223EBC900494DE4 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; - E3C8875623C479EA00CA732C /* FUBeautyParam.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyParam.h; sourceTree = ""; }; - E3C8875723C479EA00CA732C /* FUBeautyParam.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyParam.m; sourceTree = ""; }; - E3C8875923C47AEC00CA732C /* FUAPIDemoBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUAPIDemoBar.m; sourceTree = ""; }; - E3C8875A23C47AEC00CA732C /* FUAPIDemoBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUAPIDemoBar.h; sourceTree = ""; }; - E3CB950123CC6EBC000D1695 /* jianling.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = jianling.bundle; sourceTree = ""; }; - E3CB950223CC6EBC000D1695 /* chaomo.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = chaomo.bundle; sourceTree = ""; }; - E3CB950323CC6EBC000D1695 /* nuandong.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = nuandong.bundle; sourceTree = ""; }; - E3CB950523CC6EBD000D1695 /* chuju.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chuju.json; sourceTree = ""; }; - E3CB950623CC6EBD000D1695 /* Rose.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Rose.json; sourceTree = ""; }; - E3CB950723CC6EBD000D1695 /* nuandong.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = nuandong.json; sourceTree = ""; }; - E3CB950823CC6EBD000D1695 /* qianzhihe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = qianzhihe.json; sourceTree = ""; }; - E3CB950923CC6EBD000D1695 /* renyu.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = renyu.json; sourceTree = ""; }; - E3CB950A23CC6EBD000D1695 /* yanshimao.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = yanshimao.json; sourceTree = ""; }; - E3CB950B23CC6EBD000D1695 /* gangfeng.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = gangfeng.json; sourceTree = ""; }; - E3CB950C23CC6EBD000D1695 /* chuqiu.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chuqiu.json; sourceTree = ""; }; - E3CB950D23CC6EBD000D1695 /* shaonv.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = shaonv.json; sourceTree = ""; }; - E3CB950E23CC6EBD000D1695 /* ziyun.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ziyun.json; sourceTree = ""; }; - E3CB950F23CC6EBD000D1695 /* jianling.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = jianling.json; sourceTree = ""; }; - E3CB951023CC6EBD000D1695 /* hongfeng.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = hongfeng.json; sourceTree = ""; }; - E3CB951123CC6EBD000D1695 /* chaomo.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chaomo.json; sourceTree = ""; }; - E3CB951223CC6EBD000D1695 /* yanshimao.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = yanshimao.bundle; sourceTree = ""; }; - E3CB951323CC6EBD000D1695 /* chuqiu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = chuqiu.bundle; sourceTree = ""; }; - E3CB951423CC6EBD000D1695 /* chuju.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = chuju.bundle; sourceTree = ""; }; - E3CB951523CC6EBE000D1695 /* gangfeng.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = gangfeng.bundle; sourceTree = ""; }; - E3CB951623CC6EBE000D1695 /* renyu.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = renyu.bundle; sourceTree = ""; }; - E3CB951723CC6EBE000D1695 /* ziyun.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = ziyun.bundle; sourceTree = ""; }; - E3CB951823CC6EBE000D1695 /* shaonv.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = shaonv.bundle; sourceTree = ""; }; - E3CB951923CC6EBE000D1695 /* qianzhihe.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = qianzhihe.bundle; sourceTree = ""; }; - E3CB951A23CC6EBE000D1695 /* hongfeng.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = hongfeng.bundle; sourceTree = ""; }; - E3CB951B23CC6EBF000D1695 /* Rose.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Rose.bundle; sourceTree = ""; }; - E3CE4CB026CBBDD300ED0B4E /* docs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = docs; sourceTree = ""; }; - E3DD0F5B2484D7FC0064CF7E /* hair_gradient.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hair_gradient.bundle; sourceTree = ""; }; - E3DD0F5D2484D7FC0064CF7E /* hair_normal.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hair_normal.bundle; sourceTree = ""; }; - E3DD0F782484DA6E0064CF7E /* CoreML.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreML.framework; path = System/Library/Frameworks/CoreML.framework; sourceTree = SDKROOT; }; - E3DF96BD2369403D00DB49B2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - E3DF96BF2369405600DB49B2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - E3EFB834249B0CED00E2903E /* big_head_facewarp1.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp1.bundle; sourceTree = ""; }; - E3EFB835249B0CEE00E2903E /* big_head_facewarp3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp3.bundle; sourceTree = ""; }; - E3FA7BAD2514985300D07E92 /* science.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = science.mp4; sourceTree = ""; }; + B3711DF38725A8956C408A78 /* Pods-FULiveDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FULiveDemo.debug.xcconfig"; path = "Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo.debug.xcconfig"; sourceTree = ""; }; + BF62D7141D5E58E477FC9C7B /* Pods-FULiveDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FULiveDemo.release.xcconfig"; path = "Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo.release.xcconfig"; sourceTree = ""; }; + E30721C628A234A000332859 /* FUImageRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUImageRenderViewModel.h; sourceTree = ""; }; + E30721C728A234A000332859 /* FUImageRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUImageRenderViewModel.m; sourceTree = ""; }; + E30721CA28A2369300332859 /* FUVideoRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUVideoRenderViewModel.h; sourceTree = ""; }; + E30721CB28A2369300332859 /* FUVideoRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUVideoRenderViewModel.m; sourceTree = ""; }; + E30721D128A2545100332859 /* FUStickerImageRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerImageRenderViewController.h; sourceTree = ""; }; + E30721D228A2545100332859 /* FUStickerImageRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerImageRenderViewController.m; sourceTree = ""; }; + E30721D428A2548500332859 /* FUStickerImageRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerImageRenderViewModel.h; sourceTree = ""; }; + E30721D528A2548500332859 /* FUStickerImageRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerImageRenderViewModel.m; sourceTree = ""; }; + E3328D9328E4705800216BDC /* test_configurations.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = test_configurations.plist; sourceTree = ""; }; + E3381C9A28DB12C1005C2E57 /* docs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = docs; sourceTree = ""; }; + E3381CE028DD647E005C2E57 /* SVProgressHUD+FU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD+FU.h"; sourceTree = ""; }; + E3381CE128DD647E005C2E57 /* SVProgressHUD+FU.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SVProgressHUD+FU.m"; sourceTree = ""; }; + E3381CF428DD864F005C2E57 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + E340698B288A5A9B00373612 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E340698E288A730300373612 /* FURenderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FURenderViewController.h; sourceTree = ""; }; + E340698F288A730300373612 /* FURenderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FURenderViewController.m; sourceTree = ""; }; + E3406991288A76FE00373612 /* FUNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUNavigationController.h; sourceTree = ""; }; + E3406992288A76FE00373612 /* FUNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUNavigationController.m; sourceTree = ""; }; + E3406996288A7B4100373612 /* FULiveDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULiveDefine.h; sourceTree = ""; }; + E3406998288A7C0600373612 /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; + E340699D288A824700373612 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + E340699F288A824800373612 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + E34069A1288A836D00373612 /* UIColor+FU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+FU.h"; sourceTree = ""; }; + E34069A2288A836D00373612 /* UIColor+FU.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+FU.m"; sourceTree = ""; }; + E34069A6288A87D200373612 /* homepage_data_source.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = homepage_data_source.json; sourceTree = ""; }; + E34069AC288A891700373612 /* tiezhi_data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tiezhi_data.json; sourceTree = ""; }; + E34069AD288A891700373612 /* 流星_00036.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00036.png"; sourceTree = ""; }; + E34069AE288A891700373612 /* 流星_00037.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00037.png"; sourceTree = ""; }; + E34069AF288A891700373612 /* 流星_00041.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00041.png"; sourceTree = ""; }; + E34069B0288A891700373612 /* 流星_00040.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00040.png"; sourceTree = ""; }; + E34069B1288A891700373612 /* 流星_00042.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00042.png"; sourceTree = ""; }; + E34069B2288A891700373612 /* 流星_00043.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00043.png"; sourceTree = ""; }; + E34069B3288A891700373612 /* 流星_00047.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00047.png"; sourceTree = ""; }; + E34069B4288A891700373612 /* 流星_00052.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00052.png"; sourceTree = ""; }; + E34069B5288A891700373612 /* 流星_00046.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00046.png"; sourceTree = ""; }; + E34069B6288A891700373612 /* 流星_00050.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00050.png"; sourceTree = ""; }; + E34069B7288A891700373612 /* 流星_00044.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00044.png"; sourceTree = ""; }; + E34069B8288A891700373612 /* 流星_00045.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00045.png"; sourceTree = ""; }; + E34069B9288A891700373612 /* 流星_00051.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00051.png"; sourceTree = ""; }; + E34069BA288A891700373612 /* 流星_00048.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00048.png"; sourceTree = ""; }; + E34069BB288A891700373612 /* 流星_00049.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00049.png"; sourceTree = ""; }; + E34069BC288A891700373612 /* 流星_00039.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00039.png"; sourceTree = ""; }; + E34069BD288A891700373612 /* 流星_00038.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "流星_00038.png"; sourceTree = ""; }; + E34069D7288A992800373612 /* FURenderKitManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FURenderKitManager.h; sourceTree = ""; }; + E34069D8288A992800373612 /* FURenderKitManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FURenderKitManager.m; sourceTree = ""; }; + E34069DA288A9A4A00373612 /* authpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = authpack.h; sourceTree = ""; }; + E3406A26288AAA0600373612 /* FURenderViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FURenderViewModel.m; sourceTree = ""; }; + E3406A27288AAA0600373612 /* FURenderViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FURenderViewModel.h; sourceTree = ""; }; + E3406A2A288AAAF500373612 /* FULightingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULightingView.h; sourceTree = ""; }; + E3406A2B288AAAF500373612 /* FULightingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULightingView.m; sourceTree = ""; }; + E3406A2C288AAAF500373612 /* FULightingSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULightingSlider.h; sourceTree = ""; }; + E3406A2D288AAAF500373612 /* FUHeadButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHeadButtonView.m; sourceTree = ""; }; + E3406A2E288AAAF600373612 /* FUHeadButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHeadButtonView.h; sourceTree = ""; }; + E3406A30288AAAF600373612 /* FULightingSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULightingSlider.m; sourceTree = ""; }; + E3406A32288AAAF600373612 /* FUCircleProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUCircleProgressView.m; sourceTree = ""; }; + E3406A33288AAAF600373612 /* FUCircleProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUCircleProgressView.h; sourceTree = ""; }; + E3406A39288AAB0700373612 /* FUPopupMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUPopupMenu.h; sourceTree = ""; }; + E3406A3B288AAB0800373612 /* FUPopupMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUPopupMenu.m; sourceTree = ""; }; + E3406A3C288AAB0800373612 /* FUSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUSwitch.m; sourceTree = ""; }; + E3406A3E288AAB0800373612 /* FUSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUSwitch.h; sourceTree = ""; }; + E3447D6428A9FDCD008E164C /* FUBeautyVideoRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyVideoRenderViewController.h; sourceTree = ""; }; + E3447D6528A9FDCD008E164C /* FUBeautyVideoRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyVideoRenderViewController.m; sourceTree = ""; }; + E3447D6728A9FDE7008E164C /* FUBeautyVideoRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyVideoRenderViewModel.h; sourceTree = ""; }; + E3447D6828A9FDE7008E164C /* FUBeautyVideoRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyVideoRenderViewModel.m; sourceTree = ""; }; + E3447D6A28AA2028008E164C /* FUGreenScreenVideoRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenVideoRenderViewController.h; sourceTree = ""; }; + E3447D6B28AA2028008E164C /* FUGreenScreenVideoRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenVideoRenderViewController.m; sourceTree = ""; }; + E3447D6D28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenVideoRenderViewModel.h; sourceTree = ""; }; + E3447D6E28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenVideoRenderViewModel.m; sourceTree = ""; }; + E3447D7728AA4467008E164C /* FUGestureRecognitionViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGestureRecognitionViewModel.h; sourceTree = ""; }; + E3447D7828AA4467008E164C /* FUGestureRecognitionViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGestureRecognitionViewModel.m; sourceTree = ""; }; + E3447D7A28AA4467008E164C /* FUGestureRecognitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUGestureRecognitionViewController.m; sourceTree = ""; }; + E3447D7B28AA4467008E164C /* FUGestureRecognitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUGestureRecognitionViewController.h; sourceTree = ""; }; + E3447D8628AA4880008E164C /* ctrl_rain_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ctrl_rain_740.bundle; sourceTree = ""; }; + E3447D8728AA4881008E164C /* ssd_thread_cute.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_cute.bundle; sourceTree = ""; }; + E3447D8828AA4882008E164C /* ssd_thread_six.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_six.bundle; sourceTree = ""; }; + E3447D8928AA4883008E164C /* ssd_thread_korheart.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ssd_thread_korheart.bundle; sourceTree = ""; }; + E3447D8B28AA4886008E164C /* ctrl_flower_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ctrl_flower_740.bundle; sourceTree = ""; }; + E3447D8C28AA4887008E164C /* ctrl_snow_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ctrl_snow_740.bundle; sourceTree = ""; }; + E3447D9728AB3A45008E164C /* FUBodyAvatarViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyAvatarViewController.h; sourceTree = ""; }; + E3447D9828AB3A45008E164C /* FUBodyAvatarViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyAvatarViewController.m; sourceTree = ""; }; + E3447D9A28AB3A56008E164C /* FUBodyAvatarViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyAvatarViewModel.h; sourceTree = ""; }; + E3447D9B28AB3A56008E164C /* FUBodyAvatarViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyAvatarViewModel.m; sourceTree = ""; }; + E3447DBC28AB69CC008E164C /* anim_idle.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = anim_idle.bundle; sourceTree = ""; }; + E3447DBD28AB69CD008E164C /* default_bg.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = default_bg.bundle; sourceTree = ""; }; + E3447DC128AB6A1D008E164C /* headnv.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = headnv.bundle; sourceTree = ""; }; + E3447DC228AB6A1E008E164C /* toushi_5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = toushi_5.bundle; sourceTree = ""; }; + E3447DC328AB6A1F008E164C /* midBody_female.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = midBody_female.bundle; sourceTree = ""; }; + E3447DC428AB6A20008E164C /* taozhuang_12.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = taozhuang_12.bundle; sourceTree = ""; }; + E3447DC528AB6A20008E164C /* female_hair_23.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = female_hair_23.bundle; sourceTree = ""; }; + E3447DC728AB6A21008E164C /* xiezi_danxie.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiezi_danxie.bundle; sourceTree = ""; }; + E3447DCE28AB6A3A008E164C /* facemakeup_3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facemakeup_3.bundle; sourceTree = ""; }; + E3447DD028AB6A6F008E164C /* toushi_7.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = toushi_7.bundle; sourceTree = ""; }; + E3447DD128AB6A70008E164C /* midBody_male.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = midBody_male.bundle; sourceTree = ""; }; + E3447DD228AB6A71008E164C /* headnan.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = headnan.bundle; sourceTree = ""; }; + E3447DD328AB6A72008E164C /* male_hair_5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = male_hair_5.bundle; sourceTree = ""; }; + E3447DD428AB6A73008E164C /* kuzi_changku_5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = kuzi_changku_5.bundle; sourceTree = ""; }; + E3447DD528AB6A74008E164C /* peishi_erding_2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = peishi_erding_2.bundle; sourceTree = ""; }; + E3447DD628AB6A74008E164C /* xiezi_tuoxie_2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiezi_tuoxie_2.bundle; sourceTree = ""; }; + E3447DD728AB6A75008E164C /* waitao_3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = waitao_3.bundle; sourceTree = ""; }; + E3447DFB28AB7EBE008E164C /* FUSegmentationViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSegmentationViewModel.h; sourceTree = ""; }; + E3447DFC28AB7EBE008E164C /* FUSegmentationViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSegmentationViewModel.m; sourceTree = ""; }; + E3447DFF28AB7F1A008E164C /* FUSegmentationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSegmentationViewController.h; sourceTree = ""; }; + E3447E0028AB7F1A008E164C /* FUSegmentationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSegmentationViewController.m; sourceTree = ""; }; + E3447E0228AB8172008E164C /* FUSegmentationModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSegmentationModel.h; sourceTree = ""; }; + E3447E0328AB8172008E164C /* FUSegmentationModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSegmentationModel.m; sourceTree = ""; }; + E3447E0828AB853E008E164C /* segmentation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = segmentation.json; sourceTree = ""; }; + E3447E0B28AB8FE7008E164C /* boyfriend1_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = boyfriend1_740.bundle; sourceTree = ""; }; + E3447E0C28AB8FE9008E164C /* boyfriend3_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = boyfriend3_740.bundle; sourceTree = ""; }; + E3447E0D28AB8FEA008E164C /* human_outline_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = human_outline_740.bundle; sourceTree = ""; }; + E3447E0E28AB8FEC008E164C /* sea_lm_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = sea_lm_fu.bundle; sourceTree = ""; }; + E3447E0F28AB8FEE008E164C /* xiandai_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiandai_ztt_fu.bundle; sourceTree = ""; }; + E3447E1028AB8FF0008E164C /* boyfriend2_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = boyfriend2_740.bundle; sourceTree = ""; }; + E3447E1128AB8FF1008E164C /* bg_segment.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = bg_segment.bundle; sourceTree = ""; }; + E3447E1228AB8FF3008E164C /* gufeng_zh_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = gufeng_zh_fu.bundle; sourceTree = ""; }; + E3447E1328AB8FF5008E164C /* hez_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hez_ztt_fu.bundle; sourceTree = ""; }; + E3447E1428AB8FF8008E164C /* ice_lm_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ice_lm_fu.bundle; sourceTree = ""; }; + E3447E1F28AB9BA5008E164C /* FUUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUUtility.h; sourceTree = ""; }; + E3447E2028AB9BA5008E164C /* FUUtility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUUtility.m; sourceTree = ""; }; + E3447E5028AC889A008E164C /* FUFaceFusionCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionCollectionViewController.h; sourceTree = ""; }; + E3447E5128AC889A008E164C /* FUFaceFusionCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionCollectionViewController.m; sourceTree = ""; }; + E3447E5328AC8D29008E164C /* FUFaceFusionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionCell.h; sourceTree = ""; }; + E3447E5428AC8D29008E164C /* FUFaceFusionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionCell.m; sourceTree = ""; }; + E3447E7028C1CE9D008E164C /* FUFaceFusionCaptureViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionCaptureViewController.h; sourceTree = ""; }; + E3447E7128C1CE9D008E164C /* FUFaceFusionCaptureViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionCaptureViewController.m; sourceTree = ""; }; + E3447E7D28C1D07F008E164C /* FUFaceFusionCaptureViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionCaptureViewModel.h; sourceTree = ""; }; + E3447E7E28C1D07F008E164C /* FUFaceFusionCaptureViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionCaptureViewModel.m; sourceTree = ""; }; + E3447E8028C1D319008E164C /* FUFaceFusionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionManager.h; sourceTree = ""; }; + E3447E8128C1D319008E164C /* FUFaceFusionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionManager.m; sourceTree = ""; }; + E3447E8828C1E243008E164C /* FUFaceFusionCaptureResultViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionCaptureResultViewController.h; sourceTree = ""; }; + E3447E8928C1E244008E164C /* FUFaceFusionCaptureResultViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionCaptureResultViewController.m; sourceTree = ""; }; + E3447E8B28C1E2AF008E164C /* FUFaceFusionEffectViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionEffectViewController.h; sourceTree = ""; }; + E3447E8C28C1E2AF008E164C /* FUFaceFusionEffectViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionEffectViewController.m; sourceTree = ""; }; + E3447ED928C59984008E164C /* FUFaceFusionTipView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFaceFusionTipView.h; sourceTree = ""; }; + E3447EDA28C59984008E164C /* FUFaceFusionTipView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUFaceFusionTipView.m; sourceTree = ""; }; + E3447EE728C5DC5E008E164C /* change_face.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = change_face.bundle; sourceTree = ""; }; + E354E79A28E1728500749C80 /* FUHairBeautyModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHairBeautyModel.h; sourceTree = ""; }; + E354E79B28E1728500749C80 /* FUHairBeautyModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHairBeautyModel.m; sourceTree = ""; }; + E354E79D28E1733400749C80 /* hair_beauty.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = hair_beauty.json; sourceTree = ""; }; + E354E7E628E2C89700749C80 /* comic_filter.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = comic_filter.json; sourceTree = ""; }; + E354E7E928E2CC0500749C80 /* FUComicFilterModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUComicFilterModel.h; sourceTree = ""; }; + E354E7EA28E2CC0500749C80 /* FUComicFilterModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUComicFilterModel.m; sourceTree = ""; }; + E354E7EE28E2E0C100749C80 /* FURenderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FURenderKit.framework; sourceTree = ""; }; + E369F8B728D849790036AC5A /* FUGreenScreenComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUGreenScreenComponent.xcodeproj; path = FUGreenScreenComponent/FUGreenScreenComponent.xcodeproj; sourceTree = ""; }; + E369F8BD28D8497E0036AC5A /* FUMakeupComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUMakeupComponent.xcodeproj; path = FUMakeupComponent/FUMakeupComponent.xcodeproj; sourceTree = ""; }; + E369F8C328D849810036AC5A /* FUBeautyComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUBeautyComponent.xcodeproj; path = FUBeautyComponent/FUBeautyComponent.xcodeproj; sourceTree = ""; }; + E369F91228D867730036AC5A /* FUStickerVideoRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerVideoRenderViewController.h; sourceTree = ""; }; + E369F91328D867730036AC5A /* FUStickerVideoRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerVideoRenderViewController.m; sourceTree = ""; }; + E369F91528D867CE0036AC5A /* FUStickerVideoRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerVideoRenderViewModel.h; sourceTree = ""; }; + E369F91628D867CE0036AC5A /* FUStickerVideoRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerVideoRenderViewModel.m; sourceTree = ""; }; + E369F91A28D969EE0036AC5A /* FUMakeupVideoRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupVideoRenderViewController.h; sourceTree = ""; }; + E369F91B28D969EE0036AC5A /* FUMakeupVideoRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupVideoRenderViewController.m; sourceTree = ""; }; + E369F91D28D96A030036AC5A /* FUMakeupImageRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupImageRenderViewController.h; sourceTree = ""; }; + E369F91E28D96A030036AC5A /* FUMakeupImageRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupImageRenderViewController.m; sourceTree = ""; }; + E369F92028D96A510036AC5A /* FUMakeupImageRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupImageRenderViewModel.h; sourceTree = ""; }; + E369F92128D96A510036AC5A /* FUMakeupImageRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupImageRenderViewModel.m; sourceTree = ""; }; + E369F92328D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupVideoRenderViewModel.h; sourceTree = ""; }; + E369F92428D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupVideoRenderViewModel.m; sourceTree = ""; }; + E369F94B28D9AB530036AC5A /* FUStickerComponentManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerComponentManager.h; sourceTree = ""; }; + E369F94C28D9AB530036AC5A /* FUStickerComponentManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerComponentManager.m; sourceTree = ""; }; + E369F94E28D9AE3C0036AC5A /* FUStickerComponentViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerComponentViewModel.h; sourceTree = ""; }; + E369F94F28D9AE3C0036AC5A /* FUStickerComponentViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerComponentViewModel.m; sourceTree = ""; }; + E3923E3C288FC10000A5FB31 /* FUStickerViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerViewModel.h; sourceTree = ""; }; + E3923E3D288FC10000A5FB31 /* FUStickerViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerViewModel.m; sourceTree = ""; }; + E3923E40288FC18E00A5FB31 /* FUStickerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUStickerViewController.h; sourceTree = ""; }; + E3923E41288FC18E00A5FB31 /* FUStickerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUStickerViewController.m; sourceTree = ""; }; + E3923E47288FC99A00A5FB31 /* CatSparks.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = CatSparks.bundle; sourceTree = ""; }; + E3923E48288FC99A00A5FB31 /* redribbt.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = redribbt.bundle; sourceTree = ""; }; + E3923E49288FC99A00A5FB31 /* DaisyPig.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = DaisyPig.bundle; sourceTree = ""; }; + E3923E4B288FC99A00A5FB31 /* sdlr.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = sdlr.bundle; sourceTree = ""; }; + E3923E4C288FC99A00A5FB31 /* newy1.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = newy1.bundle; sourceTree = ""; }; + E3923E4E288FC99B00A5FB31 /* xlong_zh_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xlong_zh_fu.bundle; sourceTree = ""; }; + E3923E53288FC99B00A5FB31 /* fu_zh_fenshu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fu_zh_fenshu.bundle; sourceTree = ""; }; + E3923E55288FC99B00A5FB31 /* sdlu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = sdlu.bundle; sourceTree = ""; }; + E3923E6E288FDEF400A5FB31 /* FUBeautyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyViewController.h; sourceTree = ""; }; + E3923E6F288FDEF400A5FB31 /* FUBeautyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyViewController.m; sourceTree = ""; }; + E39709A428A0B37A00FC0F46 /* FULightMakeupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULightMakeupViewController.h; sourceTree = ""; }; + E39709A528A0B37A00FC0F46 /* FULightMakeupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupViewController.m; sourceTree = ""; }; + E39709AA28A0B37A00FC0F46 /* FULightMakeupCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULightMakeupCell.h; sourceTree = ""; }; + E39709AC28A0B37A00FC0F46 /* FULightMakeupCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupCell.m; sourceTree = ""; }; + E39709B428A0B93100FC0F46 /* FULightMakeupViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightMakeupViewModel.h; sourceTree = ""; }; + E39709B528A0B93100FC0F46 /* FULightMakeupViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupViewModel.m; sourceTree = ""; }; + E39709B728A0BC4100FC0F46 /* FULightMakeupModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FULightMakeupModel.h; sourceTree = ""; }; + E39709B828A0BC4100FC0F46 /* FULightMakeupModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FULightMakeupModel.m; sourceTree = ""; }; + E39709BB28A0C15200FC0F46 /* light_makeup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = light_makeup.json; sourceTree = ""; }; + E39709C028A0EA6700FC0F46 /* light_makeup.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = light_makeup.bundle; sourceTree = ""; }; + E39709C428A0EFA400FC0F46 /* mu_blush_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_01.png; sourceTree = ""; }; + E39709C628A0EFE200FC0F46 /* mu_eyebrow_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_01.png; sourceTree = ""; }; + E39709C828A0F00700FC0F46 /* mu_eyeshadow_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_01.png; sourceTree = ""; }; + E39709CA28A0F01000FC0F46 /* mu_blush_23.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_23.png; sourceTree = ""; }; + E39709CC28A0F01E00FC0F46 /* mu_eyebrow_19.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_19.png; sourceTree = ""; }; + E39709CE28A0F02700FC0F46 /* mu_eyeshadow_21.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_21.png; sourceTree = ""; }; + E39709D028A0F03400FC0F46 /* mu_blush_20.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_20.png; sourceTree = ""; }; + E39709D228A0F03E00FC0F46 /* mu_eyebrow_16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_16.png; sourceTree = ""; }; + E39709D428A0F04D00FC0F46 /* mu_eyeshadow_18.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_18.png; sourceTree = ""; }; + E39709D628A0F05A00FC0F46 /* mu_blush_22.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_blush_22.png; sourceTree = ""; }; + E39709D828A0F06300FC0F46 /* mu_eyebrow_18.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyebrow_18.png; sourceTree = ""; }; + E39709DA28A0F06900FC0F46 /* mu_eyeshadow_20.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mu_eyeshadow_20.png; sourceTree = ""; }; + E39709DE28A0F44900FC0F46 /* FUQualityStickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerViewController.h; sourceTree = ""; }; + E39709DF28A0F44900FC0F46 /* FUQualityStickerPageController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerPageController.h; sourceTree = ""; }; + E39709E028A0F44900FC0F46 /* FUQualityStickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerViewController.m; sourceTree = ""; }; + E39709E128A0F44900FC0F46 /* FUQualityStickerPageController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerPageController.m; sourceTree = ""; }; + E39709E328A0F44900FC0F46 /* FUQualityStickerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerHelper.h; sourceTree = ""; }; + E39709E528A0F44900FC0F46 /* FUQualityStickerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerHelper.m; sourceTree = ""; }; + E39709E828A0F44900FC0F46 /* FUQualityStickerModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerModel.h; sourceTree = ""; }; + E39709E928A0F44900FC0F46 /* FUQualityStickerModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerModel.m; sourceTree = ""; }; + E39709EB28A0F44900FC0F46 /* FUQualityStickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerCell.m; sourceTree = ""; }; + E39709EC28A0F44900FC0F46 /* FUQualityStickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerCell.h; sourceTree = ""; }; + E39709ED28A0F44900FC0F46 /* FUQualityStickerCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUQualityStickerCell.xib; sourceTree = ""; }; + E3971368289BBB5C002933BE /* UIImage+FU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+FU.h"; sourceTree = ""; }; + E3971369289BBB5D002933BE /* UIImage+FU.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+FU.m"; sourceTree = ""; }; + E3971382289BC0A3002933BE /* FUAnimojiViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUAnimojiViewController.h; sourceTree = ""; }; + E3971383289BC0A3002933BE /* FUAnimojiViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUAnimojiViewController.m; sourceTree = ""; }; + E3971389289BC147002933BE /* FUAnimojiViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUAnimojiViewModel.h; sourceTree = ""; }; + E397138A289BC147002933BE /* FUAnimojiViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUAnimojiViewModel.m; sourceTree = ""; }; + E397138E289BD055002933BE /* cartoon_princess_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = cartoon_princess_Animoji.bundle; sourceTree = ""; }; + E397138F289BD055002933BE /* baihu_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = baihu_Animoji.bundle; sourceTree = ""; }; + E3971390289BD055002933BE /* douniuquan_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = douniuquan_Animoji.bundle; sourceTree = ""; }; + E3971392289BD055002933BE /* kaola_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = kaola_Animoji.bundle; sourceTree = ""; }; + E3971395289BD055002933BE /* qgirl_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = qgirl_Animoji.bundle; sourceTree = ""; }; + E3971396289BD055002933BE /* kuloutou_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = kuloutou_Animoji.bundle; sourceTree = ""; }; + E3971398289BD055002933BE /* huangya_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = huangya_Animoji.bundle; sourceTree = ""; }; + E397139A289BD055002933BE /* wuxia_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = wuxia_Animoji.bundle; sourceTree = ""; }; + E397139B289BD055002933BE /* baimao_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = baimao_Animoji.bundle; sourceTree = ""; }; + E39713A0289BD055002933BE /* hashiqi_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hashiqi_Animoji.bundle; sourceTree = ""; }; + E39713A2289BD055002933BE /* hetun_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hetun_Animoji.bundle; sourceTree = ""; }; + E39713A4289BD055002933BE /* frog_Animoji.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = frog_Animoji.bundle; sourceTree = ""; }; + E39713D0289CBBDF002933BE /* FUHairBeautyViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHairBeautyViewModel.h; sourceTree = ""; }; + E39713D1289CBBDF002933BE /* FUHairBeautyViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHairBeautyViewModel.m; sourceTree = ""; }; + E39713DD289CE648002933BE /* FUHairBeautyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHairBeautyView.h; sourceTree = ""; }; + E39713DE289CE648002933BE /* FUHairBeautyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHairBeautyView.m; sourceTree = ""; }; + E39713E1289CF4BD002933BE /* FUHairBeautyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUHairBeautyViewController.h; sourceTree = ""; }; + E39713E2289CF4BD002933BE /* FUHairBeautyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUHairBeautyViewController.m; sourceTree = ""; }; + E39713E8289D076C002933BE /* hair_normal.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hair_normal.bundle; sourceTree = ""; }; + E39713E9289D076D002933BE /* hair_gradient.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hair_gradient.bundle; sourceTree = ""; }; + E3A07C8F288939BD00E6F7E5 /* FULiveDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FULiveDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E3A07C92288939BD00E6F7E5 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + E3A07C93288939BD00E6F7E5 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + E3A07C9E288939BE00E6F7E5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + E3A07CA4288939BE00E6F7E5 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + E3A07CAE28893D4300E6F7E5 /* FUHomepageViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHomepageViewModel.m; sourceTree = ""; }; + E3A07CAF28893D4300E6F7E5 /* FUHomepageViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHomepageViewModel.h; sourceTree = ""; }; + E3A07CB128893D4300E6F7E5 /* FUHomepageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHomepageModel.m; sourceTree = ""; }; + E3A07CB328893D4300E6F7E5 /* FUHomepageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHomepageModel.h; sourceTree = ""; }; + E3A07CB628893D4300E6F7E5 /* FUHomepageHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHomepageHeaderView.h; sourceTree = ""; }; + E3A07CB828893D4300E6F7E5 /* FUHomepageModuleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHomepageModuleCell.h; sourceTree = ""; }; + E3A07CB928893D4300E6F7E5 /* FUHomepageHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHomepageHeaderView.m; sourceTree = ""; }; + E3A07CBB28893D4300E6F7E5 /* FUHomepageModuleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHomepageModuleCell.m; sourceTree = ""; }; + E3A07CBD28893D4300E6F7E5 /* FUHomepageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHomepageViewController.h; sourceTree = ""; }; + E3A07CBE28893D4300E6F7E5 /* FUHomepageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHomepageViewController.m; sourceTree = ""; }; + E3A13D6A28C87A65009402A3 /* FUMakeupViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupViewModel.h; sourceTree = ""; }; + E3A13D6B28C87A65009402A3 /* FUMakeupViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupViewModel.m; sourceTree = ""; }; + E3A13D6D28C87B1E009402A3 /* FUMakeupViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupViewController.h; sourceTree = ""; }; + E3A13D6E28C87B1E009402A3 /* FUMakeupViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupViewController.m; sourceTree = ""; }; + E3A58BF828A2726800941101 /* FUARMaskViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUARMaskViewModel.h; sourceTree = ""; }; + E3A58BF928A2726800941101 /* FUARMaskViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUARMaskViewModel.m; sourceTree = ""; }; + E3A58BFB28A2726800941101 /* FUARMaskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUARMaskViewController.h; sourceTree = ""; }; + E3A58BFC28A2726800941101 /* FUARMaskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUARMaskViewController.m; sourceTree = ""; }; + E3A58C0728A2753400941101 /* fenhudie.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fenhudie.bundle; sourceTree = ""; }; + E3A58C0928A2753600941101 /* lanhudie.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = lanhudie.bundle; sourceTree = ""; }; + E3A58C0A28A2753700941101 /* tiger.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tiger.bundle; sourceTree = ""; }; + E3A58C0B28A2753800941101 /* bluebird.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = bluebird.bundle; sourceTree = ""; }; + E3A58C1228A2753D00941101 /* tiger_bai.bundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tiger_bai.bundle; sourceTree = ""; }; + E3A58C1328A2753E00941101 /* tiger_huang.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tiger_huang.bundle; sourceTree = ""; }; + E3A58C1428A2753F00941101 /* baozi.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = baozi.bundle; sourceTree = ""; }; + E3A58C1528A2754000941101 /* xiongmao.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiongmao.bundle; sourceTree = ""; }; + E3A58C2928A2759E00941101 /* FUHilariousViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHilariousViewModel.m; sourceTree = ""; }; + E3A58C2B28A2759E00941101 /* FUHilariousViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHilariousViewModel.h; sourceTree = ""; }; + E3A58C2D28A2759E00941101 /* FUHilariousViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUHilariousViewController.h; sourceTree = ""; }; + E3A58C2E28A2759E00941101 /* FUHilariousViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUHilariousViewController.m; sourceTree = ""; }; + E3A58C3328A278E700941101 /* big_head_facewarp1.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp1.bundle; sourceTree = ""; }; + E3A58C3428A278E800941101 /* big_head_facewarp5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp5.bundle; sourceTree = ""; }; + E3A58C3528A278E900941101 /* big_head_facewarp6.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp6.bundle; sourceTree = ""; }; + E3A58C3628A278E900941101 /* big_head_facewarp3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp3.bundle; sourceTree = ""; }; + E3A58C3728A278EA00941101 /* big_head_facewarp4.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp4.bundle; sourceTree = ""; }; + E3A58C3828A278EB00941101 /* big_head_facewarp2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = big_head_facewarp2.bundle; sourceTree = ""; }; + E3A58C4128A34F2500941101 /* FUExpressionRecognitionViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUExpressionRecognitionViewModel.m; sourceTree = ""; }; + E3A58C4228A34F2500941101 /* FUExpressionRecognitionViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUExpressionRecognitionViewModel.h; sourceTree = ""; }; + E3A58C4428A34F2500941101 /* FUExpressionRecognitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUExpressionRecognitionViewController.m; sourceTree = ""; }; + E3A58C4528A34F2500941101 /* FUExpressionRecognitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUExpressionRecognitionViewController.h; sourceTree = ""; }; + E3A58C4928A352DE00941101 /* xiaoxueshen_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiaoxueshen_ztt_fu.bundle; sourceTree = ""; }; + E3A58C4A28A352DF00941101 /* xiaobianzi_zh_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xiaobianzi_zh_fu.bundle; sourceTree = ""; }; + E3A58C4B28A352E000941101 /* future_warrior.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = future_warrior.bundle; sourceTree = ""; }; + E3A58C4C28A352E100941101 /* qingqing_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = qingqing_ztt_fu.bundle; sourceTree = ""; }; + E3A58C4D28A352E100941101 /* jet_mask.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = jet_mask.bundle; sourceTree = ""; }; + E3A58C4E28A352E200941101 /* luhantongkuan_ztt_fu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = luhantongkuan_ztt_fu.bundle; sourceTree = ""; }; + E3A58C4F28A352E300941101 /* sdx2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = sdx2.bundle; sourceTree = ""; }; + E3A58C5928A3592A00941101 /* FUMusicFilterViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUMusicFilterViewModel.h; sourceTree = ""; }; + E3A58C5A28A3592A00941101 /* FUMusicFilterViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUMusicFilterViewModel.m; sourceTree = ""; }; + E3A58C5C28A3592A00941101 /* FUMusicFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUMusicFilterViewController.h; sourceTree = ""; }; + E3A58C5D28A3592A00941101 /* FUMusicFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUMusicFilterViewController.m; sourceTree = ""; }; + E3A58C6128A360F400941101 /* douyin_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = douyin_01.bundle; sourceTree = ""; }; + E3A58C6228A360F400941101 /* douyin_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = douyin_02.bundle; sourceTree = ""; }; + E3A58C6328A360F500941101 /* douyin.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = douyin.mp3; sourceTree = ""; }; + E3A58C6928A364B800941101 /* FUDistortingMirrorViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUDistortingMirrorViewModel.h; sourceTree = ""; }; + E3A58C6A28A364B800941101 /* FUDistortingMirrorViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUDistortingMirrorViewModel.m; sourceTree = ""; }; + E3A58C6C28A364B800941101 /* FUDistortingMirrorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUDistortingMirrorViewController.m; sourceTree = ""; }; + E3A58C6D28A364B800941101 /* FUDistortingMirrorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUDistortingMirrorViewController.h; sourceTree = ""; }; + E3A58C7128A37D4600941101 /* facewarp6.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp6.bundle; sourceTree = ""; }; + E3A58C7228A37D4700941101 /* facewarp2.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp2.bundle; sourceTree = ""; }; + E3A58C7328A37D4800941101 /* facewarp3.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp3.bundle; sourceTree = ""; }; + E3A58C7428A37D4900941101 /* facewarp4.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp4.bundle; sourceTree = ""; }; + E3A58C7528A37D4A00941101 /* facewarp5.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = facewarp5.bundle; sourceTree = ""; }; + E3A58C9428A3801700941101 /* body_beauty.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = body_beauty.json; sourceTree = ""; }; + E3A58C9628A380C000941101 /* FUBodyBeautyModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyModel.h; sourceTree = ""; }; + E3A58C9728A380C000941101 /* FUBodyBeautyModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyModel.m; sourceTree = ""; }; + E3A58C9928A3838600941101 /* FUBodyBeautyViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyViewModel.h; sourceTree = ""; }; + E3A58C9A28A3838600941101 /* FUBodyBeautyViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyViewModel.m; sourceTree = ""; }; + E3A58C9F28A38B9F00941101 /* FUBodyBeautyCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyCell.h; sourceTree = ""; }; + E3A58CA028A38B9F00941101 /* FUBodyBeautyCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyCell.m; sourceTree = ""; }; + E3A58CA528A38C3700941101 /* FUBodyBeautyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBodyBeautyViewController.h; sourceTree = ""; }; + E3A58CA628A38C3700941101 /* FUBodyBeautyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBodyBeautyViewController.m; sourceTree = ""; }; + E3A58CA828A38CB000941101 /* FUBeautyImageRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyImageRenderViewController.h; sourceTree = ""; }; + E3A58CA928A38CB000941101 /* FUBeautyImageRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyImageRenderViewController.m; sourceTree = ""; }; + E3A58CAB28A38CCA00941101 /* FUBeautyImageRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUBeautyImageRenderViewModel.h; sourceTree = ""; }; + E3A58CAC28A38CCA00941101 /* FUBeautyImageRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUBeautyImageRenderViewModel.m; sourceTree = ""; }; + E3A58CAE28A3AA5500941101 /* UIButton+FU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIButton+FU.h"; sourceTree = ""; }; + E3A58CAF28A3AA5500941101 /* UIButton+FU.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIButton+FU.m"; sourceTree = ""; }; + E3A58CB128A3AEB100941101 /* FUCaptureButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCaptureButton.h; sourceTree = ""; }; + E3A58CB228A3AEB100941101 /* FUCaptureButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCaptureButton.m; sourceTree = ""; }; + E3A58DDF28A6484B00941101 /* FUGreenScreenImageRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenImageRenderViewController.h; sourceTree = ""; }; + E3A58DE028A6484B00941101 /* FUGreenScreenImageRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenImageRenderViewController.m; sourceTree = ""; }; + E3A58DE928A653A300941101 /* FUGreenScreenImageRenderViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenImageRenderViewModel.h; sourceTree = ""; }; + E3A58DEA28A653A300941101 /* FUGreenScreenImageRenderViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenImageRenderViewModel.m; sourceTree = ""; }; + E3A58DEC28A66F5A00941101 /* FUCommonUIComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUCommonUIComponent.xcodeproj; path = FUCommonUIComponent/FUCommonUIComponent.xcodeproj; sourceTree = ""; }; + E3AD21E928D9E14A004D3F80 /* FUVideoComponent.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FUVideoComponent.xcodeproj; path = FUVideoComponent/FUVideoComponent.xcodeproj; sourceTree = ""; }; + E3AD21F528DACB2A004D3F80 /* FULandmarkManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FULandmarkManager.m; sourceTree = ""; }; + E3AD21F628DACB2B004D3F80 /* FULandmarkManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FULandmarkManager.h; sourceTree = ""; }; + E3AD21F828DACBCF004D3F80 /* landmarks.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = landmarks.bundle; sourceTree = ""; }; + E3CD59A128977B2B0088ED12 /* FUGreenScreenViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenViewController.h; sourceTree = ""; }; + E3CD59A228977B2B0088ED12 /* FUGreenScreenViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenViewController.m; sourceTree = ""; }; + E3CD59A428977B460088ED12 /* FUGreenScreenViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUGreenScreenViewModel.h; sourceTree = ""; }; + E3CD59A528977B460088ED12 /* FUGreenScreenViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUGreenScreenViewModel.m; sourceTree = ""; }; + E3CD59A8289780C90088ED12 /* FUBeautyViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUBeautyViewModel.m; sourceTree = ""; }; + E3CD59A9289780C90088ED12 /* FUBeautyViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUBeautyViewModel.h; sourceTree = ""; }; + E3CD5A0228991D120088ED12 /* green_screen_740.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = green_screen_740.bundle; sourceTree = ""; }; + E3DC94B02890E3630016C9B1 /* ai_face_recognizer.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_face_recognizer.bundle; sourceTree = ""; }; + E3DC94B12890E3630016C9B1 /* ai_hand_processor.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_hand_processor.bundle; sourceTree = ""; }; + E3DC94B22890E3630016C9B1 /* ai_face_processor.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_face_processor.bundle; sourceTree = ""; }; + E3DC94B32890E3630016C9B1 /* ai_bgseg_green.bundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ai_bgseg_green.bundle; sourceTree = ""; }; + E3DC94B42890E3630016C9B1 /* ai_face_processor_lite.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_face_processor_lite.bundle; sourceTree = ""; }; + E3DC94B52890E3630016C9B1 /* ai_human_processor.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_human_processor.bundle; sourceTree = ""; }; + E3DC94B62890E3630016C9B1 /* ai_human_processor_gpu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_human_processor_gpu.bundle; sourceTree = ""; }; + E3DC94B82890E3630016C9B1 /* tongue.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tongue.bundle; sourceTree = ""; }; + E3DC94B92890E3630016C9B1 /* fxaa.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fxaa.bundle; sourceTree = ""; }; + E3DC94BA2890E3630016C9B1 /* face_makeup.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = face_makeup.bundle; sourceTree = ""; }; + E3DC94BB2890E3630016C9B1 /* controller_cpp.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = controller_cpp.bundle; sourceTree = ""; }; + E3DC94BC2890E3630016C9B1 /* body_slim.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = body_slim.bundle; sourceTree = ""; }; + E3DC94BD2890E3630016C9B1 /* fuzzytoonfilter.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = fuzzytoonfilter.bundle; sourceTree = ""; }; + E3DC94BE2890E3630016C9B1 /* face_beautification.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = face_beautification.bundle; sourceTree = ""; }; + E3ED024C28A0F6D5000F28CD /* FUQualityStickerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUQualityStickerViewModel.m; sourceTree = ""; }; + E3ED025328A0F6D5000F28CD /* FUQualityStickerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUQualityStickerViewModel.h; sourceTree = ""; }; + E3ED025728A0F709000F28CD /* FUNetworkingHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUNetworkingHelper.h; sourceTree = ""; }; + E3ED025828A0F709000F28CD /* FUNetworkingHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUNetworkingHelper.m; sourceTree = ""; }; + E3ED025B28A10CE8000F28CD /* controller_config.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = controller_config.bundle; sourceTree = ""; }; + E3ED025E28A113D6000F28CD /* FUImageRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUImageRenderViewController.h; sourceTree = ""; }; + E3ED025F28A113D6000F28CD /* FUImageRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUImageRenderViewController.m; sourceTree = ""; }; + E3ED026228A113E8000F28CD /* FUVideoRenderViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUVideoRenderViewController.h; sourceTree = ""; }; + E3ED026328A113E8000F28CD /* FUVideoRenderViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUVideoRenderViewController.m; sourceTree = ""; }; + E3ED026528A11790000F28CD /* FUMediaPickerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMediaPickerViewController.h; sourceTree = ""; }; + E3ED026628A11790000F28CD /* FUMediaPickerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMediaPickerViewController.m; sourceTree = ""; }; + E3ED026A28A126CC000F28CD /* FUMediaPickerViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMediaPickerViewModel.h; sourceTree = ""; }; + E3ED026B28A126CC000F28CD /* FUMediaPickerViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMediaPickerViewModel.m; sourceTree = ""; }; + E9F1F94AA483BAD589411157 /* Pods_FULiveDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FULiveDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0B5A0CB22021913900AAD47D /* Frameworks */ = { + E3A07C8C288939BD00E6F7E5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDD1663E262847520070F570 /* Security.framework in Frameworks */, - E3447F0828C61B88008E164C /* FUVideoComponent.framework in Frameworks */, - E3447EA628C203A7008E164C /* FURenderKit.framework in Frameworks */, - CDD1663C2628474C0070F570 /* SystemConfiguration.framework in Frameworks */, - 84218A5728ADEB3700A9D860 /* FUCommonUIComponent.framework in Frameworks */, - FA81545D4E2DB365DE180E5B /* Pods_FULiveDemo.framework in Frameworks */, + 27BE3933B157474D17FA167D /* Pods_FULiveDemo.framework in Frameworks */, + E369F8CD28D8499C0036AC5A /* FUMakeupComponent.framework in Frameworks */, + E369F8C928D849930036AC5A /* FUBeautyComponent.framework in Frameworks */, + E369F8CB28D849980036AC5A /* FUGreenScreenComponent.framework in Frameworks */, + E354E7F028E2E0C600749C80 /* FURenderKit.framework in Frameworks */, + E3A58DF228A66F6A00941101 /* FUCommonUIComponent.framework in Frameworks */, + E3AD21EF28D9E153004D3F80 /* FUVideoComponent.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0B482C422064FBBB0073939A /* items */ = { - isa = PBXGroup; - children = ( - 0BE100872150F9ED00098F1B /* 表情识别 */, - E39CF995249A3849003A6C14 /* 大头哈哈 */, - 4180A4FA26117F55003DC778 /* 道具贴纸 */, - 0BE1005D2150F9ED00098F1B /* 哈哈镜 */, - CD4D6EA421796EA400E02F39 /* 海报换脸 */, - E331EBE124ED38D400F47C43 /* 绿幕 */, - E332E5F024AF2FFF00232C4A /* 美发 */, - E3B0CB922232433D00900760 /* 美妆 */, - E37A8747248F7B27006D900C /* 全身avatar */, - CDA6083A216F406900A3DA93 /* 人像分割 */, - 0BE1006A2150F9ED00098F1B /* 手势识别 */, - 0BE100372150F9ED00098F1B /* 音乐滤镜 */, - 0BE1004C2150F9ED00098F1B /* Animoji */, - 0BE100AC2150F9ED00098F1B /* AR面具 */, - ); - path = items; - sourceTree = ""; - }; - 0B5A0CAC2021913900AAD47D = { - isa = PBXGroup; - children = ( - E3CE4CB026CBBDD300ED0B4E /* docs */, - E3447F0228C61B7C008E164C /* FUVideoComponent.xcodeproj */, - E33C978E288E4C1400374C69 /* FUCommonUIComponent.xcodeproj */, - 0B5A0CB72021913900AAD47D /* FULiveDemo */, - 0B5A0CB62021913900AAD47D /* Products */, - 0B5A0D80202191B600AAD47D /* Frameworks */, - 5F18E9D6F10E12A230D6B837 /* Pods */, - ); - sourceTree = ""; - }; - 0B5A0CB62021913900AAD47D /* Products */ = { - isa = PBXGroup; - children = ( - 0B5A0CB52021913900AAD47D /* FULiveDemo.app */, - ); - name = Products; - sourceTree = ""; - }; - 0B5A0CB72021913900AAD47D /* FULiveDemo */ = { - isa = PBXGroup; - children = ( - E37CBD8921FECEBE000C9C42 /* Modules */, - 0B5A0D2B2021917F00AAD47D /* Helpers */, - E36A1E9221DDAC18007BA863 /* Config */, - E36A1E9321DDAF0C007BA863 /* Resource */, - E303EE2527E9E79C00FFEFA9 /* Lib */, - 0B5A0CBE2021913900AAD47D /* Main.storyboard */, - E346BFDA270413160090F3B3 /* Assets.xcassets */, - E37CBD8B21FED155000C9C42 /* AppSupportFiles */, - E3068C5E2510DA350034BDFE /* PrefixHeader.pch */, - ); - path = FULiveDemo; - sourceTree = ""; - }; - 0B5A0D2B2021917F00AAD47D /* Helpers */ = { - isa = PBXGroup; - children = ( - 41391C1A25E8CFBD005451E5 /* UI */, - 41391C1E25E8CFE9005451E5 /* Protocol */, - 4156CE23261471B100DD72C1 /* Category */, - 4156CE1D2614715B00DD72C1 /* FUNetworkingHelper.h */, - 4156CE1C2614715B00DD72C1 /* FUNetworkingHelper.m */, - 0B5A0D302021917F00AAD47D /* FUManager.h */, - 0B5A0D312021917F00AAD47D /* FUManager.m */, - 410F43D625E776E8000AFB72 /* FULocalDataManager.h */, - 410F43D725E776E8000AFB72 /* FULocalDataManager.m */, - E3583E832711422F008E52A7 /* FULandmarkManager.h */, - E3583E842711422F008E52A7 /* FULandmarkManager.m */, - ); - path = Helpers; - sourceTree = ""; - }; - 0B5A0D382021918000AAD47D /* View */ = { + 0FEF24C81684606BC346F611 /* Pods */ = { isa = PBXGroup; children = ( - E32D08DB2875608200884AE5 /* FUHomepageModuleCell.h */, - E32D08DC2875608200884AE5 /* FUHomepageModuleCell.m */, - E3C4889E2485EB050070D88E /* FUHomepageHeaderView.h */, - E3C4889D2485EB050070D88E /* FUHomepageHeaderView.m */, + B3711DF38725A8956C408A78 /* Pods-FULiveDemo.debug.xcconfig */, + BF62D7141D5E58E477FC9C7B /* Pods-FULiveDemo.release.xcconfig */, ); - path = View; + path = Pods; sourceTree = ""; }; - 0B5A0D80202191B600AAD47D /* Frameworks */ = { + A69AF30DBA1C19D48658BE8B /* Frameworks */ = { isa = PBXGroup; children = ( - CDD1663D262847520070F570 /* Security.framework */, - CDD1663B2628474B0070F570 /* SystemConfiguration.framework */, - 41E23B3F261D907F00EE2E75 /* libSDWebImage.a */, - E3DD0F782484DA6E0064CF7E /* CoreML.framework */, - E3C8253E2223EBC900494DE4 /* libc++.tbd */, - 0B5A0D832021921700AAD47D /* libstdc++.tbd */, - 0B5A0D81202191B600AAD47D /* Accelerate.framework */, - CB07A208DF5E6AEABC56481E /* Pods_FULiveDemo.framework */, + E9F1F94AA483BAD589411157 /* Pods_FULiveDemo.framework */, ); name = Frameworks; sourceTree = ""; }; - 0BE100372150F9ED00098F1B /* 音乐滤镜 */ = { - isa = PBXGroup; - children = ( - 0BE100382150F9ED00098F1B /* douyin.mp3 */, - 0BE100392150F9ED00098F1B /* douyin_01.bundle */, - 0BE1003A2150F9ED00098F1B /* douyin_01.png */, - 0BE1003B2150F9ED00098F1B /* douyin_02.bundle */, - 0BE1003C2150F9ED00098F1B /* douyin_02.png */, - ); - path = "音乐滤镜"; - sourceTree = ""; - }; - 0BE1004C2150F9ED00098F1B /* Animoji */ = { - isa = PBXGroup; - children = ( - E30A2C132685F127000FFE0E /* baihu_Animoji.bundle */, - E30A2C152685F127000FFE0E /* baihu_Animoji.png */, - E30A2C142685F127000FFE0E /* wuxia_Animoji.bundle */, - E30A2C162685F127000FFE0E /* wuxia_Animoji.png */, - E3728B8F2303F05B00B1B9BF /* qgirl_Animoji.bundle */, - E3728B902303F05B00B1B9BF /* qgirl_Animoji.png */, - 4125E04E2629C3EF008D31F7 /* cartoon_princess_Animoji.bundle */, - 4125E04F2629C3EF008D31F7 /* cartoon_princess_Animoji.png */, - CDA60855216F436D00A3DA93 /* baimao_Animoji.bundle */, - CDA60859216F436E00A3DA93 /* baimao_Animoji.png */, - CDA60860216F436E00A3DA93 /* douniuquan_Animoji.bundle */, - CDA60861216F436E00A3DA93 /* douniuquan_Animoji.png */, - CDA60864216F436E00A3DA93 /* frog_Animoji.bundle */, - CDA6085B216F436E00A3DA93 /* frog_Animoji.png */, - CDA6085A216F436E00A3DA93 /* hashiqi_Animoji.bundle */, - CDA6085D216F436E00A3DA93 /* hashiqi_Animoji.png */, - CDA60858216F436E00A3DA93 /* hetun_Animoji.bundle */, - CDA6085F216F436E00A3DA93 /* hetun_Animoji.png */, - CDA60863216F436E00A3DA93 /* huangya_Animoji.bundle */, - CDA6085E216F436E00A3DA93 /* huangya_Animoji.png */, - E364E7CE268DA8EF008B6697 /* kaola_Animoji.bundle */, - E364E7CF268DA8EF008B6697 /* kaola_Animoji.png */, - CDA6085C216F436E00A3DA93 /* kuloutou_Animoji.bundle */, - CDA60854216F436D00A3DA93 /* kuloutou_Animoji.png */, - ); - path = Animoji; - sourceTree = ""; - }; - 0BE1005D2150F9ED00098F1B /* 哈哈镜 */ = { + E33C97B9288EB6DE00374C69 /* MediaPicker */ = { isa = PBXGroup; children = ( - 0BE1005E2150F9ED00098F1B /* facewarp2.bundle */, - 0BE1005F2150F9ED00098F1B /* facewarp2.png */, - 0BE100602150F9ED00098F1B /* facewarp3.bundle */, - 0BE100612150F9ED00098F1B /* facewarp3.png */, - 0BE100622150F9ED00098F1B /* facewarp4.bundle */, - 0BE100632150F9ED00098F1B /* facewarp4.png */, - 0BE100642150F9ED00098F1B /* facewarp5.bundle */, - 0BE100652150F9ED00098F1B /* facewarp5.png */, - 0BE100662150F9ED00098F1B /* facewarp6.bundle */, - 0BE100672150F9ED00098F1B /* facewarp6.png */, + E3ED026928A126A6000F28CD /* ViewController */, + E3ED026828A126A1000F28CD /* ViewModel */, ); - path = "哈哈镜"; + path = MediaPicker; sourceTree = ""; }; - 0BE1006A2150F9ED00098F1B /* 手势识别 */ = { + E3406988288A569600373612 /* Modules */ = { isa = PBXGroup; children = ( - E3226473225F0B8C003A6182 /* ssd_thread_korheart.bundle */, - E3226472225F0B8C003A6182 /* ssd_thread_korheart.png */, - 0BE100732150F9ED00098F1B /* ssd_thread_cute.bundle */, - 0BE100742150F9ED00098F1B /* ssd_thread_cute.png */, - 0BE100762150F9ED00098F1B /* ssd_thread_six.bundle */, - 0BE100772150F9ED00098F1B /* ssd_thread_six.png */, - 0BE100782150F9ED00098F1B /* ssd_thread_thumb.bundle */, - 0BE100792150F9ED00098F1B /* ssd_thread_thumb.png */, - E37B0B5321814AF200066133 /* ctrl_flower.png */, - E37B0B5521814AFA00066133 /* ctrl_rain.png */, - E37B0B5721814AFF00066133 /* ctrl_snow.png */, - E37B0B4D218147B700066133 /* ctrl_rain.bundle */, - E37B0B4F218147CE00066133 /* ctrl_snow.bundle */, - E37B0B51218147E200066133 /* ctrl_flower.bundle */, + E3923E6B288FDEDA00A5FB31 /* Beauty */, + E3A13D6728C879E6009402A3 /* Makeup */, + E3406A5A288AB80F00373612 /* Sticker */, + E397137B289BC0A3002933BE /* Animoji */, + E39713CE289CBBDF002933BE /* HairBeauty */, + E397099F28A0B37A00FC0F46 /* LightMakeup */, + E3A58BF628A2726800941101 /* ARMask */, + E3A58C2628A2759E00941101 /* Hilarious */, + E3447E2728AC875D008E164C /* FaceFusion */, + E3A58C3F28A34F2500941101 /* ExpressionRecognition */, + E3A58C5728A3592A00941101 /* MusicFilter */, + E3A58C6728A364B800941101 /* DistortingMirror */, + E3A58C7B28A37E3E00941101 /* BodyBeauty */, + E3447D9428AB39EC008E164C /* BodyAvatar */, + E3447DEA28AB7E39008E164C /* Segmentation */, + E3447D7528AA4467008E164C /* GestureRecognition */, + E3CD599728977A7D0088ED12 /* GreenScreen */, + E39709DC28A0F44900FC0F46 /* QualitySticker */, ); - path = "手势识别"; + path = Modules; sourceTree = ""; }; - 0BE100872150F9ED00098F1B /* 表情识别 */ = { + E340698D288A72EE00373612 /* ViewController */ = { isa = PBXGroup; children = ( - E322649B225F6CB7003A6182 /* jet_mask.bundle */, - E322649A225F6CB7003A6182 /* jet_mask.png */, - E3226461225F097E003A6182 /* future_warrior.bundle */, - E3226462225F097E003A6182 /* future_warrior.png */, - E322645B225F097E003A6182 /* luhantongkuan_ztt_fu.bundle */, - E322645A225F097E003A6182 /* luhantongkuan_ztt_fu.png */, - E322645F225F097E003A6182 /* qingqing_ztt_fu.bundle */, - E3226463225F097F003A6182 /* qingqing_ztt_fu.png */, - E3226460225F097E003A6182 /* sdx2.bundle */, - E322645C225F097E003A6182 /* sdx2.png */, - E322645D225F097E003A6182 /* xiaobianzi_zh_fu.bundle */, - E3226464225F097F003A6182 /* xiaobianzi_zh_fu.png */, - E3226465225F097F003A6182 /* xiaoxueshen_ztt_fu.bundle */, - E322645E225F097E003A6182 /* xiaoxueshen_ztt_fu.png */, + E340698E288A730300373612 /* FURenderViewController.h */, + E340698F288A730300373612 /* FURenderViewController.m */, + E3ED025E28A113D6000F28CD /* FUImageRenderViewController.h */, + E3ED025F28A113D6000F28CD /* FUImageRenderViewController.m */, + E3ED026228A113E8000F28CD /* FUVideoRenderViewController.h */, + E3ED026328A113E8000F28CD /* FUVideoRenderViewController.m */, ); - path = "表情识别"; + path = ViewController; sourceTree = ""; }; - 0BE100AC2150F9ED00098F1B /* AR面具 */ = { + E3406994288A7A5700373612 /* FURenderKit */ = { isa = PBXGroup; children = ( - E322647E225F0CCA003A6182 /* baozi.bundle */, - E3226477225F0CCA003A6182 /* baozi.png */, - E322647C225F0CCA003A6182 /* bluebird.bundle */, - E3226476225F0CCA003A6182 /* bluebird.png */, - E3226483225F0CCA003A6182 /* fenhudie.bundle */, - E3226486225F0CCB003A6182 /* fenhudie.png */, - E322647F225F0CCA003A6182 /* lanhudie.bundle */, - E3226481225F0CCA003A6182 /* lanhudie.png */, - E3226485225F0CCB003A6182 /* tiger_bai.bundle */, - E3226487225F0CCB003A6182 /* tiger_bai.png */, - E3226478225F0CCA003A6182 /* tiger_huang.bundle */, - E3226480225F0CCA003A6182 /* tiger_huang.png */, - E3226479225F0CCA003A6182 /* tiger.bundle */, - E322647A225F0CCA003A6182 /* tiger.png */, - E322647B225F0CCA003A6182 /* xiongmao.bundle */, - E322647D225F0CCA003A6182 /* xiongmao.png */, + E354E7EE28E2E0C100749C80 /* FURenderKit.framework */, + E3DC94AE2890E3630016C9B1 /* Resources */, + E34069D7288A992800373612 /* FURenderKitManager.h */, + E34069D8288A992800373612 /* FURenderKitManager.m */, + E34069DA288A9A4A00373612 /* authpack.h */, ); - path = "AR面具"; + path = FURenderKit; sourceTree = ""; }; - 410BC79C25F2332200FDB6C0 /* VC */ = { + E3406995288A7B2400373612 /* Helper */ = { isa = PBXGroup; children = ( - 410BC79E25F2332200FDB6C0 /* FUBodyBeautyController.h */, - 410BC79D25F2332200FDB6C0 /* FUBodyBeautyController.m */, - E384F1AE277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.h */, - E384F1AF277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.m */, + E34069A0288A836200373612 /* Category */, + E3406996288A7B4100373612 /* FULiveDefine.h */, + E3ED025728A0F709000F28CD /* FUNetworkingHelper.h */, + E3ED025828A0F709000F28CD /* FUNetworkingHelper.m */, + E3447E1F28AB9BA5008E164C /* FUUtility.h */, + E3447E2028AB9BA5008E164C /* FUUtility.m */, + E3AD21F628DACB2B004D3F80 /* FULandmarkManager.h */, + E3AD21F528DACB2A004D3F80 /* FULandmarkManager.m */, ); - path = VC; + path = Helper; sourceTree = ""; }; - 410BC79F25F2332200FDB6C0 /* Manager */ = { + E34069A0288A836200373612 /* Category */ = { isa = PBXGroup; children = ( - 410BC7A925F2333B00FDB6C0 /* FUBodyBeautyManager.h */, - 410BC7AA25F2333C00FDB6C0 /* FUBodyBeautyManager.m */, + E3971368289BBB5C002933BE /* UIImage+FU.h */, + E3971369289BBB5D002933BE /* UIImage+FU.m */, + E34069A1288A836D00373612 /* UIColor+FU.h */, + E34069A2288A836D00373612 /* UIColor+FU.m */, + E3A58CAE28A3AA5500941101 /* UIButton+FU.h */, + E3A58CAF28A3AA5500941101 /* UIButton+FU.m */, + E3381CE028DD647E005C2E57 /* SVProgressHUD+FU.h */, + E3381CE128DD647E005C2E57 /* SVProgressHUD+FU.m */, ); - path = Manager; + path = Category; sourceTree = ""; }; - 410F43EA25E78C5D000AFB72 /* Manager */ = { - isa = PBXGroup; - children = ( - 410F43EB25E78C73000AFB72 /* FUAnimojiManager.h */, - 410F43EC25E78C73000AFB72 /* FUAnimojiManager.m */, - 4165BCFA25F0FB350076FBFD /* FUAnimationFilterManager.h */, - 4165BCFB25F0FB350076FBFD /* FUAnimationFilterManager.m */, + E34069A5288A87AF00373612 /* Resource */ = { + isa = PBXGroup; + children = ( + E39713BD289BD074002933BE /* Homepage */, + E369F91128D85F4C0036AC5A /* Render */, + E3923E45288FC98600A5FB31 /* Sticker */, + E397138C289BD055002933BE /* Animoji */, + E39713E7289D075F002933BE /* HairBeauty */, + E39709BA28A0C13D00FC0F46 /* LightMakeup */, + E3A58C0528A2752200941101 /* ARMask */, + E3A58C3228A278CC00941101 /* Hilarious */, + E3447EE628C5DC4D008E164C /* FaceFusion */, + E3A58C4828A352CF00941101 /* ExpressionRecognition */, + E3A58C6028A360DE00941101 /* MusicFilter */, + E3A58C7028A37D2A00941101 /* DistortingMirror */, + E3A58C9328A37FFC00941101 /* BodyBeauty */, + E3447DBB28AB69A9008E164C /* BodyAvatar */, + E3447D8528AA4871008E164C /* GestureRecognition */, + E3447E0528AB84F8008E164C /* Segmentation */, + E3CD59C02897AD4B0088ED12 /* GreenScreen */, + E3923E66288FC9CD00A5FB31 /* Others */, ); - path = Manager; + path = Resource; sourceTree = ""; }; - 41276635261DA2620001BDEF /* Animation */ = { + E34069AA288A88BF00373612 /* Animation */ = { isa = PBXGroup; children = ( - 41276636261DA2620001BDEF /* tiezhiIcon */, + E34069AB288A891700373612 /* tiezhiIcon */, ); path = Animation; sourceTree = ""; }; - 41276636261DA2620001BDEF /* tiezhiIcon */ = { - isa = PBXGroup; - children = ( - 41276638261DA2620001BDEF /* 流星_00036.png */, - 41276639261DA2620001BDEF /* 流星_00037.png */, - 4127663A261DA2620001BDEF /* 流星_00041.png */, - 4127663B261DA2620001BDEF /* 流星_00040.png */, - 4127663C261DA2620001BDEF /* 流星_00042.png */, - 4127663D261DA2620001BDEF /* 流星_00043.png */, - 4127663E261DA2620001BDEF /* 流星_00047.png */, - 4127663F261DA2620001BDEF /* 流星_00052.png */, - 41276640261DA2620001BDEF /* 流星_00046.png */, - 41276641261DA2620001BDEF /* 流星_00050.png */, - 41276642261DA2620001BDEF /* 流星_00044.png */, - 41276643261DA2620001BDEF /* 流星_00045.png */, - 41276644261DA2620001BDEF /* 流星_00051.png */, - 41276645261DA2620001BDEF /* 流星_00048.png */, - 41276646261DA2620001BDEF /* 流星_00049.png */, - 41276647261DA2620001BDEF /* 流星_00039.png */, - 41276648261DA2620001BDEF /* 流星_00038.png */, - 41276637261DA2620001BDEF /* tiezhi_data.json */, + E34069AB288A891700373612 /* tiezhiIcon */ = { + isa = PBXGroup; + children = ( + E34069AD288A891700373612 /* 流星_00036.png */, + E34069AE288A891700373612 /* 流星_00037.png */, + E34069AF288A891700373612 /* 流星_00041.png */, + E34069B0288A891700373612 /* 流星_00040.png */, + E34069B1288A891700373612 /* 流星_00042.png */, + E34069B2288A891700373612 /* 流星_00043.png */, + E34069B3288A891700373612 /* 流星_00047.png */, + E34069B4288A891700373612 /* 流星_00052.png */, + E34069B5288A891700373612 /* 流星_00046.png */, + E34069B6288A891700373612 /* 流星_00050.png */, + E34069B7288A891700373612 /* 流星_00044.png */, + E34069B8288A891700373612 /* 流星_00045.png */, + E34069B9288A891700373612 /* 流星_00051.png */, + E34069BA288A891700373612 /* 流星_00048.png */, + E34069BB288A891700373612 /* 流星_00049.png */, + E34069BC288A891700373612 /* 流星_00039.png */, + E34069BD288A891700373612 /* 流星_00038.png */, + E34069AC288A891700373612 /* tiezhi_data.json */, ); path = tiezhiIcon; sourceTree = ""; }; - 412F774D2609C59C003AF848 /* Model */ = { - isa = PBXGroup; - children = ( - 412F774F2609C59C003AF848 /* FUBGSaveModel.h */, - 412F774E2609C59C003AF848 /* FUBGSaveModel.m */, - ); - path = Model; - sourceTree = ""; - }; - 41391C1A25E8CFBD005451E5 /* UI */ = { + E3406A25288AA9F500373612 /* ViewModel */ = { isa = PBXGroup; children = ( - E37CBD9421FFE728000C9C42 /* FUHeadButtonView.h */, - E37CBD9521FFE728000C9C42 /* FUHeadButtonView.m */, - 0BC0D25F21538BA300324D7D /* FULightingView.h */, - 0BC0D26021538BA300324D7D /* FULightingView.m */, - 0BC0D25C2153891300324D7D /* FULightingSlider.h */, - 0BC0D25D2153891300324D7D /* FULightingSlider.m */, - 0B5A0D362021917F00AAD47D /* FUPhotoButton.h */, - 0B5A0D372021917F00AAD47D /* FUPhotoButton.m */, - 0B5A0D2C2021917F00AAD47D /* FUCircleProgressView.h */, - 0B5A0D2D2021917F00AAD47D /* FUCircleProgressView.m */, - E334038722A1022100D56810 /* FUColourView.h */, - E334038822A1022100D56810 /* FUColourView.m */, - E334038A22A10BE900D56810 /* FUColourFlowLayout.h */, - E334038B22A10BE900D56810 /* FUColourFlowLayout.m */, - E3833EC123150781007D3A47 /* FUSwitch.h */, - E3833EC223150782007D3A47 /* FUSwitch.m */, - E3B3D0EF2350A99000263116 /* FUPopupMenu.h */, - E3B3D0F02350A99000263116 /* FUPopupMenu.m */, + E3406A27288AAA0600373612 /* FURenderViewModel.h */, + E3406A26288AAA0600373612 /* FURenderViewModel.m */, + E30721C628A234A000332859 /* FUImageRenderViewModel.h */, + E30721C728A234A000332859 /* FUImageRenderViewModel.m */, + E30721CA28A2369300332859 /* FUVideoRenderViewModel.h */, + E30721CB28A2369300332859 /* FUVideoRenderViewModel.m */, ); - path = UI; + path = ViewModel; sourceTree = ""; }; - 41391C1E25E8CFE9005451E5 /* Protocol */ = { + E3406A29288AAAEB00373612 /* View */ = { isa = PBXGroup; children = ( - 41DC51C725E8EF0200693F6F /* FUStickerProtocol.h */, - 4191A05825F1D3C30052AFB3 /* FUBaseUIModelProtocol.h */, - E3120FC7274666FF000456D9 /* FUSingleMakeupProtocol.h */, + E3406A39288AAB0700373612 /* FUPopupMenu.h */, + E3406A3B288AAB0800373612 /* FUPopupMenu.m */, + E3406A33288AAAF600373612 /* FUCircleProgressView.h */, + E3406A32288AAAF600373612 /* FUCircleProgressView.m */, + E3406A2E288AAAF600373612 /* FUHeadButtonView.h */, + E3406A2D288AAAF500373612 /* FUHeadButtonView.m */, + E3406A2C288AAAF500373612 /* FULightingSlider.h */, + E3406A30288AAAF600373612 /* FULightingSlider.m */, + E3406A2A288AAAF500373612 /* FULightingView.h */, + E3406A2B288AAAF500373612 /* FULightingView.m */, + E3A58CB128A3AEB100941101 /* FUCaptureButton.h */, + E3A58CB228A3AEB100941101 /* FUCaptureButton.m */, ); - path = Protocol; + path = View; sourceTree = ""; }; - 4156CD9226141DAE00DD72C1 /* Model */ = { + E3406A5A288AB80F00373612 /* Sticker */ = { isa = PBXGroup; children = ( - E3618FDF2857307C00E7D8D2 /* FUPersistentBeautyModel.h */, - E3618FE02857307C00E7D8D2 /* FUPersistentBeautyModel.m */, - 4156CD9D26141DCB00DD72C1 /* FUStyleModel.h */, - 4156CD9A26141DCB00DD72C1 /* FUStyleModel.m */, - 4156CD9426141DAE00DD72C1 /* FUBeautyModel.h */, - 4156CD9326141DAE00DD72C1 /* FUBeautyModel.m */, + E3923E3F288FC10800A5FB31 /* ViewController */, + E3923E39288FC0E500A5FB31 /* ViewModel */, ); - path = Model; + path = Sticker; sourceTree = ""; }; - 4156CDF4261470CF00DD72C1 /* QualitySticker */ = { + E3447D7528AA4467008E164C /* GestureRecognition */ = { isa = PBXGroup; children = ( - 4156CE2B261471E700DD72C1 /* Manager */, - 4156CDF6261470CF00DD72C1 /* Controller */, - 4156CDFC261470CF00DD72C1 /* Model */, - 4156CDFF261470CF00DD72C1 /* View */, + E3447D7628AA4467008E164C /* ViewModel */, + E3447D7928AA4467008E164C /* ViewController */, ); - path = QualitySticker; + path = GestureRecognition; sourceTree = ""; }; - 4156CDF6261470CF00DD72C1 /* Controller */ = { + E3447D7628AA4467008E164C /* ViewModel */ = { isa = PBXGroup; children = ( - 4156CDF7261470CF00DD72C1 /* FUQStickersViewController.h */, - 4156CDF9261470CF00DD72C1 /* FUQStickersViewController.m */, - 4156CDF8261470CF00DD72C1 /* FUStickersPageController.h */, - 4156CDFA261470CF00DD72C1 /* FUStickersPageController.m */, + E3447D7728AA4467008E164C /* FUGestureRecognitionViewModel.h */, + E3447D7828AA4467008E164C /* FUGestureRecognitionViewModel.m */, ); - path = Controller; + path = ViewModel; sourceTree = ""; }; - 4156CDFC261470CF00DD72C1 /* Model */ = { + E3447D7928AA4467008E164C /* ViewController */ = { isa = PBXGroup; children = ( - 4156CDFD261470CF00DD72C1 /* FUStickerModel.h */, - 4156CDFE261470CF00DD72C1 /* FUStickerModel.m */, + E3447D7B28AA4467008E164C /* FUGestureRecognitionViewController.h */, + E3447D7A28AA4467008E164C /* FUGestureRecognitionViewController.m */, ); - path = Model; + path = ViewController; sourceTree = ""; }; - 4156CDFF261470CF00DD72C1 /* View */ = { + E3447D8528AA4871008E164C /* GestureRecognition */ = { isa = PBXGroup; children = ( - 4156CE02261470CF00DD72C1 /* FUStickerCell.h */, - 4156CE00261470CF00DD72C1 /* FUStickerCell.m */, - 4156CE04261470CF00DD72C1 /* FUStickerCell.xib */, + E3447D8B28AA4886008E164C /* ctrl_flower_740.bundle */, + E3447D8628AA4880008E164C /* ctrl_rain_740.bundle */, + E3447D8C28AA4887008E164C /* ctrl_snow_740.bundle */, + E3447D8728AA4881008E164C /* ssd_thread_cute.bundle */, + E3447D8928AA4883008E164C /* ssd_thread_korheart.bundle */, + E3447D8828AA4882008E164C /* ssd_thread_six.bundle */, ); - path = View; + path = GestureRecognition; sourceTree = ""; }; - 4156CE23261471B100DD72C1 /* Category */ = { + E3447D9428AB39EC008E164C /* BodyAvatar */ = { isa = PBXGroup; children = ( - 41C0FF39260C6DF200CAFE62 /* NSObject+economizer.h */, - 41C0FF38260C6DF200CAFE62 /* NSObject+economizer.m */, - 4156CE25261471B100DD72C1 /* UIColor+FU.h */, - 4156CE24261471B100DD72C1 /* UIColor+FU.m */, - E30D5CFF2680984300EF70B1 /* UIImage+FU.h */, - E30D5D002680984300EF70B1 /* UIImage+FU.m */, - E3BEE31A26BA8831001220D1 /* UIView+FU.h */, - E3BEE31B26BA8831001220D1 /* UIView+FU.m */, + E3447D9528AB3A18008E164C /* ViewController */, + E3447D9628AB3A1C008E164C /* ViewModel */, + E3447DBA28AB4E7E008E164C /* View */, ); - path = Category; + path = BodyAvatar; sourceTree = ""; }; - 4156CE2B261471E700DD72C1 /* Manager */ = { + E3447D9528AB3A18008E164C /* ViewController */ = { isa = PBXGroup; children = ( - 4156CE38261472C100DD72C1 /* FUStickerHelper.h */, - 4156CE39261472C100DD72C1 /* FUStickerHelper.m */, - 4156CE31261472A700DD72C1 /* FUQualityStickerManager.h */, - 4156CE32261472A700DD72C1 /* FUQualityStickerManager.m */, + E3447D9728AB3A45008E164C /* FUBodyAvatarViewController.h */, + E3447D9828AB3A45008E164C /* FUBodyAvatarViewController.m */, ); - path = Manager; + path = ViewController; sourceTree = ""; }; - 4180A4FA26117F55003DC778 /* 道具贴纸 */ = { + E3447D9628AB3A1C008E164C /* ViewModel */ = { isa = PBXGroup; children = ( - 4180A50C26117F55003DC778 /* xlong_zh_fu.png */, - 4180A50D26117F55003DC778 /* xlong_zh_fu.bundle */, - 4180A50426117F55003DC778 /* sdlr.png */, - 4180A50526117F55003DC778 /* sdlr.bundle */, - 4180A4FC26117F55003DC778 /* redribbt.bundle */, - 4180A4FD26117F55003DC778 /* redribbt.png */, - 4180A51426117F55003DC778 /* CatSparks.png */, - 4180A51526117F55003DC778 /* CatSparks.bundle */, - 4180A52026117F55003DC778 /* newy1.png */, - 4180A52126117F55003DC778 /* newy1.bundle */, - 4180A52326117F55003DC778 /* DaisyPig.bundle */, - 4180A52226117F55003DC778 /* DaisyPig.png */, - 4180A51826117F55003DC778 /* fu_zh_fenshu.bundle */, - 4180A51B26117F55003DC778 /* fu_zh_fenshu.png */, - 4180A50E26117F55003DC778 /* sdlu.bundle */, - 4180A50A26117F55003DC778 /* sdlu.png */, + E3447D9A28AB3A56008E164C /* FUBodyAvatarViewModel.h */, + E3447D9B28AB3A56008E164C /* FUBodyAvatarViewModel.m */, ); - path = "道具贴纸"; + path = ViewModel; sourceTree = ""; }; - 4191A02F25F1C83F0052AFB3 /* View */ = { + E3447DBA28AB4E7E008E164C /* View */ = { isa = PBXGroup; children = ( - 4191A03225F1C83F0052AFB3 /* FULvMuView.h */, - 4191A03525F1C83F0052AFB3 /* FULvMuView.m */, - 4191A03125F1C83F0052AFB3 /* FUTakeColorView.h */, - 4191A03325F1C83F0052AFB3 /* FUTakeColorView.m */, - 4191A03425F1C83F0052AFB3 /* FUBgCollectionView.h */, - 4191A03025F1C83F0052AFB3 /* FUBgCollectionView.m */, - E39944C226C250BE003E4EFA /* FUSafeAreaCollectionView.h */, - E39944C326C250BE003E4EFA /* FUSafeAreaCollectionView.m */, + E3406A3E288AAB0800373612 /* FUSwitch.h */, + E3406A3C288AAB0800373612 /* FUSwitch.m */, ); path = View; sourceTree = ""; }; - 4191A03625F1C83F0052AFB3 /* VC */ = { + E3447DBB28AB69A9008E164C /* BodyAvatar */ = { isa = PBXGroup; children = ( - 4191A03825F1C83F0052AFB3 /* FULvMuViewController.h */, - 4191A03725F1C83F0052AFB3 /* FULvMuViewController.m */, - E3B3D76E2761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.h */, - E3B3D76F2761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.m */, + E3447DC628AB6A21008E164C /* Male */, + E3447DC028AB6A10008E164C /* Female */, + E3447DBC28AB69CC008E164C /* anim_idle.bundle */, + E3447DBD28AB69CD008E164C /* default_bg.bundle */, + E3ED025B28A10CE8000F28CD /* controller_config.bundle */, ); - path = VC; + path = BodyAvatar; sourceTree = ""; }; - 4191A03925F1C83F0052AFB3 /* Manager */ = { + E3447DC028AB6A10008E164C /* Female */ = { isa = PBXGroup; children = ( - 4191A03B25F1C83F0052AFB3 /* FUGreenScreenManager.h */, - 4191A03A25F1C83F0052AFB3 /* FUGreenScreenManager.m */, + E3447DCE28AB6A3A008E164C /* facemakeup_3.bundle */, + E3447DC528AB6A20008E164C /* female_hair_23.bundle */, + E3447DC128AB6A1D008E164C /* headnv.bundle */, + E3447DC328AB6A1F008E164C /* midBody_female.bundle */, + E3447DC428AB6A20008E164C /* taozhuang_12.bundle */, + E3447DC228AB6A1E008E164C /* toushi_5.bundle */, + E3447DC728AB6A21008E164C /* xiezi_danxie.bundle */, ); - path = Manager; + path = Female; sourceTree = ""; }; - 4191A05725F1D3770052AFB3 /* Model */ = { + E3447DC628AB6A21008E164C /* Male */ = { isa = PBXGroup; children = ( - 4191A06825F1D5FB0052AFB3 /* FUGreenScreenModel.h */, - 4191A06925F1D5FB0052AFB3 /* FUGreenScreenModel.m */, - 4191A06F25F1D7460052AFB3 /* FUGreenScreenBgModel.h */, - 4191A07025F1D7460052AFB3 /* FUGreenScreenBgModel.m */, - E39944D726C29492003E4EFA /* FUGreenScreenSafeAreaModel.h */, - E39944D826C29492003E4EFA /* FUGreenScreenSafeAreaModel.m */, + E3447DD228AB6A71008E164C /* headnan.bundle */, + E3447DD428AB6A73008E164C /* kuzi_changku_5.bundle */, + E3447DD328AB6A72008E164C /* male_hair_5.bundle */, + E3447DD128AB6A70008E164C /* midBody_male.bundle */, + E3447DD528AB6A74008E164C /* peishi_erding_2.bundle */, + E3447DD028AB6A6F008E164C /* toushi_7.bundle */, + E3447DD728AB6A75008E164C /* waitao_3.bundle */, + E3447DD628AB6A74008E164C /* xiezi_tuoxie_2.bundle */, ); - path = Model; + path = Male; sourceTree = ""; }; - 4198722D25F08AD30082AD1E /* Manager */ = { + E3447DEA28AB7E39008E164C /* Segmentation */ = { isa = PBXGroup; children = ( - 4198722F25F08AEE0082AD1E /* FULightMakeupManager.h */, - 4198723025F08AEE0082AD1E /* FULightMakeupManager.m */, + E3447DFE28AB7F04008E164C /* ViewController */, + E3447DFA28AB7E96008E164C /* ViewModel */, + E3447DEB28AB7E6C008E164C /* Model */, ); - path = Manager; + path = Segmentation; sourceTree = ""; }; - 41C45F5B25F71C8A006F8F4C /* Manager */ = { + E3447DEB28AB7E6C008E164C /* Model */ = { isa = PBXGroup; children = ( - 41C45F5D25F71CA2006F8F4C /* FUBodyAvatarManager.h */, - 41C45F5E25F71CA2006F8F4C /* FUBodyAvatarManager.m */, + E3447E0228AB8172008E164C /* FUSegmentationModel.h */, + E3447E0328AB8172008E164C /* FUSegmentationModel.m */, ); - path = Manager; + path = Model; sourceTree = ""; }; - 41DD2E6A25E7A3320030A363 /* Manager */ = { + E3447DFA28AB7E96008E164C /* ViewModel */ = { isa = PBXGroup; children = ( - 41DD2E7525E7A3940030A363 /* FUMusicFilterManager.h */, - 41DD2E7625E7A3940030A363 /* FUMusicFilterManager.m */, + E3447DFB28AB7EBE008E164C /* FUSegmentationViewModel.h */, + E3447DFC28AB7EBE008E164C /* FUSegmentationViewModel.m */, ); - path = Manager; + path = ViewModel; sourceTree = ""; }; - 41DD2E6C25E7A3370030A363 /* VC */ = { + E3447DFE28AB7F04008E164C /* ViewController */ = { isa = PBXGroup; children = ( - 41DD2E6E25E7A35F0030A363 /* FUMusicFilterController.h */, - 41DD2E6D25E7A35F0030A363 /* FUMusicFilterController.m */, + E3447DFF28AB7F1A008E164C /* FUSegmentationViewController.h */, + E3447E0028AB7F1A008E164C /* FUSegmentationViewController.m */, ); - path = VC; + path = ViewController; sourceTree = ""; }; - 41DD2E7D25E7A5B90030A363 /* Manager */ = { + E3447E0528AB84F8008E164C /* Segmentation */ = { isa = PBXGroup; children = ( - 41DD2E8C25E7A5F50030A363 /* FUBGSegmentManager.h */, - 41DD2E8D25E7A5F50030A363 /* FUBGSegmentManager.m */, + E3447E1128AB8FF1008E164C /* bg_segment.bundle */, + E3447E0B28AB8FE7008E164C /* boyfriend1_740.bundle */, + E3447E1028AB8FF0008E164C /* boyfriend2_740.bundle */, + E3447E0C28AB8FE9008E164C /* boyfriend3_740.bundle */, + E3447E1228AB8FF3008E164C /* gufeng_zh_fu.bundle */, + E3447E1328AB8FF5008E164C /* hez_ztt_fu.bundle */, + E3447E0D28AB8FEA008E164C /* human_outline_740.bundle */, + E3447E1428AB8FF8008E164C /* ice_lm_fu.bundle */, + E3447E0E28AB8FEC008E164C /* sea_lm_fu.bundle */, + E3447E0F28AB8FEE008E164C /* xiandai_ztt_fu.bundle */, + E3447E0828AB853E008E164C /* segmentation.json */, ); - path = Manager; + path = Segmentation; sourceTree = ""; }; - 41DD2E7E25E7A5BE0030A363 /* VC */ = { + E3447E2728AC875D008E164C /* FaceFusion */ = { isa = PBXGroup; children = ( - 41DD2E8425E7A5DB0030A363 /* FUBGSegmentationController.h */, - 41DD2E8525E7A5DB0030A363 /* FUBGSegmentationController.m */, - E30EBA7A283341DC00538844 /* FUBGSegmentationRenderMediaViewController.h */, - E30EBA7B283341DC00538844 /* FUBGSegmentationRenderMediaViewController.m */, + E3447E4F28AC87E4008E164C /* ViewController */, + E3447E2828AC875D008E164C /* ViewModel */, + E3447E3728AC875D008E164C /* View */, ); - path = VC; + path = FaceFusion; sourceTree = ""; }; - 41F9A8EF25EE306F0036C4D6 /* Manager */ = { + E3447E2828AC875D008E164C /* ViewModel */ = { isa = PBXGroup; children = ( - E36055AC27424A4E000C4421 /* FUMakeupManager.h */, - E36055AD27424A4E000C4421 /* FUMakeupManager.m */, + E3447E8028C1D319008E164C /* FUFaceFusionManager.h */, + E3447E8128C1D319008E164C /* FUFaceFusionManager.m */, + E3447E7D28C1D07F008E164C /* FUFaceFusionCaptureViewModel.h */, + E3447E7E28C1D07F008E164C /* FUFaceFusionCaptureViewModel.m */, ); - path = Manager; + path = ViewModel; sourceTree = ""; }; - 5F18E9D6F10E12A230D6B837 /* Pods */ = { + E3447E3728AC875D008E164C /* View */ = { isa = PBXGroup; children = ( - 29B79CC7B81FD9FA254B7E7E /* Pods-FULiveDemo.debug.xcconfig */, - D595CE4A595DEF848B6EF7B3 /* Pods-FULiveDemo.release.xcconfig */, + E3447E5328AC8D29008E164C /* FUFaceFusionCell.h */, + E3447E5428AC8D29008E164C /* FUFaceFusionCell.m */, + E3447ED928C59984008E164C /* FUFaceFusionTipView.h */, + E3447EDA28C59984008E164C /* FUFaceFusionTipView.m */, ); - name = Pods; + path = View; sourceTree = ""; }; - AC931D2325F4549A00834328 /* Manager */ = { + E3447E4F28AC87E4008E164C /* ViewController */ = { isa = PBXGroup; children = ( - AC931D2425F454B000834328 /* FUPosterManager.h */, - AC931D2525F454B000834328 /* FUPosterManager.m */, + E3447E5028AC889A008E164C /* FUFaceFusionCollectionViewController.h */, + E3447E5128AC889A008E164C /* FUFaceFusionCollectionViewController.m */, + E3447E7028C1CE9D008E164C /* FUFaceFusionCaptureViewController.h */, + E3447E7128C1CE9D008E164C /* FUFaceFusionCaptureViewController.m */, + E3447E8828C1E243008E164C /* FUFaceFusionCaptureResultViewController.h */, + E3447E8928C1E244008E164C /* FUFaceFusionCaptureResultViewController.m */, + E3447E8B28C1E2AF008E164C /* FUFaceFusionEffectViewController.h */, + E3447E8C28C1E2AF008E164C /* FUFaceFusionEffectViewController.m */, ); - path = Manager; + path = ViewController; sourceTree = ""; }; - ACBDCE3225F65D7B0036FC63 /* VC */ = { + E3447EE628C5DC4D008E164C /* FaceFusion */ = { isa = PBXGroup; children = ( - ACBDCE3325F65D7B0036FC63 /* FULightMakeupController.h */, - ACBDCE3425F65D7B0036FC63 /* FULightMakeupController.m */, + E3447EE728C5DC5E008E164C /* change_face.bundle */, ); - path = VC; + path = FaceFusion; sourceTree = ""; }; - ACBDCE3C25F65E160036FC63 /* VC */ = { + E354E79928E1726D00749C80 /* Model */ = { isa = PBXGroup; children = ( - ACBDCE3E25F65E310036FC63 /* FUBeautyController.h */, - ACBDCE3D25F65E310036FC63 /* FUBeautyController.m */, - E3B3D7662761AF4700FF0FAC /* FUBeautyRenderMediaViewController.h */, - E3B3D7672761AF4700FF0FAC /* FUBeautyRenderMediaViewController.m */, + E354E79A28E1728500749C80 /* FUHairBeautyModel.h */, + E354E79B28E1728500749C80 /* FUHairBeautyModel.m */, ); - path = VC; + path = Model; sourceTree = ""; }; - ACC0B5AD25F126F0002B56FC /* VC */ = { + E354E7E828E2C9C800749C80 /* Model */ = { isa = PBXGroup; children = ( - ACC0B5AF25F126F0002B56FC /* FUHairController.h */, - ACC0B5AE25F126F0002B56FC /* FUHairController.m */, + E354E7E928E2CC0500749C80 /* FUComicFilterModel.h */, + E354E7EA28E2CC0500749C80 /* FUComicFilterModel.m */, ); - path = VC; + path = Model; sourceTree = ""; }; - ACC0B5B025F126F0002B56FC /* Manager */ = { + E369F8B828D849790036AC5A /* Products */ = { isa = PBXGroup; children = ( - ACC0B5B125F126F0002B56FC /* FUHairManager.h */, - ACC0B5B225F126F0002B56FC /* FUHairManager.m */, + E369F8BC28D849790036AC5A /* FUGreenScreenComponent.framework */, ); - path = Manager; + name = Products; sourceTree = ""; }; - ACC0B5B325F126F0002B56FC /* View */ = { + E369F8BE28D8497E0036AC5A /* Products */ = { isa = PBXGroup; children = ( - ACC0B5B525F126F0002B56FC /* FUHairView.h */, - ACC0B5B425F126F0002B56FC /* FUHairView.m */, - ACC0B5B625F126F0002B56FC /* FUHairView.xib */, + E369F8C228D8497E0036AC5A /* FUMakeupComponent.framework */, ); - path = View; + name = Products; sourceTree = ""; }; - CD4D6EA421796EA400E02F39 /* 海报换脸 */ = { + E369F8C428D849810036AC5A /* Products */ = { isa = PBXGroup; children = ( - CD4D6EA521796EA400E02F39 /* change_face.bundle */, + E369F8C828D849810036AC5A /* FUBeautyComponent.framework */, ); - path = "海报换脸"; + name = Products; sourceTree = ""; }; - CDA6083A216F406900A3DA93 /* 人像分割 */ = { + E369F91128D85F4C0036AC5A /* Render */ = { isa = PBXGroup; children = ( - 412399982615767A00F0DFC3 /* bg_segment.bundle */, - E3731234287BC02C004A465A /* boyfriend1_740.bundle */, - E3731235287BC02C004A465A /* boyfriend2_740.bundle */, - E3731233287BC02B004A465A /* boyfriend3_740.bundle */, - E3731239287BC033004A465A /* human_outline_740.bundle */, - E322644F225F083F003A6182 /* gufeng_zh_fu.bundle */, - E322644E225F083F003A6182 /* hez_ztt_fu.bundle */, - E3226448225F083F003A6182 /* ice_lm_fu.bundle */, - E322644B225F083F003A6182 /* sea_lm_fu.bundle */, - E3226447225F083F003A6182 /* xiandai_ztt_fu.bundle */, + E3AD21F828DACBCF004D3F80 /* landmarks.bundle */, + E3328D9328E4705800216BDC /* test_configurations.plist */, ); - path = "人像分割"; + path = Render; sourceTree = ""; }; - E303EE2527E9E79C00FFEFA9 /* Lib */ = { + E3923E39288FC0E500A5FB31 /* ViewModel */ = { isa = PBXGroup; children = ( - E3447EA428C203A2008E164C /* FURenderKit.framework */, - E37ED5DC282A44FF004E6A0B /* Resources */, - 0B5A0CEB2021917F00AAD47D /* authpack.h */, + E3923E3C288FC10000A5FB31 /* FUStickerViewModel.h */, + E3923E3D288FC10000A5FB31 /* FUStickerViewModel.m */, + E30721D428A2548500332859 /* FUStickerImageRenderViewModel.h */, + E30721D528A2548500332859 /* FUStickerImageRenderViewModel.m */, + E369F91528D867CE0036AC5A /* FUStickerVideoRenderViewModel.h */, + E369F91628D867CE0036AC5A /* FUStickerVideoRenderViewModel.m */, + E369F94B28D9AB530036AC5A /* FUStickerComponentManager.h */, + E369F94C28D9AB530036AC5A /* FUStickerComponentManager.m */, + E369F94E28D9AE3C0036AC5A /* FUStickerComponentViewModel.h */, + E369F94F28D9AE3C0036AC5A /* FUStickerComponentViewModel.m */, ); - path = Lib; + path = ViewModel; sourceTree = ""; }; - E307093623580A28006CC017 /* LightMakeup */ = { + E3923E3F288FC10800A5FB31 /* ViewController */ = { isa = PBXGroup; children = ( - ACBDCE3225F65D7B0036FC63 /* VC */, - 4198722D25F08AD30082AD1E /* Manager */, - E307093E235815B6006CC017 /* Model */, - E307093A23580B9E006CC017 /* View */, + E3923E40288FC18E00A5FB31 /* FUStickerViewController.h */, + E3923E41288FC18E00A5FB31 /* FUStickerViewController.m */, + E30721D128A2545100332859 /* FUStickerImageRenderViewController.h */, + E30721D228A2545100332859 /* FUStickerImageRenderViewController.m */, + E369F91228D867730036AC5A /* FUStickerVideoRenderViewController.h */, + E369F91328D867730036AC5A /* FUStickerVideoRenderViewController.m */, ); - path = LightMakeup; + path = ViewController; sourceTree = ""; }; - E307093A23580B9E006CC017 /* View */ = { + E3923E45288FC98600A5FB31 /* Sticker */ = { isa = PBXGroup; children = ( - E307093B23580BFA006CC017 /* FULightMakeupCollectionView.h */, - E307093C23580BFA006CC017 /* FULightMakeupCollectionView.m */, - E37D20B42754A472007BE062 /* FULightMakeupCell.h */, - E37D20B52754A472007BE062 /* FULightMakeupCell.m */, + E3923E47288FC99A00A5FB31 /* CatSparks.bundle */, + E3923E49288FC99A00A5FB31 /* DaisyPig.bundle */, + E3923E53288FC99B00A5FB31 /* fu_zh_fenshu.bundle */, + E3923E4C288FC99A00A5FB31 /* newy1.bundle */, + E3923E48288FC99A00A5FB31 /* redribbt.bundle */, + E3923E4B288FC99A00A5FB31 /* sdlr.bundle */, + E3923E55288FC99B00A5FB31 /* sdlu.bundle */, + E3923E4E288FC99B00A5FB31 /* xlong_zh_fu.bundle */, ); - path = View; + path = Sticker; sourceTree = ""; }; - E307093E235815B6006CC017 /* Model */ = { + E3923E66288FC9CD00A5FB31 /* Others */ = { isa = PBXGroup; children = ( - E307093F235815FF006CC017 /* FULightModel.h */, - E3070940235815FF006CC017 /* FULightModel.m */, + E34069AA288A88BF00373612 /* Animation */, ); - path = Model; + path = Others; sourceTree = ""; }; - E31D91412429B4490054AFFA /* 子妆容 */ = { + E3923E6B288FDEDA00A5FB31 /* Beauty */ = { isa = PBXGroup; children = ( - E346BFF027044DF20090F3B3 /* 口红 */, - E3D5785222B734AC00D08E5D /* 眉毛 */, - E3D577E922B33DEA00D08E5D /* 粉底 */, - E3D577F422B33DEA00D08E5D /* 高光 */, - E3D577ED22B33DEA00D08E5D /* 睫毛 */, - E3D577EB22B33DEA00D08E5D /* 美瞳 */, - E3D577E422B33DEA00D08E5D /* 腮红 */, - E3D577F722B33DEA00D08E5D /* 眼线 */, - E3D577FE22B33DEA00D08E5D /* 眼影 */, - E3D5781222B33DEA00D08E5D /* 阴影 */, + E3923E6D288FDEE400A5FB31 /* ViewController */, + E3CD59A7289780C90088ED12 /* ViewModel */, ); - path = "子妆容"; + path = Beauty; sourceTree = ""; }; - E31D91422429BE3D0054AFFA /* 日常妆 */ = { + E3923E6D288FDEE400A5FB31 /* ViewController */ = { isa = PBXGroup; children = ( - E31D91432429BE3D0054AFFA /* bundle */, - E31D91492429BE3D0054AFFA /* json */, + E3923E6E288FDEF400A5FB31 /* FUBeautyViewController.h */, + E3923E6F288FDEF400A5FB31 /* FUBeautyViewController.m */, + E3A58CA828A38CB000941101 /* FUBeautyImageRenderViewController.h */, + E3A58CA928A38CB000941101 /* FUBeautyImageRenderViewController.m */, + E3447D6428A9FDCD008E164C /* FUBeautyVideoRenderViewController.h */, + E3447D6528A9FDCD008E164C /* FUBeautyVideoRenderViewController.m */, ); - path = "日常妆"; + path = ViewController; sourceTree = ""; }; - E31D91432429BE3D0054AFFA /* bundle */ = { + E397099F28A0B37A00FC0F46 /* LightMakeup */ = { isa = PBXGroup; children = ( - E31D91442429BE3D0054AFFA /* oumei.bundle */, - E31D91452429BE3D0054AFFA /* linjia.bundle */, - E31D91462429BE3D0054AFFA /* tianmei.bundle */, - E31D91472429BE3D0054AFFA /* wumei.bundle */, - E31D91482429BE3D0054AFFA /* xinggan.bundle */, + E39709A328A0B37A00FC0F46 /* ViewController */, + E39709B328A0B91F00FC0F46 /* ViewModel */, + E39709A928A0B37A00FC0F46 /* View */, + E39709A628A0B37A00FC0F46 /* Model */, ); - path = bundle; + path = LightMakeup; sourceTree = ""; }; - E31D91492429BE3D0054AFFA /* json */ = { + E39709A328A0B37A00FC0F46 /* ViewController */ = { isa = PBXGroup; children = ( - E31D914A2429BE3D0054AFFA /* wumei.json */, - E31D914B2429BE3D0054AFFA /* oumei.json */, - E31D914C2429BE3D0054AFFA /* tianmei.json */, - E31D914D2429BE3D0054AFFA /* xinggan.json */, - E31D914E2429BE3D0054AFFA /* linjia.json */, + E39709A428A0B37A00FC0F46 /* FULightMakeupViewController.h */, + E39709A528A0B37A00FC0F46 /* FULightMakeupViewController.m */, ); - path = json; + path = ViewController; sourceTree = ""; }; - E331EBE124ED38D400F47C43 /* 绿幕 */ = { + E39709A628A0B37A00FC0F46 /* Model */ = { isa = PBXGroup; children = ( - E39944EE26C3B5BA003E4EFA /* safe_area_1.jpg */, - E39944ED26C3B5BA003E4EFA /* safe_area_2.jpg */, - E3FA7BAD2514985300D07E92 /* science.mp4 */, - E37743A32513666400682A2D /* classroom.mp4 */, - E37743A12513665B00682A2D /* beach.mp4 */, - E37743972513663400682A2D /* hotStamping.mp4 */, - E377439A2513663500682A2D /* inkPainting.mp4 */, - E377439B2513663500682A2D /* springForest.mp4 */, - E34378A524EE3EF30040B94A /* green_screen.bundle */, + E39709B728A0BC4100FC0F46 /* FULightMakeupModel.h */, + E39709B828A0BC4100FC0F46 /* FULightMakeupModel.m */, ); - path = "绿幕"; + path = Model; sourceTree = ""; }; - E332E5F024AF2FFF00232C4A /* 美发 */ = { + E39709A928A0B37A00FC0F46 /* View */ = { isa = PBXGroup; children = ( - E3DD0F5D2484D7FC0064CF7E /* hair_normal.bundle */, - E3DD0F5B2484D7FC0064CF7E /* hair_gradient.bundle */, + E39709AA28A0B37A00FC0F46 /* FULightMakeupCell.h */, + E39709AC28A0B37A00FC0F46 /* FULightMakeupCell.m */, ); - path = "美发"; + path = View; sourceTree = ""; }; - E33C978F288E4C1400374C69 /* Products */ = { + E39709B328A0B91F00FC0F46 /* ViewModel */ = { isa = PBXGroup; children = ( - E33C9793288E4C1400374C69 /* FUCommonUIComponent.framework */, + E39709B428A0B93100FC0F46 /* FULightMakeupViewModel.h */, + E39709B528A0B93100FC0F46 /* FULightMakeupViewModel.m */, ); - name = Products; + path = ViewModel; sourceTree = ""; }; - E3447F0328C61B7C008E164C /* Products */ = { + E39709BA28A0C13D00FC0F46 /* LightMakeup */ = { isa = PBXGroup; children = ( - E3447F0728C61B7C008E164C /* FUVideoComponent.framework */, + E39709C028A0EA6700FC0F46 /* light_makeup.bundle */, + E39709BB28A0C15200FC0F46 /* light_makeup.json */, + E39709C428A0EFA400FC0F46 /* mu_blush_01.png */, + E39709D028A0F03400FC0F46 /* mu_blush_20.png */, + E39709D628A0F05A00FC0F46 /* mu_blush_22.png */, + E39709CA28A0F01000FC0F46 /* mu_blush_23.png */, + E39709C628A0EFE200FC0F46 /* mu_eyebrow_01.png */, + E39709D228A0F03E00FC0F46 /* mu_eyebrow_16.png */, + E39709D828A0F06300FC0F46 /* mu_eyebrow_18.png */, + E39709CC28A0F01E00FC0F46 /* mu_eyebrow_19.png */, + E39709C828A0F00700FC0F46 /* mu_eyeshadow_01.png */, + E39709D428A0F04D00FC0F46 /* mu_eyeshadow_18.png */, + E39709DA28A0F06900FC0F46 /* mu_eyeshadow_20.png */, + E39709CE28A0F02700FC0F46 /* mu_eyeshadow_21.png */, ); - name = Products; + path = LightMakeup; sourceTree = ""; }; - E346BFF027044DF20090F3B3 /* 口红 */ = { + E39709DC28A0F44900FC0F46 /* QualitySticker */ = { isa = PBXGroup; children = ( - E346BFF127044DF20090F3B3 /* mu_style_lip_03.bundle */, - E346BFF227044DF20090F3B3 /* mu_style_lip_01.bundle */, - E346BFF327044DF20090F3B3 /* mu_style_lip_05.bundle */, - E346BFF427044DF20090F3B3 /* mu_style_lip_02.bundle */, - E346BFF527044DF20090F3B3 /* mu_style_lip_04.bundle */, + E39709DD28A0F44900FC0F46 /* Controller */, + E39709E228A0F44900FC0F46 /* ViewModel */, + E39709E728A0F44900FC0F46 /* Model */, + E39709EA28A0F44900FC0F46 /* View */, ); - path = "口红"; + path = QualitySticker; sourceTree = ""; }; - E34AE69924E5379E000531D9 /* GreenScreen */ = { + E39709DD28A0F44900FC0F46 /* Controller */ = { isa = PBXGroup; children = ( - 4191A05725F1D3770052AFB3 /* Model */, - 4191A03925F1C83F0052AFB3 /* Manager */, - 4191A03625F1C83F0052AFB3 /* VC */, - 4191A02F25F1C83F0052AFB3 /* View */, - 4191A04E25F1CDB10052AFB3 /* FUGreenScreenDefine.h */, + E39709DE28A0F44900FC0F46 /* FUQualityStickerViewController.h */, + E39709E028A0F44900FC0F46 /* FUQualityStickerViewController.m */, + E39709DF28A0F44900FC0F46 /* FUQualityStickerPageController.h */, + E39709E128A0F44900FC0F46 /* FUQualityStickerPageController.m */, ); - path = GreenScreen; + path = Controller; sourceTree = ""; }; - E35AE6392226709C0076C375 /* FUAPIDemoBar */ = { + E39709E228A0F44900FC0F46 /* ViewModel */ = { isa = PBXGroup; children = ( - E3C8875A23C47AEC00CA732C /* FUAPIDemoBar.h */, - E3C8875923C47AEC00CA732C /* FUAPIDemoBar.m */, - E35AE63A2226709C0076C375 /* FUAPIDemoBar.xib */, - E35AE6422226709C0076C375 /* FUBeautyView.h */, - E35AE6432226709C0076C375 /* FUBeautyView.m */, - E35AE6492226709C0076C375 /* FUFilterView.h */, - E35AE64A2226709C0076C375 /* FUFilterView.m */, - E35AE6582226709C0076C375 /* UIImage+demobar.h */, - E35AE6592226709C0076C375 /* UIImage+demobar.m */, - E3C8875623C479EA00CA732C /* FUBeautyParam.h */, - E3C8875723C479EA00CA732C /* FUBeautyParam.m */, - E35AE6462226709C0076C375 /* FUDemoBarDefine.h */, - E35AE6532226709C0076C375 /* Media.xcassets */, + E3ED025328A0F6D5000F28CD /* FUQualityStickerViewModel.h */, + E3ED024C28A0F6D5000F28CD /* FUQualityStickerViewModel.m */, + E39709E328A0F44900FC0F46 /* FUQualityStickerHelper.h */, + E39709E528A0F44900FC0F46 /* FUQualityStickerHelper.m */, ); - path = FUAPIDemoBar; + path = ViewModel; sourceTree = ""; }; - E36A1E8D21DDAA1B007BA863 /* Poster */ = { + E39709E728A0F44900FC0F46 /* Model */ = { isa = PBXGroup; children = ( - AC931D2325F4549A00834328 /* Manager */, - E36A1E9021DDAADD007BA863 /* VC */, - E36A1E8E21DDAAC5007BA863 /* View */, + E39709E828A0F44900FC0F46 /* FUQualityStickerModel.h */, + E39709E928A0F44900FC0F46 /* FUQualityStickerModel.m */, ); - path = Poster; + path = Model; sourceTree = ""; }; - E36A1E8E21DDAAC5007BA863 /* View */ = { + E39709EA28A0F44900FC0F46 /* View */ = { isa = PBXGroup; children = ( - E3706F44216B3AE6004BFC7F /* FUPosterCell.h */, - E3706F45216B3AE6004BFC7F /* FUPosterCell.m */, - E3706F4E216B4E4E004BFC7F /* FUPosterCell.xib */, + E39709EC28A0F44900FC0F46 /* FUQualityStickerCell.h */, + E39709EB28A0F44900FC0F46 /* FUQualityStickerCell.m */, + E39709ED28A0F44900FC0F46 /* FUQualityStickerCell.xib */, ); path = View; sourceTree = ""; }; - E36A1E9021DDAADD007BA863 /* VC */ = { - isa = PBXGroup; - children = ( - E3706F49216B4DDC004BFC7F /* FUPosterListViewController.h */, - E3706F4A216B4DDC004BFC7F /* FUPosterListViewController.m */, - E3706F4B216B4DDC004BFC7F /* FUPosterListViewController.xib */, - E37CBDA522029EF0000C9C42 /* FUPosterController.h */, - E37CBDA622029EF0000C9C42 /* FUPosterController.m */, - E3706F50216B68B1004BFC7F /* FUSaveViewController.h */, - E3706F51216B68B1004BFC7F /* FUSaveViewController.m */, - E3706F52216B68B1004BFC7F /* FUSaveViewController.xib */, - E3706F55216C304C004BFC7F /* FUEditImageViewController.h */, - E3706F56216C304C004BFC7F /* FUEditImageViewController.m */, - E3706F57216C304C004BFC7F /* FUEditImageViewController.xib */, - ); - path = VC; - sourceTree = ""; - }; - E36A1E9221DDAC18007BA863 /* Config */ = { + E397137B289BC0A3002933BE /* Animoji */ = { isa = PBXGroup; children = ( - 4156CE2C2614727B00DD72C1 /* FULiveDefine.h */, - 0B5A0D7B2021919600AAD47D /* dataSource.plist */, - E37E55082872BD11002952A1 /* homepage_data_source.json */, - E3C14DDB22ADFE7D004C20C4 /* lightMakeup.json */, - E39E1B12222D0F49008F76A4 /* makeup.json */, - E379ED70223644B20080BD04 /* makeup_whole.json */, - E37FF63A22F3E82F0014821C /* BodyBeautyDefault.json */, + E3971387289BC0AF002933BE /* ViewController */, + E3971388289BC0B4002933BE /* ViewModel */, + E354E7E828E2C9C800749C80 /* Model */, ); - path = Config; + path = Animoji; sourceTree = ""; }; - E36A1E9321DDAF0C007BA863 /* Resource */ = { + E3971387289BC0AF002933BE /* ViewController */ = { isa = PBXGroup; children = ( - E3583E8827117458008E52A7 /* landmarks.bundle */, - 41276635261DA2620001BDEF /* Animation */, - E3706F6D216ED9E1004BFC7F /* loading.gif */, - 0B482C422064FBBB0073939A /* items */, + E3971382289BC0A3002933BE /* FUAnimojiViewController.h */, + E3971383289BC0A3002933BE /* FUAnimojiViewController.m */, ); - path = Resource; + path = ViewController; sourceTree = ""; }; - E374BFFC2885485D00931142 /* ViewModel */ = { + E3971388289BC0B4002933BE /* ViewModel */ = { isa = PBXGroup; children = ( - E374C003288548D700931142 /* FUARMaskViewModel.h */, - E374C004288548D700931142 /* FUARMaskViewModel.m */, + E3971389289BC147002933BE /* FUAnimojiViewModel.h */, + E397138A289BC147002933BE /* FUAnimojiViewModel.m */, ); path = ViewModel; sourceTree = ""; }; - E374C0022885486100931142 /* ViewController */ = { + E397138C289BD055002933BE /* Animoji */ = { isa = PBXGroup; children = ( - E374C00628854AF500931142 /* FUARMaskViewController.h */, - E374C00728854AF500931142 /* FUARMaskViewController.m */, + E354E7E628E2C89700749C80 /* comic_filter.json */, + E397138F289BD055002933BE /* baihu_Animoji.bundle */, + E397139B289BD055002933BE /* baimao_Animoji.bundle */, + E397138E289BD055002933BE /* cartoon_princess_Animoji.bundle */, + E3971390289BD055002933BE /* douniuquan_Animoji.bundle */, + E39713A4289BD055002933BE /* frog_Animoji.bundle */, + E39713A0289BD055002933BE /* hashiqi_Animoji.bundle */, + E39713A2289BD055002933BE /* hetun_Animoji.bundle */, + E3971398289BD055002933BE /* huangya_Animoji.bundle */, + E3971392289BD055002933BE /* kaola_Animoji.bundle */, + E3971396289BD055002933BE /* kuloutou_Animoji.bundle */, + E3971395289BD055002933BE /* qgirl_Animoji.bundle */, + E397139A289BD055002933BE /* wuxia_Animoji.bundle */, ); - path = ViewController; + path = Animoji; sourceTree = ""; }; - E374C00928854D9800931142 /* Hilarious */ = { + E39713BD289BD074002933BE /* Homepage */ = { isa = PBXGroup; children = ( - E374C00A28854DAB00931142 /* ViewController */, - E374C00B28854DB100931142 /* ViewModel */, + E34069A6288A87D200373612 /* homepage_data_source.json */, ); - path = Hilarious; + path = Homepage; sourceTree = ""; }; - E374C00A28854DAB00931142 /* ViewController */ = { + E39713CE289CBBDF002933BE /* HairBeauty */ = { isa = PBXGroup; children = ( - E374C00C28854DE400931142 /* FUHilariousViewController.h */, - E374C00D28854DE400931142 /* FUHilariousViewController.m */, + E39713E0289CF059002933BE /* ViewController */, + E39713CF289CBBDF002933BE /* ViewModel */, + E39713D5289CBBDF002933BE /* View */, + E354E79928E1726D00749C80 /* Model */, ); - path = ViewController; + path = HairBeauty; sourceTree = ""; }; - E374C00B28854DB100931142 /* ViewModel */ = { + E39713CF289CBBDF002933BE /* ViewModel */ = { isa = PBXGroup; children = ( - E374C0772886842B00931142 /* FUHilariousViewModel.h */, - E374C0762886842B00931142 /* FUHilariousViewModel.m */, + E39713D0289CBBDF002933BE /* FUHairBeautyViewModel.h */, + E39713D1289CBBDF002933BE /* FUHairBeautyViewModel.m */, ); path = ViewModel; sourceTree = ""; }; - E374C04F2886621400931142 /* ExpressionRecognition */ = { - isa = PBXGroup; - children = ( - E374C0512886624000931142 /* ViewController */, - E374C0502886623D00931142 /* ViewModel */, - ); - path = ExpressionRecognition; - sourceTree = ""; - }; - E374C0502886623D00931142 /* ViewModel */ = { + E39713D5289CBBDF002933BE /* View */ = { isa = PBXGroup; children = ( - E374C0742886840200931142 /* FUExpressionRecognitionViewModel.h */, - E374C0732886840200931142 /* FUExpressionRecognitionViewModel.m */, + E39713DD289CE648002933BE /* FUHairBeautyView.h */, + E39713DE289CE648002933BE /* FUHairBeautyView.m */, ); - path = ViewModel; + path = View; sourceTree = ""; }; - E374C0512886624000931142 /* ViewController */ = { + E39713E0289CF059002933BE /* ViewController */ = { isa = PBXGroup; children = ( - E374C0552886627200931142 /* FUExpressionRecognitionViewController.h */, - E374C0562886627200931142 /* FUExpressionRecognitionViewController.m */, + E39713E1289CF4BD002933BE /* FUHairBeautyViewController.h */, + E39713E2289CF4BD002933BE /* FUHairBeautyViewController.m */, ); path = ViewController; sourceTree = ""; }; - E374C05828867B9100931142 /* DistortingMirror */ = { - isa = PBXGroup; - children = ( - E374C05A28867C1A00931142 /* ViewController */, - E374C05928867C1600931142 /* ViewModel */, - ); - path = DistortingMirror; - sourceTree = ""; - }; - E374C05928867C1600931142 /* ViewModel */ = { + E39713E7289D075F002933BE /* HairBeauty */ = { isa = PBXGroup; children = ( - E374C06E2886839000931142 /* FUDistortingMirrorViewModel.h */, - E374C06D2886839000931142 /* FUDistortingMirrorViewModel.m */, + E354E79D28E1733400749C80 /* hair_beauty.json */, + E39713E9289D076D002933BE /* hair_gradient.bundle */, + E39713E8289D076C002933BE /* hair_normal.bundle */, ); - path = ViewModel; + path = HairBeauty; sourceTree = ""; }; - E374C05A28867C1A00931142 /* ViewController */ = { + E3A07C86288939BD00E6F7E5 = { isa = PBXGroup; children = ( - E374C06B2886838900931142 /* FUDistortingMirrorViewController.h */, - E374C06A2886838900931142 /* FUDistortingMirrorViewController.m */, + E3381C9A28DB12C1005C2E57 /* docs */, + E3A58DEC28A66F5A00941101 /* FUCommonUIComponent.xcodeproj */, + E3AD21E928D9E14A004D3F80 /* FUVideoComponent.xcodeproj */, + E369F8C328D849810036AC5A /* FUBeautyComponent.xcodeproj */, + E369F8BD28D8497E0036AC5A /* FUMakeupComponent.xcodeproj */, + E369F8B728D849790036AC5A /* FUGreenScreenComponent.xcodeproj */, + E3A07C91288939BD00E6F7E5 /* FULiveDemo */, + E3A07C90288939BD00E6F7E5 /* Products */, + 0FEF24C81684606BC346F611 /* Pods */, + A69AF30DBA1C19D48658BE8B /* Frameworks */, ); - path = ViewController; sourceTree = ""; }; - E374C061288680BD00931142 /* GestureRecognition */ = { + E3A07C90288939BD00E6F7E5 /* Products */ = { isa = PBXGroup; children = ( - E374C0632886811600931142 /* ViewController */, - E374C0622886811000931142 /* ViewModel */, + E3A07C8F288939BD00E6F7E5 /* FULiveDemo.app */, ); - path = GestureRecognition; + name = Products; sourceTree = ""; }; - E374C0622886811000931142 /* ViewModel */ = { + E3A07C91288939BD00E6F7E5 /* FULiveDemo */ = { isa = PBXGroup; children = ( - E374C07A288684C500931142 /* FUGestureRecognitionViewModel.h */, - E374C079288684C500931142 /* FUGestureRecognitionViewModel.m */, + E3A07CAC28893D4300E6F7E5 /* Homepage */, + E3A07CC628893E2D00E6F7E5 /* Render */, + E33C97B9288EB6DE00374C69 /* MediaPicker */, + E3406988288A569600373612 /* Modules */, + E3406995288A7B2400373612 /* Helper */, + E34069A5288A87AF00373612 /* Resource */, + E3A07CAB28893A5500E6F7E5 /* Application */, + E3406994288A7A5700373612 /* FURenderKit */, ); - path = ViewModel; + path = FULiveDemo; sourceTree = ""; }; - E374C0632886811600931142 /* ViewController */ = { + E3A07CAB28893A5500E6F7E5 /* Application */ = { isa = PBXGroup; children = ( - E374C07C288684D000931142 /* FUGestureRecognitionViewController.h */, - E374C07D288684D000931142 /* FUGestureRecognitionViewController.m */, + E3A07C9E288939BE00E6F7E5 /* Assets.xcassets */, + E340699E288A824700373612 /* Localizable.strings */, + E340698B288A5A9B00373612 /* Info.plist */, + E3A07CA4288939BE00E6F7E5 /* main.m */, + E3A07C92288939BD00E6F7E5 /* AppDelegate.h */, + E3A07C93288939BD00E6F7E5 /* AppDelegate.m */, + E3406998288A7C0600373612 /* PrefixHeader.pch */, + E3381CF428DD864F005C2E57 /* LaunchScreen.storyboard */, ); - path = ViewController; + path = Application; sourceTree = ""; }; - E37A8747248F7B27006D900C /* 全身avatar */ = { + E3A07CAC28893D4300E6F7E5 /* Homepage */ = { isa = PBXGroup; children = ( - E38D2F3824A07D760069AA0A /* anim_idle.bundle */, - E39CF98D249A1187003A6C14 /* default_bg.bundle */, - E39CF98B249A117B003A6C14 /* controller_config.bundle */, - E39CF95D249A030A003A6C14 /* 男模0610 */, - E39CF949249A0307003A6C14 /* 女模0610 */, + E3A07CBC28893D4300E6F7E5 /* ViewController */, + E3A07CAD28893D4300E6F7E5 /* ViewModel */, + E3A07CB028893D4300E6F7E5 /* Model */, + E3A07CB528893D4300E6F7E5 /* View */, ); - path = "全身avatar"; + path = Homepage; sourceTree = ""; }; - E37CBD8921FECEBE000C9C42 /* Modules */ = { + E3A07CAD28893D4300E6F7E5 /* ViewModel */ = { isa = PBXGroup; children = ( - E37E54ED287298E8002952A1 /* Homepage */, - E3B51FF0275F358E0098314E /* Render */, - E37CBD8F21FED8A0000C9C42 /* Beauty */, - E37CBD9722017345000C9C42 /* Makeup */, - E386784A28813EAF005A94A4 /* Sticker */, - E37CBDA82202C904000C9C42 /* Animoji */, - E37CBDAE2202D1C5000C9C42 /* HairBeauty */, - E307093623580A28006CC017 /* LightMakeup */, - E386785C2881525E005A94A4 /* ARMask */, - E374C00928854D9800931142 /* Hilarious */, - E36A1E8D21DDAA1B007BA863 /* Poster */, - E374C04F2886621400931142 /* ExpressionRecognition */, - E37CBDB72202F1B2000C9C42 /* MusicFilter */, - E374C05828867B9100931142 /* DistortingMirror */, - E37FF63122F3E5350014821C /* BodyBeauty */, - E39CF9452499F6E6003A6C14 /* BodyAvtar */, - E3F0EF1F22C1FB880018FF13 /* Segmentation */, - E374C061288680BD00931142 /* GestureRecognition */, - E34AE69924E5379E000531D9 /* GreenScreen */, - 4156CDF4261470CF00DD72C1 /* QualitySticker */, + E3A07CAF28893D4300E6F7E5 /* FUHomepageViewModel.h */, + E3A07CAE28893D4300E6F7E5 /* FUHomepageViewModel.m */, ); - path = Modules; + path = ViewModel; sourceTree = ""; }; - E37CBD8B21FED155000C9C42 /* AppSupportFiles */ = { + E3A07CB028893D4300E6F7E5 /* Model */ = { isa = PBXGroup; children = ( - 0B5A0CB82021913900AAD47D /* AppDelegate.h */, - E38CA9CC2823ABB400414FCA /* AppDelegate.m */, - 0B5A0CC32021913900AAD47D /* LaunchScreen.storyboard */, - 0B6B010020F49C0F0079118B /* Localizable.strings */, - E3DF96BE2369403D00DB49B2 /* InfoPlist.strings */, - 0B5A0CC72021913900AAD47D /* main.m */, - 0B5A0CC62021913900AAD47D /* Info.plist */, + E3A07CB328893D4300E6F7E5 /* FUHomepageModel.h */, + E3A07CB128893D4300E6F7E5 /* FUHomepageModel.m */, ); - path = AppSupportFiles; + path = Model; sourceTree = ""; }; - E37CBD8F21FED8A0000C9C42 /* Beauty */ = { + E3A07CB528893D4300E6F7E5 /* View */ = { isa = PBXGroup; children = ( - 4156CDA426141E0900DD72C1 /* FUBeautyDefine.h */, - 4156CD9226141DAE00DD72C1 /* Model */, - ACBDCE3C25F65E160036FC63 /* VC */, - E35AE6392226709C0076C375 /* FUAPIDemoBar */, + E3A07CB628893D4300E6F7E5 /* FUHomepageHeaderView.h */, + E3A07CB928893D4300E6F7E5 /* FUHomepageHeaderView.m */, + E3A07CB828893D4300E6F7E5 /* FUHomepageModuleCell.h */, + E3A07CBB28893D4300E6F7E5 /* FUHomepageModuleCell.m */, ); - path = Beauty; + path = View; sourceTree = ""; }; - E37CBD9722017345000C9C42 /* Makeup */ = { + E3A07CBC28893D4300E6F7E5 /* ViewController */ = { isa = PBXGroup; children = ( - 41F9A8EF25EE306F0036C4D6 /* Manager */, - E37CBD9B22017618000C9C42 /* VC */, - E37CBD9C2201763E000C9C42 /* View */, - E39E1B1E222D0FB9008F76A4 /* Model */, - 416B7E8725EE494200B895BB /* FUMakeupDefine.h */, + E3A07CBD28893D4300E6F7E5 /* FUHomepageViewController.h */, + E3A07CBE28893D4300E6F7E5 /* FUHomepageViewController.m */, + E3406991288A76FE00373612 /* FUNavigationController.h */, + E3406992288A76FE00373612 /* FUNavigationController.m */, ); - path = Makeup; + path = ViewController; sourceTree = ""; }; - E37CBD9B22017618000C9C42 /* VC */ = { + E3A07CC628893E2D00E6F7E5 /* Render */ = { isa = PBXGroup; children = ( - E367712E273E45850060E564 /* FUMakeupViewController.h */, - E367712F273E45850060E564 /* FUMakeupViewController.m */, - E3618FF2285867A000E7D8D2 /* FUMakeupRenderMediaViewController.h */, - E3618FF3285867A000E7D8D2 /* FUMakeupRenderMediaViewController.m */, + E340698D288A72EE00373612 /* ViewController */, + E3406A25288AA9F500373612 /* ViewModel */, + E3406A29288AAAEB00373612 /* View */, ); - path = VC; + path = Render; sourceTree = ""; }; - E37CBD9C2201763E000C9C42 /* View */ = { + E3A13D6728C879E6009402A3 /* Makeup */ = { isa = PBXGroup; children = ( - E3677131273E45E50060E564 /* FUCombinationMakeupView.h */, - E3677132273E45E50060E564 /* FUCombinationMakeupView.m */, - E30EFB88273E61C500B6AE63 /* FUCombinationMakeupCell.h */, - E30EFB89273E61C500B6AE63 /* FUCombinationMakeupCell.m */, - E3120FCD274787F3000456D9 /* FUCustomizedMakeupView.h */, - E3120FCE274787F3000456D9 /* FUCustomizedMakeupView.m */, - E3120FD027478AF7000456D9 /* FUCustomizedMakeupCell.h */, - E3120FD127478AF7000456D9 /* FUCustomizedMakeupCell.m */, + E3A13D6828C879F2009402A3 /* ViewController */, + E3A13D6928C879FF009402A3 /* ViewModel */, ); - path = View; + path = Makeup; sourceTree = ""; }; - E37CBDA82202C904000C9C42 /* Animoji */ = { + E3A13D6828C879F2009402A3 /* ViewController */ = { isa = PBXGroup; children = ( - 410F43EA25E78C5D000AFB72 /* Manager */, - E37CBDAC2202C946000C9C42 /* VC */, + E3A13D6D28C87B1E009402A3 /* FUMakeupViewController.h */, + E3A13D6E28C87B1E009402A3 /* FUMakeupViewController.m */, + E369F91D28D96A030036AC5A /* FUMakeupImageRenderViewController.h */, + E369F91E28D96A030036AC5A /* FUMakeupImageRenderViewController.m */, + E369F91A28D969EE0036AC5A /* FUMakeupVideoRenderViewController.h */, + E369F91B28D969EE0036AC5A /* FUMakeupVideoRenderViewController.m */, ); - path = Animoji; + path = ViewController; sourceTree = ""; }; - E37CBDAC2202C946000C9C42 /* VC */ = { + E3A13D6928C879FF009402A3 /* ViewModel */ = { isa = PBXGroup; children = ( - E37CBDA92202C937000C9C42 /* FUAnimojiController.h */, - E37CBDAA2202C937000C9C42 /* FUAnimojiController.m */, + E3A13D6A28C87A65009402A3 /* FUMakeupViewModel.h */, + E3A13D6B28C87A65009402A3 /* FUMakeupViewModel.m */, + E369F92028D96A510036AC5A /* FUMakeupImageRenderViewModel.h */, + E369F92128D96A510036AC5A /* FUMakeupImageRenderViewModel.m */, + E369F92328D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.h */, + E369F92428D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.m */, ); - path = VC; + path = ViewModel; sourceTree = ""; }; - E37CBDAE2202D1C5000C9C42 /* HairBeauty */ = { + E3A58BF628A2726800941101 /* ARMask */ = { isa = PBXGroup; children = ( - ACC0B5AD25F126F0002B56FC /* VC */, - ACC0B5B025F126F0002B56FC /* Manager */, - ACC0B5B325F126F0002B56FC /* View */, + E3A58BFA28A2726800941101 /* ViewController */, + E3A58BF728A2726800941101 /* ViewModel */, ); - path = HairBeauty; + path = ARMask; sourceTree = ""; }; - E37CBDB72202F1B2000C9C42 /* MusicFilter */ = { + E3A58BF728A2726800941101 /* ViewModel */ = { isa = PBXGroup; children = ( - 41DD2E6C25E7A3370030A363 /* VC */, - 41DD2E6A25E7A3320030A363 /* Manager */, + E3A58BF828A2726800941101 /* FUARMaskViewModel.h */, + E3A58BF928A2726800941101 /* FUARMaskViewModel.m */, ); - path = MusicFilter; + path = ViewModel; sourceTree = ""; }; - E37CBDBF22043F66000C9C42 /* Model */ = { + E3A58BFA28A2726800941101 /* ViewController */ = { isa = PBXGroup; children = ( - E37E54F828729BC3002952A1 /* FUHomepageModel.h */, - E37E54F928729BC3002952A1 /* FUHomepageModel.m */, + E3A58BFB28A2726800941101 /* FUARMaskViewController.h */, + E3A58BFC28A2726800941101 /* FUARMaskViewController.m */, ); - path = Model; + path = ViewController; sourceTree = ""; }; - E37E54ED287298E8002952A1 /* Homepage */ = { + E3A58C0528A2752200941101 /* ARMask */ = { isa = PBXGroup; children = ( - E37E54F0287299BC002952A1 /* ViewController */, - E37E54F1287299D0002952A1 /* ViewModel */, - E37CBDBF22043F66000C9C42 /* Model */, - 0B5A0D382021918000AAD47D /* View */, + E3A58C1428A2753F00941101 /* baozi.bundle */, + E3A58C0B28A2753800941101 /* bluebird.bundle */, + E3A58C0728A2753400941101 /* fenhudie.bundle */, + E3A58C0928A2753600941101 /* lanhudie.bundle */, + E3A58C1228A2753D00941101 /* tiger_bai.bundle */, + E3A58C1328A2753E00941101 /* tiger_huang.bundle */, + E3A58C0A28A2753700941101 /* tiger.bundle */, + E3A58C1528A2754000941101 /* xiongmao.bundle */, ); - name = Homepage; - path = ../Homepage; + path = ARMask; sourceTree = ""; }; - E37E54F0287299BC002952A1 /* ViewController */ = { + E3A58C2628A2759E00941101 /* Hilarious */ = { isa = PBXGroup; children = ( - E37E54F228729A01002952A1 /* FUHomepageViewController.h */, - E37E54F328729A01002952A1 /* FUHomepageViewController.m */, + E3A58C2C28A2759E00941101 /* ViewController */, + E3A58C2728A2759E00941101 /* ViewModel */, ); - path = ViewController; + path = Hilarious; sourceTree = ""; }; - E37E54F1287299D0002952A1 /* ViewModel */ = { + E3A58C2728A2759E00941101 /* ViewModel */ = { isa = PBXGroup; children = ( - E37E54F528729A38002952A1 /* FUHomepageViewModel.h */, - E37E54F628729A38002952A1 /* FUHomepageViewModel.m */, + E3A58C2B28A2759E00941101 /* FUHilariousViewModel.h */, + E3A58C2928A2759E00941101 /* FUHilariousViewModel.m */, ); path = ViewModel; sourceTree = ""; }; - E37ED5DC282A44FF004E6A0B /* Resources */ = { + E3A58C2C28A2759E00941101 /* ViewController */ = { isa = PBXGroup; children = ( - E37ED5DD282A44FF004E6A0B /* model */, - E37ED5E6282A44FF004E6A0B /* graphics */, + E3A58C2D28A2759E00941101 /* FUHilariousViewController.h */, + E3A58C2E28A2759E00941101 /* FUHilariousViewController.m */, ); - path = Resources; + path = ViewController; sourceTree = ""; }; - E37ED5DD282A44FF004E6A0B /* model */ = { + E3A58C3228A278CC00941101 /* Hilarious */ = { isa = PBXGroup; children = ( - E37ED5DF282A44FF004E6A0B /* ai_face_recognizer.bundle */, - E37ED5E0282A44FF004E6A0B /* ai_hand_processor.bundle */, - E37ED5E1282A44FF004E6A0B /* ai_face_processor.bundle */, - E37ED5E2282A44FF004E6A0B /* ai_bgseg_green.bundle */, - E37ED5E3282A44FF004E6A0B /* ai_face_processor_lite.bundle */, - E361CF8F283DBDAA00AC1F4C /* ai_human_processor.bundle */, - E33835052862DD770023482D /* ai_human_processor_gpu.bundle */, + E3A58C3328A278E700941101 /* big_head_facewarp1.bundle */, + E3A58C3828A278EB00941101 /* big_head_facewarp2.bundle */, + E3A58C3628A278E900941101 /* big_head_facewarp3.bundle */, + E3A58C3728A278EA00941101 /* big_head_facewarp4.bundle */, + E3A58C3428A278E800941101 /* big_head_facewarp5.bundle */, + E3A58C3528A278E900941101 /* big_head_facewarp6.bundle */, ); - path = model; + path = Hilarious; sourceTree = ""; }; - E37ED5E6282A44FF004E6A0B /* graphics */ = { + E3A58C3F28A34F2500941101 /* ExpressionRecognition */ = { isa = PBXGroup; children = ( - E37ED5E7282A44FF004E6A0B /* tongue.bundle */, - E37ED5E8282A44FF004E6A0B /* fxaa.bundle */, - E37ED5E9282A44FF004E6A0B /* face_makeup.bundle */, - E37ED5EA282A44FF004E6A0B /* controller_cpp.bundle */, - E37ED5EB282A44FF004E6A0B /* body_slim.bundle */, - E37ED5EC282A44FF004E6A0B /* fuzzytoonfilter.bundle */, - E37ED5ED282A44FF004E6A0B /* face_beautification.bundle */, + E3A58C4028A34F2500941101 /* ViewModel */, + E3A58C4328A34F2500941101 /* ViewController */, ); - path = graphics; + path = ExpressionRecognition; sourceTree = ""; }; - E37FF63122F3E5350014821C /* BodyBeauty */ = { + E3A58C4028A34F2500941101 /* ViewModel */ = { isa = PBXGroup; children = ( - 410BC79F25F2332200FDB6C0 /* Manager */, - 410BC79C25F2332200FDB6C0 /* VC */, - E37FF63622F3E5EA0014821C /* View */, - E37FF63522F3E5D30014821C /* Model */, - 410BC7B225F2361A00FDB6C0 /* FUBodyBeautyDefine.h */, + E3A58C4228A34F2500941101 /* FUExpressionRecognitionViewModel.h */, + E3A58C4128A34F2500941101 /* FUExpressionRecognitionViewModel.m */, ); - path = BodyBeauty; + path = ViewModel; sourceTree = ""; }; - E37FF63522F3E5D30014821C /* Model */ = { + E3A58C4328A34F2500941101 /* ViewController */ = { isa = PBXGroup; children = ( - E37FF63722F3E6A80014821C /* FUPositionInfo.h */, - E37FF63822F3E6A80014821C /* FUPositionInfo.m */, + E3A58C4528A34F2500941101 /* FUExpressionRecognitionViewController.h */, + E3A58C4428A34F2500941101 /* FUExpressionRecognitionViewController.m */, ); - path = Model; + path = ViewController; sourceTree = ""; }; - E37FF63622F3E5EA0014821C /* View */ = { + E3A58C4828A352CF00941101 /* ExpressionRecognition */ = { isa = PBXGroup; children = ( - E37FF63C22F3EA560014821C /* FUBodyBeautyView.h */, - E37FF63D22F3EA560014821C /* FUBodyBeautyView.m */, - E37FF63F22F404820014821C /* FUPositionCell.h */, - E37FF64022F404820014821C /* FUPositionCell.m */, + E3A58C4B28A352E000941101 /* future_warrior.bundle */, + E3A58C4D28A352E100941101 /* jet_mask.bundle */, + E3A58C4E28A352E200941101 /* luhantongkuan_ztt_fu.bundle */, + E3A58C4C28A352E100941101 /* qingqing_ztt_fu.bundle */, + E3A58C4F28A352E300941101 /* sdx2.bundle */, + E3A58C4A28A352DF00941101 /* xiaobianzi_zh_fu.bundle */, + E3A58C4928A352DE00941101 /* xiaoxueshen_ztt_fu.bundle */, ); - path = View; + path = ExpressionRecognition; sourceTree = ""; }; - E386784A28813EAF005A94A4 /* Sticker */ = { + E3A58C5728A3592A00941101 /* MusicFilter */ = { isa = PBXGroup; children = ( - E386784B28813EF5005A94A4 /* ViewModel */, - E38678522881476C005A94A4 /* ViewController */, + E3A58C5B28A3592A00941101 /* ViewController */, + E3A58C5828A3592A00941101 /* ViewModel */, ); - path = Sticker; + path = MusicFilter; sourceTree = ""; }; - E386784B28813EF5005A94A4 /* ViewModel */ = { + E3A58C5828A3592A00941101 /* ViewModel */ = { isa = PBXGroup; children = ( - 410F43C625E75863000AFB72 /* FUStickerManager.h */, - 410F43C725E75863000AFB72 /* FUStickerManager.m */, - E386784C28813F8F005A94A4 /* FUStickerViewModel.h */, - E386784D28813F8F005A94A4 /* FUStickerViewModel.m */, + E3A58C5928A3592A00941101 /* FUMusicFilterViewModel.h */, + E3A58C5A28A3592A00941101 /* FUMusicFilterViewModel.m */, ); path = ViewModel; sourceTree = ""; }; - E38678522881476C005A94A4 /* ViewController */ = { + E3A58C5B28A3592A00941101 /* ViewController */ = { isa = PBXGroup; children = ( - E3867858288147DA005A94A4 /* FUStickerViewController.h */, - E3867859288147DA005A94A4 /* FUStickerViewController.m */, - E34202E5288532090016DC9E /* FUStickerRenderMediaViewController.h */, - E34202E6288532090016DC9E /* FUStickerRenderMediaViewController.m */, + E3A58C5C28A3592A00941101 /* FUMusicFilterViewController.h */, + E3A58C5D28A3592A00941101 /* FUMusicFilterViewController.m */, ); path = ViewController; sourceTree = ""; }; - E386785C2881525E005A94A4 /* ARMask */ = { + E3A58C6028A360DE00941101 /* MusicFilter */ = { isa = PBXGroup; children = ( - E374C0022885486100931142 /* ViewController */, - E374BFFC2885485D00931142 /* ViewModel */, + E3A58C6128A360F400941101 /* douyin_01.bundle */, + E3A58C6228A360F400941101 /* douyin_02.bundle */, + E3A58C6328A360F500941101 /* douyin.mp3 */, ); - path = ARMask; + path = MusicFilter; sourceTree = ""; }; - E38A62D624A0D154006F4465 /* View */ = { + E3A58C6728A364B800941101 /* DistortingMirror */ = { isa = PBXGroup; children = ( - E38A62D724A0D181006F4465 /* FUBodyCollectionView.h */, - E38A62D824A0D181006F4465 /* FUBodyCollectionView.m */, + E3A58C6B28A364B800941101 /* ViewController */, + E3A58C6828A364B800941101 /* ViewModel */, ); - path = View; + path = DistortingMirror; sourceTree = ""; }; - E39CF9452499F6E6003A6C14 /* BodyAvtar */ = { + E3A58C6828A364B800941101 /* ViewModel */ = { isa = PBXGroup; children = ( - 41C45F5B25F71C8A006F8F4C /* Manager */, - E38A62D624A0D154006F4465 /* View */, - E39CF9462499F9E8003A6C14 /* FUBodyAvatarController.h */, - E39CF9472499F9E8003A6C14 /* FUBodyAvatarController.m */, + E3A58C6928A364B800941101 /* FUDistortingMirrorViewModel.h */, + E3A58C6A28A364B800941101 /* FUDistortingMirrorViewModel.m */, ); - path = BodyAvtar; + path = ViewModel; sourceTree = ""; }; - E39CF949249A0307003A6C14 /* 女模0610 */ = { + E3A58C6B28A364B800941101 /* ViewController */ = { isa = PBXGroup; children = ( - E39CF991249A1DB4003A6C14 /* avatar_nv_image.png */, - E39CF95C249A0307003A6C14 /* eyelash_01.bundle */, - E39CF950249A0307003A6C14 /* Eyelash_1@3x.png */, - E39CF94D249A0307003A6C14 /* Eyeliner_1.bundle */, - E39CF959249A0307003A6C14 /* Eyeliner_1@3x.png */, - E39CF952249A0307003A6C14 /* Eyeshadow_4.bundle */, - E39CF956249A0307003A6C14 /* Eyeshadow_4@3x.png */, - E39CF94E249A0307003A6C14 /* facemakeup_3.bundle */, - E39CF95A249A0307003A6C14 /* facemakeup_3@3x.png */, - E39CF94B249A0307003A6C14 /* female_hair_23.bundle */, - E39CF954249A0307003A6C14 /* headnv.bundle */, - E39CF951249A0307003A6C14 /* lipgloss_1.bundle */, - E39CF94A249A0307003A6C14 /* lipgloss_1@3x.png */, - E39CF955249A0307003A6C14 /* midBody_female.bundle */, - E39CF94F249A0307003A6C14 /* taozhuang_12.bundle */, - E39CF958249A0307003A6C14 /* taozhuang_12@3x.png */, - E39CF957249A0307003A6C14 /* toushi_5.bundle */, - E39CF953249A0307003A6C14 /* toushi_5@3x.png */, - E39CF95B249A0307003A6C14 /* xiezi_danxie.bundle */, - E39CF94C249A0307003A6C14 /* xiezi_danxie@3x.png */, + E3A58C6D28A364B800941101 /* FUDistortingMirrorViewController.h */, + E3A58C6C28A364B800941101 /* FUDistortingMirrorViewController.m */, ); - path = "女模0610"; + path = ViewController; sourceTree = ""; }; - E39CF95D249A030A003A6C14 /* 男模0610 */ = { + E3A58C7028A37D2A00941101 /* DistortingMirror */ = { isa = PBXGroup; children = ( - E39CF993249A1DBD003A6C14 /* avatar_nan_image.png */, - E39CF964249A030A003A6C14 /* headnan.bundle */, - E39CF962249A030A003A6C14 /* kuzi_changku_5.bundle */, - E39CF967249A030A003A6C14 /* kuzi_changku_5@3x.png */, - E39CF95E249A030A003A6C14 /* male_hair_5.bundle */, - E39CF96A249A030A003A6C14 /* midBody_male.bundle */, - E39CF961249A030A003A6C14 /* peishi_erding_2.bundle */, - E39CF966249A030A003A6C14 /* peishi_erding_2@3x.png */, - E39CF965249A030A003A6C14 /* toushi_7.bundle */, - E39CF960249A030A003A6C14 /* toushi_7@3x.png */, - E39CF968249A030A003A6C14 /* waitao_3.bundle */, - E39CF963249A030A003A6C14 /* waitao_3@3x.png */, - E39CF95F249A030A003A6C14 /* xiezi_tuoxie_2.bundle */, - E39CF969249A030A003A6C14 /* xiezi_tuoxie_2@3x.png */, + E3A58C7228A37D4700941101 /* facewarp2.bundle */, + E3A58C7328A37D4800941101 /* facewarp3.bundle */, + E3A58C7428A37D4900941101 /* facewarp4.bundle */, + E3A58C7528A37D4A00941101 /* facewarp5.bundle */, + E3A58C7128A37D4600941101 /* facewarp6.bundle */, ); - path = "男模0610"; + path = DistortingMirror; sourceTree = ""; }; - E39CF995249A3849003A6C14 /* 大头哈哈 */ = { + E3A58C7B28A37E3E00941101 /* BodyBeauty */ = { isa = PBXGroup; children = ( - E39CF999249A39F4003A6C14 /* big_head_facewarp2.bundle */, - E39CF998249A39F3003A6C14 /* big_head_facewarp4.bundle */, - E39CF996249A39F0003A6C14 /* big_head_facewarp5.bundle */, - E39CF997249A39F1003A6C14 /* big_head_facewarp6.bundle */, - E3EFB834249B0CED00E2903E /* big_head_facewarp1.bundle */, - E3EFB835249B0CEE00E2903E /* big_head_facewarp3.bundle */, + E3A58C8028A37E3E00941101 /* ViewController */, + E3A58C7D28A37E3E00941101 /* ViewModel */, + E3A58C8528A37E3E00941101 /* Model */, + E3A58C8828A37E3E00941101 /* View */, ); - path = "大头哈哈"; + path = BodyBeauty; sourceTree = ""; }; - E39E1B1E222D0FB9008F76A4 /* Model */ = { + E3A58C7D28A37E3E00941101 /* ViewModel */ = { isa = PBXGroup; children = ( - E3BE2B79274B6389001679AD /* FUMakeupModel.h */, - E3BE2B7A274B6389001679AD /* FUMakeupModel.m */, - E3677125273D13420060E564 /* FUCombinationMakeupModel.h */, - E3677126273D13420060E564 /* FUCombinationMakeupModel.m */, - E3677128273E05B50060E564 /* FUSingleMakeupModel.h */, - E3677129273E05B50060E564 /* FUSingleMakeupModel.m */, + E3A58C9928A3838600941101 /* FUBodyBeautyViewModel.h */, + E3A58C9A28A3838600941101 /* FUBodyBeautyViewModel.m */, ); - path = Model; + path = ViewModel; sourceTree = ""; }; - E3B0CB922232433D00900760 /* 美妆 */ = { + E3A58C8028A37E3E00941101 /* ViewController */ = { isa = PBXGroup; children = ( - E31D91422429BE3D0054AFFA /* 日常妆 */, - E31D91412429B4490054AFFA /* 子妆容 */, - E3CB950023CC6E9D000D1695 /* 主题妆 */, - E3A74CE5224B24AA0058E1EE /* light_makeup.bundle */, + E3A58CA528A38C3700941101 /* FUBodyBeautyViewController.h */, + E3A58CA628A38C3700941101 /* FUBodyBeautyViewController.m */, ); - path = "美妆"; + path = ViewController; sourceTree = ""; }; - E3B3D7692761D38500FF0FAC /* ViewController */ = { + E3A58C8528A37E3E00941101 /* Model */ = { isa = PBXGroup; children = ( - 41391C3225E8D071005451E5 /* FUBaseViewController.h */, - 41391C3125E8D071005451E5 /* FUBaseViewController.m */, - 0B5B9F3820E9C17F00FF7789 /* FUSelectedImageController.h */, - 0B5B9F3920E9C17F00FF7789 /* FUSelectedImageController.m */, - E3B51FF1275F43490098314E /* FURenderMediaViewController.h */, - E3B51FF2275F43490098314E /* FURenderMediaViewController.m */, + E3A58C9628A380C000941101 /* FUBodyBeautyModel.h */, + E3A58C9728A380C000941101 /* FUBodyBeautyModel.m */, ); - path = ViewController; + path = Model; sourceTree = ""; }; - E3B3D76A2761D3A900FF0FAC /* Manager */ = { + E3A58C8828A37E3E00941101 /* View */ = { isa = PBXGroup; children = ( - 41391C2725E8D067005451E5 /* FUBaseViewControllerManager.h */, - 41391C2A25E8D067005451E5 /* FUBaseViewControllerManager.m */, - 41391C2925E8D067005451E5 /* FUMetaManager.h */, - 41391C2825E8D067005451E5 /* FUMetaManager.m */, + E3A58C9F28A38B9F00941101 /* FUBodyBeautyCell.h */, + E3A58CA028A38B9F00941101 /* FUBodyBeautyCell.m */, ); - path = Manager; + path = View; sourceTree = ""; }; - E3B51FF0275F358E0098314E /* Render */ = { + E3A58C9328A37FFC00941101 /* BodyBeauty */ = { isa = PBXGroup; children = ( - E3B3D7692761D38500FF0FAC /* ViewController */, - E3B3D76A2761D3A900FF0FAC /* Manager */, + E3A58C9428A3801700941101 /* body_beauty.json */, ); - path = Render; + path = BodyBeauty; sourceTree = ""; }; - E3CB950023CC6E9D000D1695 /* 主题妆 */ = { + E3A58DED28A66F5A00941101 /* Products */ = { isa = PBXGroup; children = ( - E3CB950223CC6EBC000D1695 /* chaomo.bundle */, - E346BFDD2704191F0090F3B3 /* diadiatu.bundle */, - E346BFDC2704191F0090F3B3 /* dongling.bundle */, - E346BFDE2704191F0090F3B3 /* guofeng.bundle */, - E346BFDF2704191F0090F3B3 /* hunxie.bundle */, - E3CB951423CC6EBD000D1695 /* chuju.bundle */, - E3CB951323CC6EBD000D1695 /* chuqiu.bundle */, - E3CB951523CC6EBE000D1695 /* gangfeng.bundle */, - E3CB951A23CC6EBE000D1695 /* hongfeng.bundle */, - E3CB950123CC6EBC000D1695 /* jianling.bundle */, - E3CB950423CC6EBD000D1695 /* json */, - E3CB950323CC6EBC000D1695 /* nuandong.bundle */, - E3CB951923CC6EBE000D1695 /* qianzhihe.bundle */, - E3CB951623CC6EBE000D1695 /* renyu.bundle */, - E3CB951B23CC6EBF000D1695 /* Rose.bundle */, - E3CB951823CC6EBE000D1695 /* shaonv.bundle */, - E3CB951223CC6EBD000D1695 /* yanshimao.bundle */, - E3CB951723CC6EBE000D1695 /* ziyun.bundle */, + E3A58DF128A66F5A00941101 /* FUCommonUIComponent.framework */, ); - path = "主题妆"; + name = Products; sourceTree = ""; }; - E3CB950423CC6EBD000D1695 /* json */ = { + E3AD21EA28D9E14A004D3F80 /* Products */ = { isa = PBXGroup; children = ( - E31D91272428D97D0054AFFA /* xiezhuan.json */, - E3CB950523CC6EBD000D1695 /* chuju.json */, - E346BFE6270419370090F3B3 /* diadiatu.json */, - E346BFE7270419370090F3B3 /* dongling.json */, - E346BFE4270419370090F3B3 /* guofeng.json */, - E346BFE5270419370090F3B3 /* hunxie.json */, - E3CB950623CC6EBD000D1695 /* Rose.json */, - E3CB950723CC6EBD000D1695 /* nuandong.json */, - E3CB950823CC6EBD000D1695 /* qianzhihe.json */, - E3CB950923CC6EBD000D1695 /* renyu.json */, - E3CB950A23CC6EBD000D1695 /* yanshimao.json */, - E3CB950B23CC6EBD000D1695 /* gangfeng.json */, - E3CB950C23CC6EBD000D1695 /* chuqiu.json */, - E3CB950D23CC6EBD000D1695 /* shaonv.json */, - E3CB950E23CC6EBD000D1695 /* ziyun.json */, - E3CB950F23CC6EBD000D1695 /* jianling.json */, - E3CB951023CC6EBD000D1695 /* hongfeng.json */, - E3CB951123CC6EBD000D1695 /* chaomo.json */, + E3AD21EE28D9E14A004D3F80 /* FUVideoComponent.framework */, ); - path = json; + name = Products; sourceTree = ""; }; - E3D577E422B33DEA00D08E5D /* 腮红 */ = { + E3CD599728977A7D0088ED12 /* GreenScreen */ = { isa = PBXGroup; children = ( - E39B803F242A192100E837E0 /* mu_blush_01.png */, - E39B8043242A194200E837E0 /* mu_blush_20.png */, - E39B8041242A192A00E837E0 /* mu_blush_23.png */, - E39B8045242A194700E837E0 /* mu_blush_22.png */, - E38A67D423CF1E9D00AD9DD0 /* mu_style_blush_01.bundle */, - E38A67D223CF1E9D00AD9DD0 /* mu_style_blush_02.bundle */, - E38A67D523CF1E9D00AD9DD0 /* mu_style_blush_03.bundle */, - E38A67D323CF1E9D00AD9DD0 /* mu_style_blush_04.bundle */, - E38A67D623CF1E9D00AD9DD0 /* mu_style_blush_05.bundle */, + E3CD599E28977A870088ED12 /* ViewController */, + E3CD599F28977A980088ED12 /* ViewModel */, ); - path = "腮红"; + path = GreenScreen; sourceTree = ""; }; - E3D577E922B33DEA00D08E5D /* 粉底 */ = { + E3CD599E28977A870088ED12 /* ViewController */ = { isa = PBXGroup; children = ( - E38A67DC23CF1EB800AD9DD0 /* mu_style_foundation_01.bundle */, + E3CD59A128977B2B0088ED12 /* FUGreenScreenViewController.h */, + E3CD59A228977B2B0088ED12 /* FUGreenScreenViewController.m */, + E3A58DDF28A6484B00941101 /* FUGreenScreenImageRenderViewController.h */, + E3A58DE028A6484B00941101 /* FUGreenScreenImageRenderViewController.m */, + E3447D6A28AA2028008E164C /* FUGreenScreenVideoRenderViewController.h */, + E3447D6B28AA2028008E164C /* FUGreenScreenVideoRenderViewController.m */, ); - path = "粉底"; + path = ViewController; sourceTree = ""; }; - E3D577EB22B33DEA00D08E5D /* 美瞳 */ = { + E3CD599F28977A980088ED12 /* ViewModel */ = { isa = PBXGroup; children = ( - 4124C3E0260A1F2D0090AF9E /* mu_style_eyepupil_01.bundle */, - 4124C3DD260A1F2D0090AF9E /* mu_style_eyepupil_03.bundle */, - 4124C3DF260A1F2D0090AF9E /* mu_style_eyepupil_04.bundle */, - 4124C3E1260A1F2D0090AF9E /* mu_style_eyepupil_05.bundle */, - 4124C3E2260A1F2D0090AF9E /* mu_style_eyepupil_06.bundle */, - 4124C3DC260A1F2C0090AF9E /* mu_style_eyepupil_07.bundle */, - 4124C3DE260A1F2D0090AF9E /* mu_style_eyepupil_08.bundle */, - 4124C3DB260A1F2C0090AF9E /* mu_style_eyepupil_09.bundle */, + E3CD59A428977B460088ED12 /* FUGreenScreenViewModel.h */, + E3CD59A528977B460088ED12 /* FUGreenScreenViewModel.m */, + E3A58DE928A653A300941101 /* FUGreenScreenImageRenderViewModel.h */, + E3A58DEA28A653A300941101 /* FUGreenScreenImageRenderViewModel.m */, + E3447D6D28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.h */, + E3447D6E28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.m */, ); - path = "美瞳"; + path = ViewModel; sourceTree = ""; }; - E3D577ED22B33DEA00D08E5D /* 睫毛 */ = { + E3CD59A7289780C90088ED12 /* ViewModel */ = { isa = PBXGroup; children = ( - E38A67E523CF1EE300AD9DD0 /* mu_style_eyelash_01.bundle */, - E38A67E323CF1EE300AD9DD0 /* mu_style_eyelash_02.bundle */, - E38A67E423CF1EE300AD9DD0 /* mu_style_eyelash_03.bundle */, - E38A67E623CF1EE300AD9DD0 /* mu_style_eyelash_04.bundle */, - E38A67E723CF1EE300AD9DD0 /* mu_style_eyelash_05.bundle */, - E38A67E223CF1EE200AD9DD0 /* mu_style_eyelash_06.bundle */, + E3CD59A9289780C90088ED12 /* FUBeautyViewModel.h */, + E3CD59A8289780C90088ED12 /* FUBeautyViewModel.m */, + E3A58CAB28A38CCA00941101 /* FUBeautyImageRenderViewModel.h */, + E3A58CAC28A38CCA00941101 /* FUBeautyImageRenderViewModel.m */, + E3447D6728A9FDE7008E164C /* FUBeautyVideoRenderViewModel.h */, + E3447D6828A9FDE7008E164C /* FUBeautyVideoRenderViewModel.m */, ); - path = "睫毛"; + path = ViewModel; sourceTree = ""; }; - E3D577F422B33DEA00D08E5D /* 高光 */ = { + E3CD59C02897AD4B0088ED12 /* GreenScreen */ = { isa = PBXGroup; children = ( - E38A67DE23CF1ECA00AD9DD0 /* mu_style_highlight_01.bundle */, - E38A67DF23CF1ECB00AD9DD0 /* mu_style_highlight_02.bundle */, + E3CD5A0228991D120088ED12 /* green_screen_740.bundle */, ); - path = "高光"; + path = GreenScreen; sourceTree = ""; }; - E3D577F722B33DEA00D08E5D /* 眼线 */ = { + E3DC94AE2890E3630016C9B1 /* Resources */ = { isa = PBXGroup; children = ( - E38A67F423CF1F3D00AD9DD0 /* mu_style_eyeliner_01.bundle */, - E38A67F623CF1F3D00AD9DD0 /* mu_style_eyeliner_02.bundle */, - E38A67F323CF1F3D00AD9DD0 /* mu_style_eyeliner_03.bundle */, - E38A67F523CF1F3D00AD9DD0 /* mu_style_eyeliner_04.bundle */, - E38A67F823CF1F3E00AD9DD0 /* mu_style_eyeliner_05.bundle */, - E38A67F223CF1F3D00AD9DD0 /* mu_style_eyeliner_06.bundle */, - E38A67F723CF1F3D00AD9DD0 /* mu_style_eyeliner_07.bundle */, + E3DC94AF2890E3630016C9B1 /* model */, + E3DC94B72890E3630016C9B1 /* graphics */, ); - path = "眼线"; + path = Resources; sourceTree = ""; }; - E3D577FE22B33DEA00D08E5D /* 眼影 */ = { + E3DC94AF2890E3630016C9B1 /* model */ = { isa = PBXGroup; children = ( - E39B804F242A19AD00E837E0 /* mu_eyeshadow_01.png */, - E39B8053242A19B900E837E0 /* mu_eyeshadow_18.png */, - E39B8051242A19B900E837E0 /* mu_eyeshadow_19.png */, - E39B8054242A19B900E837E0 /* mu_eyeshadow_20.png */, - E39B8052242A19B900E837E0 /* mu_eyeshadow_21.png */, - E38A680123CF1F7700AD9DD0 /* mu_style_eyeshadow_01.bundle */, - E38A680223CF1F7700AD9DD0 /* mu_style_eyeshadow_02.bundle */, - E38A680623CF1F7800AD9DD0 /* mu_style_eyeshadow_03.bundle */, - E38A680523CF1F7800AD9DD0 /* mu_style_eyeshadow_04.bundle */, - E38A680423CF1F7800AD9DD0 /* mu_style_eyeshadow_05.bundle */, - E38A680323CF1F7800AD9DD0 /* mu_style_eyeshadow_06.bundle */, - E38A680723CF1F7800AD9DD0 /* mu_style_eyeshadow_07.bundle */, - E38A680023CF1F7700AD9DD0 /* mu_style_eyeshadow_08.bundle */, + E3DC94B02890E3630016C9B1 /* ai_face_recognizer.bundle */, + E3DC94B12890E3630016C9B1 /* ai_hand_processor.bundle */, + E3DC94B22890E3630016C9B1 /* ai_face_processor.bundle */, + E3DC94B32890E3630016C9B1 /* ai_bgseg_green.bundle */, + E3DC94B42890E3630016C9B1 /* ai_face_processor_lite.bundle */, + E3DC94B52890E3630016C9B1 /* ai_human_processor.bundle */, + E3DC94B62890E3630016C9B1 /* ai_human_processor_gpu.bundle */, ); - path = "眼影"; + path = model; sourceTree = ""; }; - E3D5781222B33DEA00D08E5D /* 阴影 */ = { + E3DC94B72890E3630016C9B1 /* graphics */ = { isa = PBXGroup; children = ( - E38A681023CF1F9200AD9DD0 /* mu_style_contour_01.bundle */, + E3DC94B82890E3630016C9B1 /* tongue.bundle */, + E3DC94B92890E3630016C9B1 /* fxaa.bundle */, + E3DC94BA2890E3630016C9B1 /* face_makeup.bundle */, + E3DC94BB2890E3630016C9B1 /* controller_cpp.bundle */, + E3DC94BC2890E3630016C9B1 /* body_slim.bundle */, + E3DC94BD2890E3630016C9B1 /* fuzzytoonfilter.bundle */, + E3DC94BE2890E3630016C9B1 /* face_beautification.bundle */, ); - path = "阴影"; + path = graphics; sourceTree = ""; }; - E3D5785222B734AC00D08E5D /* 眉毛 */ = { + E3ED026828A126A1000F28CD /* ViewModel */ = { isa = PBXGroup; children = ( - E34202C22885033A0016DC9E /* mu_style_eyebrow_01.bundle */, - E34202C12885033A0016DC9E /* mu_style_eyebrow_02.bundle */, - E34202C42885033A0016DC9E /* mu_style_eyebrow_03.bundle */, - E34202C32885033A0016DC9E /* mu_style_eyebrow_04.bundle */, - E39B8049242A197500E837E0 /* mu_eyebrow_16.png */, - E39B8047242A197500E837E0 /* mu_eyebrow_17.png */, - E39B8048242A197500E837E0 /* mu_eyebrow_18.png */, - E39B804A242A197500E837E0 /* mu_eyebrow_19.png */, - E39B803D242A18D900E837E0 /* mu_eyebrow_01.png */, + E3ED026A28A126CC000F28CD /* FUMediaPickerViewModel.h */, + E3ED026B28A126CC000F28CD /* FUMediaPickerViewModel.m */, ); - path = "眉毛"; + path = ViewModel; sourceTree = ""; }; - E3F0EF1F22C1FB880018FF13 /* Segmentation */ = { + E3ED026928A126A6000F28CD /* ViewController */ = { isa = PBXGroup; children = ( - 412F774D2609C59C003AF848 /* Model */, - 41DD2E7E25E7A5BE0030A363 /* VC */, - 41DD2E7D25E7A5B90030A363 /* Manager */, + E3ED026528A11790000F28CD /* FUMediaPickerViewController.h */, + E3ED026628A11790000F28CD /* FUMediaPickerViewController.m */, ); - path = Segmentation; + path = ViewController; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 0B5A0CB42021913900AAD47D /* FULiveDemo */ = { + E3A07C8E288939BD00E6F7E5 /* FULiveDemo */ = { isa = PBXNativeTarget; - buildConfigurationList = 0B5A0CE12021913900AAD47D /* Build configuration list for PBXNativeTarget "FULiveDemo" */; + buildConfigurationList = E3A07CA8288939BE00E6F7E5 /* Build configuration list for PBXNativeTarget "FULiveDemo" */; buildPhases = ( - FA957C64E2549EB6F75CB07D /* [CP] Check Pods Manifest.lock */, - CD0B4B85211613BB0019F9FA /* unzip */, - 0B5A0CB12021913900AAD47D /* Sources */, - 0B5A0CB22021913900AAD47D /* Frameworks */, - CD11A34D20CE7C580005C58C /* ShellScript */, - 0B5A0CB32021913900AAD47D /* Resources */, - 414DE96726959A3F00E4CB7E /* Embed Frameworks */, - 66BB7B4A1EA8A5FFD00D0650 /* [CP] Embed Pods Frameworks */, - 410F67E8268DB52B00CC1613 /* ShellScript */, + DFD830EC32E378BC96BB5773 /* [CP] Check Pods Manifest.lock */, + E3A07C8B288939BD00E6F7E5 /* Sources */, + E3A07C8C288939BD00E6F7E5 /* Frameworks */, + E3A07C8D288939BD00E6F7E5 /* Resources */, + 29D118CF6105979737EDCEDC /* [CP] Embed Pods Frameworks */, + E34069FE288A9AB300373612 /* Embed Frameworks */, + E369F92628D971970036AC5A /* Copy dSYM Shell */, ); buildRules = ( ); @@ -2718,28 +2047,26 @@ ); name = FULiveDemo; productName = FULiveDemo; - productReference = 0B5A0CB52021913900AAD47D /* FULiveDemo.app */; + productReference = E3A07C8F288939BD00E6F7E5 /* FULiveDemo.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 0B5A0CAD2021913900AAD47D /* Project object */ = { + E3A07C87288939BD00E6F7E5 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = 1; CLASSPREFIX = FU; - LastSwiftUpdateCheck = 1010; - LastUpgradeCheck = 0920; - ORGANIZATIONNAME = FaceUnity; + LastUpgradeCheck = 1330; TargetAttributes = { - 0B5A0CB42021913900AAD47D = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; + E3A07C8E288939BD00E6F7E5 = { + CreatedOnToolsVersion = 13.3.1; }; }; }; - buildConfigurationList = 0B5A0CB02021913900AAD47D /* Build configuration list for PBXProject "FULiveDemo" */; - compatibilityVersion = "Xcode 8.0"; + buildConfigurationList = E3A07C8A288939BD00E6F7E5 /* Build configuration list for PBXProject "FULiveDemo" */; + compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -2747,662 +2074,432 @@ Base, "zh-Hans", ); - mainGroup = 0B5A0CAC2021913900AAD47D; - productRefGroup = 0B5A0CB62021913900AAD47D /* Products */; + mainGroup = E3A07C86288939BD00E6F7E5; + productRefGroup = E3A07C90288939BD00E6F7E5 /* Products */; projectDirPath = ""; projectReferences = ( { - ProductGroup = E33C978F288E4C1400374C69 /* Products */; - ProjectRef = E33C978E288E4C1400374C69 /* FUCommonUIComponent.xcodeproj */; + ProductGroup = E369F8C428D849810036AC5A /* Products */; + ProjectRef = E369F8C328D849810036AC5A /* FUBeautyComponent.xcodeproj */; + }, + { + ProductGroup = E3A58DED28A66F5A00941101 /* Products */; + ProjectRef = E3A58DEC28A66F5A00941101 /* FUCommonUIComponent.xcodeproj */; }, { - ProductGroup = E3447F0328C61B7C008E164C /* Products */; - ProjectRef = E3447F0228C61B7C008E164C /* FUVideoComponent.xcodeproj */; + ProductGroup = E369F8B828D849790036AC5A /* Products */; + ProjectRef = E369F8B728D849790036AC5A /* FUGreenScreenComponent.xcodeproj */; + }, + { + ProductGroup = E369F8BE28D8497E0036AC5A /* Products */; + ProjectRef = E369F8BD28D8497E0036AC5A /* FUMakeupComponent.xcodeproj */; + }, + { + ProductGroup = E3AD21EA28D9E14A004D3F80 /* Products */; + ProjectRef = E3AD21E928D9E14A004D3F80 /* FUVideoComponent.xcodeproj */; }, ); projectRoot = ""; targets = ( - 0B5A0CB42021913900AAD47D /* FULiveDemo */, + E3A07C8E288939BD00E6F7E5 /* FULiveDemo */, ); }; /* End PBXProject section */ /* Begin PBXReferenceProxy section */ - E33C9793288E4C1400374C69 /* FUCommonUIComponent.framework */ = { + E369F8BC28D849790036AC5A /* FUGreenScreenComponent.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = FUGreenScreenComponent.framework; + remoteRef = E369F8BB28D849790036AC5A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + E369F8C228D8497E0036AC5A /* FUMakeupComponent.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = FUMakeupComponent.framework; + remoteRef = E369F8C128D8497E0036AC5A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + E369F8C828D849810036AC5A /* FUBeautyComponent.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = FUBeautyComponent.framework; + remoteRef = E369F8C728D849810036AC5A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + E3A58DF128A66F5A00941101 /* FUCommonUIComponent.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; path = FUCommonUIComponent.framework; - remoteRef = E33C9792288E4C1400374C69 /* PBXContainerItemProxy */; + remoteRef = E3A58DF028A66F5A00941101 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - E3447F0728C61B7C008E164C /* FUVideoComponent.framework */ = { + E3AD21EE28D9E14A004D3F80 /* FUVideoComponent.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; path = FUVideoComponent.framework; - remoteRef = E3447F0628C61B7C008E164C /* PBXContainerItemProxy */; + remoteRef = E3AD21ED28D9E14A004D3F80 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ - 0B5A0CB32021913900AAD47D /* Resources */ = { + E3A07C8D288939BD00E6F7E5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - E39CF96B249A030A003A6C14 /* lipgloss_1@3x.png in Resources */, - E38A680E23CF1F7800AD9DD0 /* mu_style_eyeshadow_03.bundle in Resources */, - E361CF90283DBDAA00AC1F4C /* ai_human_processor.bundle in Resources */, - 0BE100FD2150F9ED00098F1B /* douyin_01.bundle in Resources */, - E30A2C1A2685F127000FFE0E /* wuxia_Animoji.png in Resources */, - E3226490225F0CCB003A6182 /* baozi.bundle in Resources */, - CDA6086A216F436F00A3DA93 /* hetun_Animoji.bundle in Resources */, - E38A67E923CF1EE300AD9DD0 /* mu_style_eyelash_02.bundle in Resources */, - 0BE100FF2150F9ED00098F1B /* douyin_02.bundle in Resources */, - E34202C52885033B0016DC9E /* mu_style_eyebrow_02.bundle in Resources */, - E37ED5FD282A4500004E6A0B /* face_beautification.bundle in Resources */, - E346BFF627044DF20090F3B3 /* mu_style_lip_03.bundle in Resources */, - 0B5A0D7C2021919700AAD47D /* dataSource.plist in Resources */, - E34202C82885033B0016DC9E /* mu_style_eyebrow_03.bundle in Resources */, - E39CF987249A030A003A6C14 /* kuzi_changku_5@3x.png in Resources */, - E39CF981249A030A003A6C14 /* peishi_erding_2.bundle in Resources */, - E3DF96BC2369403D00DB49B2 /* InfoPlist.strings in Resources */, - 4180A53526117F55003DC778 /* xlong_zh_fu.png in Resources */, - E34202C72885033B0016DC9E /* mu_style_eyebrow_04.bundle in Resources */, - E38A67D723CF1E9E00AD9DD0 /* mu_style_blush_02.bundle in Resources */, - E31D91512429BE3D0054AFFA /* tianmei.bundle in Resources */, - E39CF99C249A39F4003A6C14 /* big_head_facewarp4.bundle in Resources */, - E39B8042242A192B00E837E0 /* mu_blush_23.png in Resources */, - E37E55092872BD11002952A1 /* homepage_data_source.json in Resources */, - 0BE1011F2150F9ED00098F1B /* facewarp2.bundle in Resources */, - E38A67F923CF1F3E00AD9DD0 /* mu_style_eyeliner_06.bundle in Resources */, - 4180A54726117F55003DC778 /* newy1.bundle in Resources */, - E322646F225F097F003A6182 /* qingqing_ztt_fu.png in Resources */, - E3CB951E23CC6EBF000D1695 /* nuandong.bundle in Resources */, - E39CF97F249A030A003A6C14 /* xiezi_tuoxie_2.bundle in Resources */, - E379ED71223644B20080BD04 /* makeup_whole.json in Resources */, - E38A67EA23CF1EE300AD9DD0 /* mu_style_eyelash_03.bundle in Resources */, - E38A67DA23CF1E9E00AD9DD0 /* mu_style_blush_03.bundle in Resources */, - E37ED5FA282A4500004E6A0B /* controller_cpp.bundle in Resources */, - E3CB953023CC6EBF000D1695 /* renyu.bundle in Resources */, - E31D91522429BE3D0054AFFA /* wumei.bundle in Resources */, - E39CF98E249A1187003A6C14 /* default_bg.bundle in Resources */, - E39CF975249A030A003A6C14 /* headnv.bundle in Resources */, - E3CE4CB126CBBDD300ED0B4E /* docs in Resources */, - E346BFE12704191F0090F3B3 /* diadiatu.bundle in Resources */, - E39B803E242A18D900E837E0 /* mu_eyebrow_01.png in Resources */, - E38A67FA23CF1F3E00AD9DD0 /* mu_style_eyeliner_03.bundle in Resources */, - E364E7D1268DA8EF008B6697 /* kaola_Animoji.png in Resources */, - E38A681123CF1F9200AD9DD0 /* mu_style_contour_01.bundle in Resources */, - 0BE101262150F9ED00098F1B /* facewarp5.png in Resources */, - E3731237287BC02C004A465A /* boyfriend1_740.bundle in Resources */, - E3706F4D216B4DDC004BFC7F /* FUPosterListViewController.xib in Resources */, - E37ED5F1282A4500004E6A0B /* ai_hand_processor.bundle in Resources */, - E38A67D923CF1E9E00AD9DD0 /* mu_style_blush_01.bundle in Resources */, - E37B0B4E218147BA00066133 /* ctrl_rain.bundle in Resources */, - ACC0B5BA25F126F0002B56FC /* FUHairView.xib in Resources */, - E39B8055242A19B900E837E0 /* mu_eyeshadow_19.png in Resources */, - E3226492225F0CCB003A6182 /* tiger_huang.png in Resources */, - E322646B225F097F003A6182 /* qingqing_ztt_fu.bundle in Resources */, - E346BFF927044DF20090F3B3 /* mu_style_lip_02.bundle in Resources */, - 41276657261DA2620001BDEF /* 流星_00048.png in Resources */, - 4127664A261DA2620001BDEF /* 流星_00036.png in Resources */, - E39B8056242A19B900E837E0 /* mu_eyeshadow_21.png in Resources */, - E3226452225F083F003A6182 /* ice_lm_fu.bundle in Resources */, - 41276656261DA2620001BDEF /* 流星_00051.png in Resources */, - E3226451225F083F003A6182 /* xiandai_ztt_fu.bundle in Resources */, - E342A82A23D0073900DC0464 /* chuqiu.bundle in Resources */, - E3CB951D23CC6EBF000D1695 /* chaomo.bundle in Resources */, - E39CF994249A1DBD003A6C14 /* avatar_nan_image.png in Resources */, - 41276650261DA2620001BDEF /* 流星_00047.png in Resources */, - CD4D6EA621796EA400E02F39 /* change_face.bundle in Resources */, - E39CF97C249A030A003A6C14 /* xiezi_danxie.bundle in Resources */, - E39B8046242A194700E837E0 /* mu_blush_22.png in Resources */, - E3CB952B23CC6EBF000D1695 /* chaomo.json in Resources */, - E346BFF827044DF20090F3B3 /* mu_style_lip_05.bundle in Resources */, - E37ED5F0282A4500004E6A0B /* ai_face_recognizer.bundle in Resources */, - E38A67FB23CF1F3E00AD9DD0 /* mu_style_eyeliner_01.bundle in Resources */, - E37B0B5621814AFA00066133 /* ctrl_rain.png in Resources */, - E322646A225F097F003A6182 /* xiaoxueshen_ztt_fu.png in Resources */, - E34202C62885033B0016DC9E /* mu_style_eyebrow_01.bundle in Resources */, - E322646C225F097F003A6182 /* sdx2.bundle in Resources */, - E38A680923CF1F7800AD9DD0 /* mu_style_eyeshadow_01.bundle in Resources */, - E35AE6682226709C0076C375 /* Media.xcassets in Resources */, - E39B8057242A19B900E837E0 /* mu_eyeshadow_18.png in Resources */, - E3CB952823CC6EBF000D1695 /* ziyun.json in Resources */, - E37ED5FB282A4500004E6A0B /* body_slim.bundle in Resources */, - E37743A02513663500682A2D /* springForest.mp4 in Resources */, - 4127664F261DA2620001BDEF /* 流星_00043.png in Resources */, - 0B6B00FE20F49C0F0079118B /* Localizable.strings in Resources */, - E3226499225F0CCB003A6182 /* tiger_bai.png in Resources */, - E39CF972249A030A003A6C14 /* lipgloss_1.bundle in Resources */, - E377439F2513663500682A2D /* inkPainting.mp4 in Resources */, - CDA60871216F436F00A3DA93 /* hetun_Animoji.png in Resources */, - E31D914F2429BE3D0054AFFA /* oumei.bundle in Resources */, - E3226497225F0CCB003A6182 /* tiger_bai.bundle in Resources */, - 412399992615767B00F0DFC3 /* bg_segment.bundle in Resources */, - 0BE101382150F9EE00098F1B /* ssd_thread_thumb.png in Resources */, - E38A680823CF1F7800AD9DD0 /* mu_style_eyeshadow_08.bundle in Resources */, - 0BE101332150F9EE00098F1B /* ssd_thread_cute.png in Resources */, - CDA60866216F436F00A3DA93 /* kuloutou_Animoji.png in Resources */, - E31D91502429BE3D0054AFFA /* linjia.bundle in Resources */, - E37ED5F2282A4500004E6A0B /* ai_face_processor.bundle in Resources */, - CDA60873216F436F00A3DA93 /* douniuquan_Animoji.png in Resources */, - E322648C225F0CCB003A6182 /* tiger.png in Resources */, - E322646D225F097F003A6182 /* future_warrior.bundle in Resources */, - 0B5A0CC52021913900AAD47D /* LaunchScreen.storyboard in Resources */, - E39CF99A249A39F4003A6C14 /* big_head_facewarp5.bundle in Resources */, - E39CF974249A030A003A6C14 /* toushi_5@3x.png in Resources */, - 0BE101202150F9ED00098F1B /* facewarp2.png in Resources */, - E39CF984249A030A003A6C14 /* headnan.bundle in Resources */, - E346BFDB270413170090F3B3 /* Assets.xcassets in Resources */, - E3CB952023CC6EBF000D1695 /* Rose.json in Resources */, - E3226498225F0CCB003A6182 /* fenhudie.png in Resources */, - E39CF97A249A030A003A6C14 /* Eyeliner_1@3x.png in Resources */, - E3226467225F097F003A6182 /* luhantongkuan_ztt_fu.bundle in Resources */, - 4180A53B26117F55003DC778 /* CatSparks.png in Resources */, - E3CB952723CC6EBF000D1695 /* shaonv.json in Resources */, - E3CB952123CC6EBF000D1695 /* nuandong.json in Resources */, - E39944F026C3B5BA003E4EFA /* safe_area_1.jpg in Resources */, - 4180A52F26117F55003DC778 /* sdlr.bundle in Resources */, - E3A74CE6224B24AF0058E1EE /* light_makeup.bundle in Resources */, - E3706F59216C304C004BFC7F /* FUEditImageViewController.xib in Resources */, - E39B8058242A19B900E837E0 /* mu_eyeshadow_20.png in Resources */, - E38A680C23CF1F7800AD9DD0 /* mu_style_eyeshadow_05.bundle in Resources */, - E39CF976249A030A003A6C14 /* midBody_female.bundle in Resources */, - 0BE101362150F9EE00098F1B /* ssd_thread_six.png in Resources */, - 0BE101282150F9ED00098F1B /* facewarp6.png in Resources */, - E37FF63B22F3E82F0014821C /* BodyBeautyDefault.json in Resources */, - E39CF98C249A117B003A6C14 /* controller_config.bundle in Resources */, - E322648B225F0CCB003A6182 /* tiger.bundle in Resources */, - E37B0B50218147CE00066133 /* ctrl_snow.bundle in Resources */, - 4180A53F26117F55003DC778 /* fu_zh_fenshu.bundle in Resources */, - E3C14DDC22ADFE7D004C20C4 /* lightMakeup.json in Resources */, - E33835082862DD780023482D /* ai_human_processor_gpu.bundle in Resources */, - E39CF982249A030A003A6C14 /* kuzi_changku_5.bundle in Resources */, - E322649C225F6CB7003A6182 /* jet_mask.png in Resources */, - E3731238287BC02C004A465A /* boyfriend2_740.bundle in Resources */, - E3226475225F0B8C003A6182 /* ssd_thread_korheart.bundle in Resources */, - 4124C3E7260A1F2E0090AF9E /* mu_style_eyepupil_04.bundle in Resources */, - E3226474225F0B8C003A6182 /* ssd_thread_korheart.png in Resources */, - E39CF971249A030A003A6C14 /* Eyelash_1@3x.png in Resources */, - E322648D225F0CCB003A6182 /* xiongmao.bundle in Resources */, - E3728B922303F05B00B1B9BF /* qgirl_Animoji.png in Resources */, - E3CB952F23CC6EBF000D1695 /* gangfeng.bundle in Resources */, - E39B804B242A197500E837E0 /* mu_eyebrow_17.png in Resources */, - E3226495225F0CCB003A6182 /* fenhudie.bundle in Resources */, - 4125E0512629C3EF008D31F7 /* cartoon_princess_Animoji.png in Resources */, - E38A67FF23CF1F3E00AD9DD0 /* mu_style_eyeliner_05.bundle in Resources */, - E39B8050242A19AD00E837E0 /* mu_eyeshadow_01.png in Resources */, - E39B8044242A194200E837E0 /* mu_blush_20.png in Resources */, - E39B8040242A192100E837E0 /* mu_blush_01.png in Resources */, - E37ED5F7282A4500004E6A0B /* tongue.bundle in Resources */, - E30A2C182685F127000FFE0E /* wuxia_Animoji.bundle in Resources */, - E3226489225F0CCB003A6182 /* baozi.png in Resources */, - 0BE101352150F9EE00098F1B /* ssd_thread_six.bundle in Resources */, - 4127664D261DA2620001BDEF /* 流星_00040.png in Resources */, - 0BE101272150F9ED00098F1B /* facewarp6.bundle in Resources */, - E3DD0F6F2484D7FC0064CF7E /* hair_gradient.bundle in Resources */, - E3CB952A23CC6EBF000D1695 /* hongfeng.json in Resources */, - 4180A53726117F55003DC778 /* sdlu.bundle in Resources */, - 41276649261DA2620001BDEF /* tiezhi_data.json in Resources */, - E3EFB837249B0CEE00E2903E /* big_head_facewarp3.bundle in Resources */, - E37ED5F4282A4500004E6A0B /* ai_face_processor_lite.bundle in Resources */, - 41276654261DA2620001BDEF /* 流星_00044.png in Resources */, - E3226493225F0CCB003A6182 /* lanhudie.png in Resources */, - E39CF96D249A030A003A6C14 /* xiezi_danxie@3x.png in Resources */, - 4127664E261DA2620001BDEF /* 流星_00042.png in Resources */, - 4180A52E26117F55003DC778 /* sdlr.png in Resources */, - 4124C3E9260A1F2E0090AF9E /* mu_style_eyepupil_05.bundle in Resources */, - E3FA7BAE2514985300D07E92 /* science.mp4 in Resources */, - E38D2F3924A07D760069AA0A /* anim_idle.bundle in Resources */, - E30A2C192685F127000FFE0E /* baihu_Animoji.png in Resources */, - E346BFE8270419380090F3B3 /* guofeng.json in Resources */, - 4180A53626117F55003DC778 /* xlong_zh_fu.bundle in Resources */, - 0B5A0CC02021913900AAD47D /* Main.storyboard in Resources */, - E37ED5FC282A4500004E6A0B /* fuzzytoonfilter.bundle in Resources */, - CDA6086E216F436F00A3DA93 /* kuloutou_Animoji.bundle in Resources */, - CDA60876216F436F00A3DA93 /* frog_Animoji.bundle in Resources */, - E3CB951F23CC6EBF000D1695 /* chuju.json in Resources */, - E31D91532429BE3D0054AFFA /* xinggan.bundle in Resources */, - E37B0B52218147E200066133 /* ctrl_flower.bundle in Resources */, - E39CF97D249A030A003A6C14 /* eyelash_01.bundle in Resources */, - 0BE100FC2150F9ED00098F1B /* douyin.mp3 in Resources */, - E3CB953423CC6EBF000D1695 /* hongfeng.bundle in Resources */, - E3CB953123CC6EBF000D1695 /* ziyun.bundle in Resources */, - 4180A54626117F55003DC778 /* newy1.png in Resources */, - E31D91582429BE3D0054AFFA /* linjia.json in Resources */, - E39CF96E249A030A003A6C14 /* Eyeliner_1.bundle in Resources */, - E3226491225F0CCB003A6182 /* lanhudie.bundle in Resources */, - E322648A225F0CCB003A6182 /* tiger_huang.bundle in Resources */, - E3CB953523CC6EBF000D1695 /* Rose.bundle in Resources */, - E38A67DB23CF1E9E00AD9DD0 /* mu_style_blush_05.bundle in Resources */, - E322648F225F0CCB003A6182 /* xiongmao.png in Resources */, - E3226459225F083F003A6182 /* gufeng_zh_fu.bundle in Resources */, - 4180A53C26117F55003DC778 /* CatSparks.bundle in Resources */, - E39CF96F249A030A003A6C14 /* facemakeup_3.bundle in Resources */, - CDA6086C216F436F00A3DA93 /* hashiqi_Animoji.bundle in Resources */, - E38A67FD23CF1F3E00AD9DD0 /* mu_style_eyeliner_02.bundle in Resources */, - 4124C3EA260A1F2E0090AF9E /* mu_style_eyepupil_06.bundle in Resources */, - E346BFE22704191F0090F3B3 /* guofeng.bundle in Resources */, - E37B0B5421814AF200066133 /* ctrl_flower.png in Resources */, - E38A67EB23CF1EE300AD9DD0 /* mu_style_eyelash_01.bundle in Resources */, - CDA60875216F436F00A3DA93 /* huangya_Animoji.bundle in Resources */, - E35AE65C2226709C0076C375 /* FUAPIDemoBar.xib in Resources */, - CDA60870216F436F00A3DA93 /* huangya_Animoji.png in Resources */, - 41276652261DA2620001BDEF /* 流星_00046.png in Resources */, - E39CF986249A030A003A6C14 /* peishi_erding_2@3x.png in Resources */, - CDA6086B216F436F00A3DA93 /* baimao_Animoji.png in Resources */, - CDA6086F216F436F00A3DA93 /* hashiqi_Animoji.png in Resources */, - 0BE101372150F9EE00098F1B /* ssd_thread_thumb.bundle in Resources */, - E38A680B23CF1F7800AD9DD0 /* mu_style_eyeshadow_06.bundle in Resources */, - 0BE101252150F9ED00098F1B /* facewarp5.bundle in Resources */, - E37B0B5821814AFF00066133 /* ctrl_snow.png in Resources */, - E346BFE02704191F0090F3B3 /* dongling.bundle in Resources */, - 4180A54826117F55003DC778 /* DaisyPig.png in Resources */, - E39B804E242A197500E837E0 /* mu_eyebrow_19.png in Resources */, - E39B804C242A197500E837E0 /* mu_eyebrow_18.png in Resources */, - 0BE101212150F9ED00098F1B /* facewarp3.bundle in Resources */, - E38A680A23CF1F7800AD9DD0 /* mu_style_eyeshadow_02.bundle in Resources */, - 4180A54926117F55003DC778 /* DaisyPig.bundle in Resources */, - 4124C3E3260A1F2E0090AF9E /* mu_style_eyepupil_09.bundle in Resources */, - E39CF99B249A39F4003A6C14 /* big_head_facewarp6.bundle in Resources */, - E373123A287BC033004A465A /* human_outline_740.bundle in Resources */, - E39CF979249A030A003A6C14 /* taozhuang_12@3x.png in Resources */, - E39CF989249A030A003A6C14 /* xiezi_tuoxie_2@3x.png in Resources */, - E34378A624EE3EF40040B94A /* green_screen.bundle in Resources */, - 4125E0502629C3EF008D31F7 /* cartoon_princess_Animoji.bundle in Resources */, - E3226470225F097F003A6182 /* xiaobianzi_zh_fu.png in Resources */, - E31D91552429BE3D0054AFFA /* oumei.json in Resources */, - E3226466225F097F003A6182 /* luhantongkuan_ztt_fu.png in Resources */, - 0BE101232150F9ED00098F1B /* facewarp4.bundle in Resources */, - E38A67FE23CF1F3E00AD9DD0 /* mu_style_eyeliner_07.bundle in Resources */, - E39CF992249A1DB4003A6C14 /* avatar_nv_image.png in Resources */, - E39CF97B249A030A003A6C14 /* facemakeup_3@3x.png in Resources */, - E37743A42513666400682A2D /* classroom.mp4 in Resources */, - 41276651261DA2620001BDEF /* 流星_00052.png in Resources */, - E39CF98A249A030A003A6C14 /* midBody_male.bundle in Resources */, - 4124C3E6260A1F2E0090AF9E /* mu_style_eyepupil_08.bundle in Resources */, - E39CF977249A030A003A6C14 /* Eyeshadow_4@3x.png in Resources */, - E39CF985249A030A003A6C14 /* toushi_7.bundle in Resources */, - 0BE101242150F9ED00098F1B /* facewarp4.png in Resources */, - E38A67D823CF1E9E00AD9DD0 /* mu_style_blush_04.bundle in Resources */, - 41276659261DA2620001BDEF /* 流星_00039.png in Resources */, - 4124C3E5260A1F2E0090AF9E /* mu_style_eyepupil_03.bundle in Resources */, - E3CB952323CC6EBF000D1695 /* renyu.json in Resources */, - E39CF99D249A39F4003A6C14 /* big_head_facewarp2.bundle in Resources */, - E322646E225F097F003A6182 /* future_warrior.png in Resources */, - 0BE101322150F9EE00098F1B /* ssd_thread_cute.bundle in Resources */, - E38A67EC23CF1EE300AD9DD0 /* mu_style_eyelash_04.bundle in Resources */, - 4180A52826117F55003DC778 /* redribbt.png in Resources */, - E31D91572429BE3D0054AFFA /* xinggan.json in Resources */, - E3CB952923CC6EBF000D1695 /* jianling.json in Resources */, - E346BFE32704191F0090F3B3 /* hunxie.bundle in Resources */, - CDA6086D216F436F00A3DA93 /* frog_Animoji.png in Resources */, - E3706F4F216B4E4E004BFC7F /* FUPosterCell.xib in Resources */, - E39CF988249A030A003A6C14 /* waitao_3.bundle in Resources */, - E3226468225F097F003A6182 /* sdx2.png in Resources */, - 0BE101002150F9ED00098F1B /* douyin_02.png in Resources */, - E37ED5F8282A4500004E6A0B /* fxaa.bundle in Resources */, - 4156CE0B261470CF00DD72C1 /* FUStickerCell.xib in Resources */, - E38A680D23CF1F7800AD9DD0 /* mu_style_eyeshadow_04.bundle in Resources */, - E38A67FC23CF1F3E00AD9DD0 /* mu_style_eyeliner_04.bundle in Resources */, - E364E7D0268DA8EF008B6697 /* kaola_Animoji.bundle in Resources */, - 41276655261DA2620001BDEF /* 流星_00045.png in Resources */, - 4124C3E8260A1F2E0090AF9E /* mu_style_eyepupil_01.bundle in Resources */, - E346BFEA270419380090F3B3 /* diadiatu.json in Resources */, - CDA60867216F436F00A3DA93 /* baimao_Animoji.bundle in Resources */, - E322649D225F6CB7003A6182 /* jet_mask.bundle in Resources */, - 0BE101222150F9ED00098F1B /* facewarp3.png in Resources */, - E39944EF26C3B5BA003E4EFA /* safe_area_2.jpg in Resources */, - E3CB953323CC6EBF000D1695 /* qianzhihe.bundle in Resources */, - E31D91282428D97D0054AFFA /* xiezhuan.json in Resources */, - 4127664C261DA2620001BDEF /* 流星_00041.png in Resources */, - E3CB951C23CC6EBF000D1695 /* jianling.bundle in Resources */, - 4127664B261DA2620001BDEF /* 流星_00037.png in Resources */, - E3226458225F083F003A6182 /* hez_ztt_fu.bundle in Resources */, - 4127665A261DA2620001BDEF /* 流星_00038.png in Resources */, - E3226488225F0CCB003A6182 /* bluebird.png in Resources */, - E3CB952523CC6EBF000D1695 /* gangfeng.json in Resources */, - E30A2C172685F127000FFE0E /* baihu_Animoji.bundle in Resources */, - E3728B912303F05B00B1B9BF /* qgirl_Animoji.bundle in Resources */, - E39CF983249A030A003A6C14 /* waitao_3@3x.png in Resources */, - E37ED5F9282A4500004E6A0B /* face_makeup.bundle in Resources */, - E346BFEB270419380090F3B3 /* dongling.json in Resources */, - E38A680F23CF1F7800AD9DD0 /* mu_style_eyeshadow_07.bundle in Resources */, - E31D91562429BE3D0054AFFA /* tianmei.json in Resources */, - E3CB952423CC6EBF000D1695 /* yanshimao.json in Resources */, - E3226455225F083F003A6182 /* sea_lm_fu.bundle in Resources */, - E39CF96C249A030A003A6C14 /* female_hair_23.bundle in Resources */, - E39CF970249A030A003A6C14 /* taozhuang_12.bundle in Resources */, - E38A67E823CF1EE300AD9DD0 /* mu_style_eyelash_06.bundle in Resources */, - E31D91542429BE3D0054AFFA /* wumei.json in Resources */, - CDA60872216F436F00A3DA93 /* douniuquan_Animoji.bundle in Resources */, - E346BFE9270419380090F3B3 /* hunxie.json in Resources */, - 4180A54226117F55003DC778 /* fu_zh_fenshu.png in Resources */, - E3583E8927117458008E52A7 /* landmarks.bundle in Resources */, - E38A67E023CF1ECB00AD9DD0 /* mu_style_highlight_01.bundle in Resources */, - E37ED5F3282A4500004E6A0B /* ai_bgseg_green.bundle in Resources */, - 41276658261DA2620001BDEF /* 流星_00049.png in Resources */, - E37743A22513665B00682A2D /* beach.mp4 in Resources */, - E3EFB836249B0CEE00E2903E /* big_head_facewarp1.bundle in Resources */, - E3706F54216B68B1004BFC7F /* FUSaveViewController.xib in Resources */, - E39CF973249A030A003A6C14 /* Eyeshadow_4.bundle in Resources */, - E3CB952623CC6EBF000D1695 /* chuqiu.json in Resources */, - E346BFFA27044DF20090F3B3 /* mu_style_lip_04.bundle in Resources */, - E38A67DD23CF1EB800AD9DD0 /* mu_style_foundation_01.bundle in Resources */, - E3CB952223CC6EBF000D1695 /* qianzhihe.json in Resources */, - E38A67E123CF1ECB00AD9DD0 /* mu_style_highlight_02.bundle in Resources */, - E377439C2513663500682A2D /* hotStamping.mp4 in Resources */, - E39CF978249A030A003A6C14 /* toushi_5.bundle in Resources */, - E3226469225F097F003A6182 /* xiaobianzi_zh_fu.bundle in Resources */, - 4124C3E4260A1F2E0090AF9E /* mu_style_eyepupil_07.bundle in Resources */, - E39B804D242A197500E837E0 /* mu_eyebrow_16.png in Resources */, - E322648E225F0CCB003A6182 /* bluebird.bundle in Resources */, - E3731236287BC02C004A465A /* boyfriend3_740.bundle in Resources */, - E39CF980249A030A003A6C14 /* toushi_7@3x.png in Resources */, - 41276653261DA2620001BDEF /* 流星_00050.png in Resources */, - 0BE100FE2150F9ED00098F1B /* douyin_01.png in Resources */, - E346BFF727044DF20090F3B3 /* mu_style_lip_01.bundle in Resources */, - E3CB952E23CC6EBF000D1695 /* chuju.bundle in Resources */, - 4180A52726117F55003DC778 /* redribbt.bundle in Resources */, - 4180A53426117F55003DC778 /* sdlu.png in Resources */, - E3DD0F712484D7FC0064CF7E /* hair_normal.bundle in Resources */, - E3226471225F097F003A6182 /* xiaoxueshen_ztt_fu.bundle in Resources */, - E38A67ED23CF1EE300AD9DD0 /* mu_style_eyelash_05.bundle in Resources */, - E3706F6E216ED9E1004BFC7F /* loading.gif in Resources */, - E39CF97E249A030A003A6C14 /* male_hair_5.bundle in Resources */, - E3CB953223CC6EBF000D1695 /* shaonv.bundle in Resources */, - E3CB952C23CC6EBF000D1695 /* yanshimao.bundle in Resources */, - E39E1B13222D0F49008F76A4 /* makeup.json in Resources */, + E3447E1528AB8FF9008E164C /* boyfriend1_740.bundle in Resources */, + E34069C0288A891700373612 /* 流星_00037.png in Resources */, + E3A58C2528A2754000941101 /* xiongmao.bundle in Resources */, + E3447DCB28AB6A21008E164C /* taozhuang_12.bundle in Resources */, + E3447DCA28AB6A21008E164C /* midBody_female.bundle in Resources */, + E3A58C3B28A278EB00941101 /* big_head_facewarp6.bundle in Resources */, + E39709BC28A0C15200FC0F46 /* light_makeup.json in Resources */, + E39709CF28A0F02700FC0F46 /* mu_eyeshadow_21.png in Resources */, + E3923E58288FC99B00A5FB31 /* redribbt.bundle in Resources */, + E34069A7288A87D200373612 /* homepage_data_source.json in Resources */, + E3DC94CA2890E3630016C9B1 /* tongue.bundle in Resources */, + E34069CB288A891700373612 /* 流星_00051.png in Resources */, + E3447DCC28AB6A21008E164C /* female_hair_23.bundle in Resources */, + E3A58C2228A2754000941101 /* tiger_bai.bundle in Resources */, + E34069CD288A891700373612 /* 流星_00049.png in Resources */, + E3447E1728AB8FF9008E164C /* human_outline_740.bundle in Resources */, + E3447D8D28AA4887008E164C /* ctrl_rain_740.bundle in Resources */, + E34069C2288A891700373612 /* 流星_00040.png in Resources */, + E34069BE288A891700373612 /* tiezhi_data.json in Resources */, + E3447DDE28AB6A75008E164C /* xiezi_tuoxie_2.bundle in Resources */, + E3447DD828AB6A75008E164C /* toushi_7.bundle in Resources */, + E39713B8289BD055002933BE /* hashiqi_Animoji.bundle in Resources */, + E39713EA289D076D002933BE /* hair_normal.bundle in Resources */, + E3447D9328AA4887008E164C /* ctrl_snow_740.bundle in Resources */, + E39709D328A0F03E00FC0F46 /* mu_eyebrow_16.png in Resources */, + E3A58C1A28A2754000941101 /* tiger.bundle in Resources */, + E3923E63288FC99B00A5FB31 /* fu_zh_fenshu.bundle in Resources */, + E3381CF528DD864F005C2E57 /* LaunchScreen.storyboard in Resources */, + E3A58C7728A37D4A00941101 /* facewarp2.bundle in Resources */, + E39709CB28A0F01000FC0F46 /* mu_blush_23.png in Resources */, + E3AD21F928DACBCF004D3F80 /* landmarks.bundle in Resources */, + E3447D8F28AA4887008E164C /* ssd_thread_six.bundle in Resources */, + E39709C928A0F00700FC0F46 /* mu_eyeshadow_01.png in Resources */, + E3A58C3E28A278EB00941101 /* big_head_facewarp2.bundle in Resources */, + E3A58C3A28A278EB00941101 /* big_head_facewarp5.bundle in Resources */, + E39713AA289BD055002933BE /* kaola_Animoji.bundle in Resources */, + E3447E1828AB8FF9008E164C /* sea_lm_fu.bundle in Resources */, + E3DC94CF2890E3630016C9B1 /* fuzzytoonfilter.bundle in Resources */, + E3DC94C72890E3630016C9B1 /* ai_face_processor_lite.bundle in Resources */, + E3447DBE28AB69CD008E164C /* anim_idle.bundle in Resources */, + E39709D928A0F06300FC0F46 /* mu_eyebrow_18.png in Resources */, + E34069C1288A891700373612 /* 流星_00041.png in Resources */, + E3A58C3928A278EB00941101 /* big_head_facewarp1.bundle in Resources */, + E354E79E28E1733400749C80 /* hair_beauty.json in Resources */, + E34069C5288A891700373612 /* 流星_00047.png in Resources */, + E3447E1E28AB8FF9008E164C /* ice_lm_fu.bundle in Resources */, + E3DC94C62890E3630016C9B1 /* ai_bgseg_green.bundle in Resources */, + E3447DDF28AB6A75008E164C /* waitao_3.bundle in Resources */, + E3447E1A28AB8FF9008E164C /* boyfriend2_740.bundle in Resources */, + E3447D8E28AA4887008E164C /* ssd_thread_cute.bundle in Resources */, + E39713A6289BD055002933BE /* cartoon_princess_Animoji.bundle in Resources */, + E3447E1C28AB8FF9008E164C /* gufeng_zh_fu.bundle in Resources */, + E3447E0928AB853E008E164C /* segmentation.json in Resources */, + E3447D9228AA4887008E164C /* ctrl_flower_740.bundle in Resources */, + E3A58C5228A352E300941101 /* future_warrior.bundle in Resources */, + E3923E59288FC99B00A5FB31 /* DaisyPig.bundle in Resources */, + E39709CD28A0F01E00FC0F46 /* mu_eyebrow_19.png in Resources */, + E354E7E728E2C89700749C80 /* comic_filter.json in Resources */, + E39709C528A0EFA500FC0F46 /* mu_blush_01.png in Resources */, + E3923E65288FC99B00A5FB31 /* sdlu.bundle in Resources */, + E3DC94CD2890E3630016C9B1 /* controller_cpp.bundle in Resources */, + E39713AE289BD055002933BE /* kuloutou_Animoji.bundle in Resources */, + E3A58C3D28A278EB00941101 /* big_head_facewarp4.bundle in Resources */, + E3A58C7928A37D4A00941101 /* facewarp4.bundle in Resources */, + E3DC94CB2890E3630016C9B1 /* fxaa.bundle in Resources */, + E3447DBF28AB69CD008E164C /* default_bg.bundle in Resources */, + E34069C9288A891700373612 /* 流星_00044.png in Resources */, + E3A58C9528A3801700941101 /* body_beauty.json in Resources */, + E3447DC928AB6A21008E164C /* toushi_5.bundle in Resources */, + E3A58C6528A360F500941101 /* douyin_02.bundle in Resources */, + E39709D528A0F04D00FC0F46 /* mu_eyeshadow_18.png in Resources */, + E39713B2289BD055002933BE /* wuxia_Animoji.bundle in Resources */, + E34069C4288A891700373612 /* 流星_00043.png in Resources */, + E3923E57288FC99B00A5FB31 /* CatSparks.bundle in Resources */, + E3A58C5328A352E300941101 /* qingqing_ztt_fu.bundle in Resources */, + E3A58C5428A352E300941101 /* jet_mask.bundle in Resources */, + E34069CF288A891700373612 /* 流星_00038.png in Resources */, + E3447DDB28AB6A75008E164C /* male_hair_5.bundle in Resources */, + E3DC94C42890E3630016C9B1 /* ai_hand_processor.bundle in Resources */, + E3DC94D02890E3630016C9B1 /* face_beautification.bundle in Resources */, + E3447DDC28AB6A75008E164C /* kuzi_changku_5.bundle in Resources */, + E34069C8288A891700373612 /* 流星_00050.png in Resources */, + E3447E1D28AB8FF9008E164C /* hez_ztt_fu.bundle in Resources */, + E39713B3289BD055002933BE /* baimao_Animoji.bundle in Resources */, + E39713BC289BD055002933BE /* frog_Animoji.bundle in Resources */, + E340699C288A824700373612 /* Localizable.strings in Resources */, + E3A58C5128A352E300941101 /* xiaobianzi_zh_fu.bundle in Resources */, + E3A58C2428A2754000941101 /* baozi.bundle in Resources */, + E3A58C7828A37D4A00941101 /* facewarp3.bundle in Resources */, + E3A07C9F288939BE00E6F7E5 /* Assets.xcassets in Resources */, + E3DC94CE2890E3630016C9B1 /* body_slim.bundle in Resources */, + E39713A7289BD055002933BE /* baihu_Animoji.bundle in Resources */, + E39709D128A0F03400FC0F46 /* mu_blush_20.png in Resources */, + E3A58C2328A2754000941101 /* tiger_huang.bundle in Resources */, + E3447DD928AB6A75008E164C /* midBody_male.bundle in Resources */, + E3A58C7628A37D4A00941101 /* facewarp6.bundle in Resources */, + E3923E5E288FC99B00A5FB31 /* xlong_zh_fu.bundle in Resources */, + E3447E1928AB8FF9008E164C /* xiandai_ztt_fu.bundle in Resources */, + E34069C3288A891700373612 /* 流星_00042.png in Resources */, + E3A58C6628A360F500941101 /* douyin.mp3 in Resources */, + E3CD5A0328991D120088ED12 /* green_screen_740.bundle in Resources */, + E39713BA289BD055002933BE /* hetun_Animoji.bundle in Resources */, + E39709DB28A0F06900FC0F46 /* mu_eyeshadow_20.png in Resources */, + E3DC94C82890E3630016C9B1 /* ai_human_processor.bundle in Resources */, + E34069BF288A891700373612 /* 流星_00036.png in Resources */, + E3447DCF28AB6A3B008E164C /* facemakeup_3.bundle in Resources */, + E39709F428A0F44900FC0F46 /* FUQualityStickerCell.xib in Resources */, + E3A58C3C28A278EB00941101 /* big_head_facewarp3.bundle in Resources */, + E39709D728A0F05A00FC0F46 /* mu_blush_22.png in Resources */, + E3447D9028AA4887008E164C /* ssd_thread_korheart.bundle in Resources */, + E34069CA288A891700373612 /* 流星_00045.png in Resources */, + E3A58C1928A2754000941101 /* lanhudie.bundle in Resources */, + E3923E5C288FC99B00A5FB31 /* newy1.bundle in Resources */, + E39713AD289BD055002933BE /* qgirl_Animoji.bundle in Resources */, + E3447E1B28AB8FF9008E164C /* bg_segment.bundle in Resources */, + E3447DC828AB6A21008E164C /* headnv.bundle in Resources */, + E3A58C6428A360F500941101 /* douyin_01.bundle in Resources */, + E3DC94C32890E3630016C9B1 /* ai_face_recognizer.bundle in Resources */, + E3447DDA28AB6A75008E164C /* headnan.bundle in Resources */, + E3A58C1B28A2754000941101 /* bluebird.bundle in Resources */, + E34069CC288A891700373612 /* 流星_00048.png in Resources */, + E3447EE828C5DC5E008E164C /* change_face.bundle in Resources */, + E39709C728A0EFE200FC0F46 /* mu_eyebrow_01.png in Resources */, + E39709C128A0EA6700FC0F46 /* light_makeup.bundle in Resources */, + E39713B0289BD055002933BE /* huangya_Animoji.bundle in Resources */, + E34069C7288A891700373612 /* 流星_00046.png in Resources */, + E3923E5B288FC99B00A5FB31 /* sdlr.bundle in Resources */, + E3A58C1728A2754000941101 /* fenhudie.bundle in Resources */, + E3328D9428E4705800216BDC /* test_configurations.plist in Resources */, + E3A58C5028A352E300941101 /* xiaoxueshen_ztt_fu.bundle in Resources */, + E34069C6288A891700373612 /* 流星_00052.png in Resources */, + E3A58C7A28A37D4A00941101 /* facewarp5.bundle in Resources */, + E3DC94C92890E3630016C9B1 /* ai_human_processor_gpu.bundle in Resources */, + E34069CE288A891700373612 /* 流星_00039.png in Resources */, + E3DC94CC2890E3630016C9B1 /* face_makeup.bundle in Resources */, + E39713A8289BD055002933BE /* douniuquan_Animoji.bundle in Resources */, + E3A58C5528A352E300941101 /* luhantongkuan_ztt_fu.bundle in Resources */, + E3A58C5628A352E300941101 /* sdx2.bundle in Resources */, + E3447E1628AB8FF9008E164C /* boyfriend3_740.bundle in Resources */, + E3447DCD28AB6A21008E164C /* xiezi_danxie.bundle in Resources */, + E39713EB289D076D002933BE /* hair_gradient.bundle in Resources */, + E3447DDD28AB6A75008E164C /* peishi_erding_2.bundle in Resources */, + E3DC94C52890E3630016C9B1 /* ai_face_processor.bundle in Resources */, + E3ED025C28A10CE8000F28CD /* controller_config.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 410F67E8268DB52B00CC1613 /* ShellScript */ = { + 29D118CF6105979737EDCEDC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\necho \"copy DSYM!!!!\"\n\necho \"符号表路径:$DWARF_DSYM_FOLDER_PATH\"\n\nDSYMFILE=$DWARF_DSYM_FOLDER_PATH/$PRODUCT_NAME.app.dSYM\necho \"符号表文件名称:$DSYMFILE\"\n\nDESDSYMFILE=\"$HOME/Desktop/${PRODUCT_NAME}_dsym\"\necho \"dsym保存至:$DESDSYMFILE\"\n\nif [ ! -d \"$DESDSYMFILE\" ]; then\n mkdir \"$DESDSYMFILE\"\nfi\n\nif [ -d \"$DSYMFILE\" ]; then\n timeStr=$(date \"+%Y%m%d:%H%M%S\")\n cp -R \"$DSYMFILE\" \"$DESDSYMFILE/${PRODUCT_NAME}_${timeStr}.app.dsym\"\nfi\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 66BB7B4A1EA8A5FFD00D0650 /* [CP] Embed Pods Frameworks */ = { + DFD830EC32E378BC96BB5773 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", - "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework", - "${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework", - "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework", - "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework", - "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework", + "$(DERIVED_FILE_DIR)/Pods-FULiveDemo-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - CD0B4B85211613BB0019F9FA /* unzip */ = { + E369F92628D971970036AC5A /* Copy dSYM Shell */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - ); - name = unzip; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n#!/bin/sh/\ncd FULiveDemo/Lib/FaceUnity-SDK-iOS\nfilename=libnama.a\nzipname=libnama.zip\n\nfilename2=libfuai.a\nzipname2=libfuai.zip\nmdcode=$(md5 $filename)\n\nif [ -f \"$zipname\" ];\nthen\nrm -f $filename\nunzip $zipname\nrm -f $zipname\n\nrm -f $filename2\nunzip $zipname2\nrm -f $zipname2\nfi\n"; - }; - CD11A34D20CE7C580005C58C /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 8; - files = ( + inputFileListPaths = ( ); inputPaths = ( ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 1; - shellPath = /bin/sh; - shellScript = "APP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\n# This script loops through the frameworks embedded in the application and\n\n# removes unused architectures.\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\necho \"-------------\"\n\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\n\ndo\n\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\n\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\n\necho \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\n\nEXTRACTED_ARCHS=()\n\nfor ARCH in $ARCHS\n\ndo\n\necho \"Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME\"\n\nlipo -extract \"$ARCH\" \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\"\n\nEXTRACTED_ARCHS+=(\"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\")\n\ndone\n\necho \"Merging extracted architectures: ${ARCHS}\"\n\nlipo -o \"$FRAMEWORK_EXECUTABLE_PATH-merged\" -create \"${EXTRACTED_ARCHS[@]}\"\n\nrm \"${EXTRACTED_ARCHS[@]}\"\n\necho \"Replacing original executable with thinned version\"\n\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\n\nmv \"$FRAMEWORK_EXECUTABLE_PATH-merged\" \"$FRAMEWORK_EXECUTABLE_PATH\"\n\ndone\n"; - }; - FA957C64E2549EB6F75CB07D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + name = "Copy dSYM Shell"; + outputFileListPaths = ( ); - name = "[CP] Check Pods Manifest.lock"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FULiveDemo-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\necho \"copy DSYM!!!!\"\n\necho \"符号表路径:$DWARF_DSYM_FOLDER_PATH\"\n\nDSYMFILE=$DWARF_DSYM_FOLDER_PATH/$PRODUCT_NAME.app.dSYM\necho \"符号表文件名称:$DSYMFILE\"\n\nDESDSYMFILE=\"$HOME/Desktop/${PRODUCT_NAME}_dsym\"\necho \"dsym保存至:$DESDSYMFILE\"\n\nif [ ! -d \"$DESDSYMFILE\" ]; then\n mkdir \"$DESDSYMFILE\"\nfi\n\nif [ -d \"$DSYMFILE\" ]; then\n timeStr=$(date \"+%Y%m%d:%H%M%S\")\n cp -R \"$DSYMFILE\" \"$DESDSYMFILE/${PRODUCT_NAME}_${timeStr}.app.dsym\"\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0B5A0CB12021913900AAD47D /* Sources */ = { + E3A07C8B288939BD00E6F7E5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E374C0572886627200931142 /* FUExpressionRecognitionViewController.m in Sources */, - E3120FCF274787F3000456D9 /* FUCustomizedMakeupView.m in Sources */, - E37E54F728729A38002952A1 /* FUHomepageViewModel.m in Sources */, - E3706F58216C304C004BFC7F /* FUEditImageViewController.m in Sources */, - E30EFB8A273E61C500B6AE63 /* FUCombinationMakeupCell.m in Sources */, - E3677127273D13420060E564 /* FUCombinationMakeupModel.m in Sources */, - E334038922A1022100D56810 /* FUColourView.m in Sources */, - 41C45F5F25F71CA2006F8F4C /* FUBodyAvatarManager.m in Sources */, - 4156CE33261472A700DD72C1 /* FUQualityStickerManager.m in Sources */, - E37E54FA28729BC3002952A1 /* FUHomepageModel.m in Sources */, - E3706F53216B68B1004BFC7F /* FUSaveViewController.m in Sources */, - 410BC7AB25F2333C00FDB6C0 /* FUBodyBeautyManager.m in Sources */, - E35AE6602226709C0076C375 /* FUBeautyView.m in Sources */, - E374C07E288684D000931142 /* FUGestureRecognitionViewController.m in Sources */, - 41DD2E7725E7A3940030A363 /* FUMusicFilterManager.m in Sources */, - E37E54F428729A01002952A1 /* FUHomepageViewController.m in Sources */, - E37CBDAB2202C937000C9C42 /* FUAnimojiController.m in Sources */, - ACBDCE3525F65D7B0036FC63 /* FULightMakeupController.m in Sources */, - E3070941235815FF006CC017 /* FULightModel.m in Sources */, - E37FF63922F3E6A80014821C /* FUPositionInfo.m in Sources */, - E3C8875823C479EA00CA732C /* FUBeautyParam.m in Sources */, - E374C0752886840200931142 /* FUExpressionRecognitionViewModel.m in Sources */, - E3B3D7682761AF4700FF0FAC /* FUBeautyRenderMediaViewController.m in Sources */, - 4156CD9E26141DCB00DD72C1 /* FUStyleModel.m in Sources */, - E30D5D012680984300EF70B1 /* UIImage+FU.m in Sources */, - ACC0B5B925F126F0002B56FC /* FUHairView.m in Sources */, - 4198723125F08AEE0082AD1E /* FULightMakeupManager.m in Sources */, - 410F43D825E776E8000AFB72 /* FULocalDataManager.m in Sources */, - E3B3D0F12350A99000263116 /* FUPopupMenu.m in Sources */, - E374C00828854AF500931142 /* FUARMaskViewController.m in Sources */, - 4191A04025F1C83F0052AFB3 /* FUGreenScreenManager.m in Sources */, - E3C8875B23C47AEC00CA732C /* FUAPIDemoBar.m in Sources */, - 0B5A0D6D2021918000AAD47D /* FUCircleProgressView.m in Sources */, - E35AE6632226709C0076C375 /* FUFilterView.m in Sources */, - E39944D926C29492003E4EFA /* FUGreenScreenSafeAreaModel.m in Sources */, - 4191A03F25F1C83F0052AFB3 /* FULvMuViewController.m in Sources */, - 4165BCFC25F0FB350076FBFD /* FUAnimationFilterManager.m in Sources */, - 4191A07125F1D7460052AFB3 /* FUGreenScreenBgModel.m in Sources */, - 4156CE05261470CF00DD72C1 /* FUQStickersViewController.m in Sources */, - E3583E852711422F008E52A7 /* FULandmarkManager.m in Sources */, - ACC0B5B825F126F0002B56FC /* FUHairManager.m in Sources */, - 0BC0D25E2153891300324D7D /* FULightingSlider.m in Sources */, - ACC0B5B725F126F0002B56FC /* FUHairController.m in Sources */, - 4191A03C25F1C83F0052AFB3 /* FUBgCollectionView.m in Sources */, - E3677130273E45850060E564 /* FUMakeupViewController.m in Sources */, - E39CF9482499F9E8003A6C14 /* FUBodyAvatarController.m in Sources */, - E374C07B288684C500931142 /* FUGestureRecognitionViewModel.m in Sources */, - E367712A273E05B50060E564 /* FUSingleMakeupModel.m in Sources */, - AC931D2625F454B000834328 /* FUPosterManager.m in Sources */, - E38A62D924A0D181006F4465 /* FUBodyCollectionView.m in Sources */, - 4191A03D25F1C83F0052AFB3 /* FUTakeColorView.m in Sources */, - 4156CE06261470CF00DD72C1 /* FUStickersPageController.m in Sources */, - 41391C3325E8D071005451E5 /* FUBaseViewController.m in Sources */, - 4156CE08261470CF00DD72C1 /* FUStickerModel.m in Sources */, - 4156CE09261470CF00DD72C1 /* FUStickerCell.m in Sources */, - E3B3D7702761EC6C00FF0FAC /* FUGreenScreenRenderMediaViewController.m in Sources */, - E386784E28813F8F005A94A4 /* FUStickerViewModel.m in Sources */, - 41391C2C25E8D067005451E5 /* FUBaseViewControllerManager.m in Sources */, - 0B5A0D722021918000AAD47D /* FUPhotoButton.m in Sources */, - E37FF63E22F3EA560014821C /* FUBodyBeautyView.m in Sources */, - E3C4889F2485EB050070D88E /* FUHomepageHeaderView.m in Sources */, - E384F1B0277ABDEB00BB2359 /* FUBodyBeautyRenderMediaViewController.m in Sources */, - 412F77502609C59C003AF848 /* FUBGSaveModel.m in Sources */, - E386785A288147DA005A94A4 /* FUStickerViewController.m in Sources */, - 41C0FF3A260C6DF200CAFE62 /* NSObject+economizer.m in Sources */, - E36055AE27424A4E000C4421 /* FUMakeupManager.m in Sources */, - 0B5A0CC82021913900AAD47D /* main.m in Sources */, - E37CBDA722029EF0000C9C42 /* FUPosterController.m in Sources */, - E3B51FF3275F43490098314E /* FURenderMediaViewController.m in Sources */, - E3120FD227478AF7000456D9 /* FUCustomizedMakeupCell.m in Sources */, - 41DD2E8625E7A5DB0030A363 /* FUBGSegmentationController.m in Sources */, - 410F43ED25E78C73000AFB72 /* FUAnimojiManager.m in Sources */, - 410F43C825E75863000AFB72 /* FUStickerManager.m in Sources */, - E37FF64122F404820014821C /* FUPositionCell.m in Sources */, - 4191A06A25F1D5FB0052AFB3 /* FUGreenScreenModel.m in Sources */, - E34202E7288532090016DC9E /* FUStickerRenderMediaViewController.m in Sources */, - 0BC0D26121538BA300324D7D /* FULightingView.m in Sources */, - E32D08DD2875608200884AE5 /* FUHomepageModuleCell.m in Sources */, - E3677133273E45E50060E564 /* FUCombinationMakeupView.m in Sources */, - 41DD2E6F25E7A35F0030A363 /* FUMusicFilterController.m in Sources */, - E3706F46216B3AE6004BFC7F /* FUPosterCell.m in Sources */, - E374C005288548D700931142 /* FUARMaskViewModel.m in Sources */, - E374C06C2886838900931142 /* FUDistortingMirrorViewController.m in Sources */, - E35AE66B2226709C0076C375 /* UIImage+demobar.m in Sources */, - 4191A03E25F1C83F0052AFB3 /* FULvMuView.m in Sources */, - E3618FE12857307C00E7D8D2 /* FUPersistentBeautyModel.m in Sources */, - E374C00E28854DE400931142 /* FUHilariousViewController.m in Sources */, - 41DD2E8E25E7A5F50030A363 /* FUBGSegmentManager.m in Sources */, - E3C8875423C4771E00CA732C /* FUSelectedImageController.m in Sources */, - E30EBA7C283341DC00538844 /* FUBGSegmentationRenderMediaViewController.m in Sources */, - 4156CE26261471B100DD72C1 /* UIColor+FU.m in Sources */, - E334038C22A10BE900D56810 /* FUColourFlowLayout.m in Sources */, - E37CBD9621FFE728000C9C42 /* FUHeadButtonView.m in Sources */, - E3706F4C216B4DDC004BFC7F /* FUPosterListViewController.m in Sources */, - E3BEE31C26BA8831001220D1 /* UIView+FU.m in Sources */, - 410BC7A025F2332200FDB6C0 /* FUBodyBeautyController.m in Sources */, - 4156CE1E2614715B00DD72C1 /* FUNetworkingHelper.m in Sources */, - E39944C426C250BE003E4EFA /* FUSafeAreaCollectionView.m in Sources */, - E3833EC323150782007D3A47 /* FUSwitch.m in Sources */, - E37D20B62754A472007BE062 /* FULightMakeupCell.m in Sources */, - E3BE2B7B274B6389001679AD /* FUMakeupModel.m in Sources */, - 4156CD9526141DAE00DD72C1 /* FUBeautyModel.m in Sources */, - 41391C2B25E8D067005451E5 /* FUMetaManager.m in Sources */, - E374C06F2886839000931142 /* FUDistortingMirrorViewModel.m in Sources */, - 4156CE3A261472C100DD72C1 /* FUStickerHelper.m in Sources */, - E374C0782886842B00931142 /* FUHilariousViewModel.m in Sources */, - E307093D23580BFA006CC017 /* FULightMakeupCollectionView.m in Sources */, - E3618FF4285867A000E7D8D2 /* FUMakeupRenderMediaViewController.m in Sources */, - ACBDCE3F25F65E310036FC63 /* FUBeautyController.m in Sources */, - E38A679B23CDA1E600AD9DD0 /* FUManager.m in Sources */, - E38CA9CD2823ABB400414FCA /* AppDelegate.m in Sources */, + E3ED026C28A126CC000F28CD /* FUMediaPickerViewModel.m in Sources */, + E3A07CBF28893D4300E6F7E5 /* FUHomepageViewModel.m in Sources */, + E3A58C3128A2759F00941101 /* FUHilariousViewController.m in Sources */, + E3406A37288AAAF600373612 /* FULightingSlider.m in Sources */, + E3A58CAA28A38CB000941101 /* FUBeautyImageRenderViewController.m in Sources */, + E3A58C0328A2726800941101 /* FUARMaskViewModel.m in Sources */, + E3406A35288AAAF600373612 /* FUHeadButtonView.m in Sources */, + E3A58CB328A3AEB100941101 /* FUCaptureButton.m in Sources */, + E3447DFD28AB7EBE008E164C /* FUSegmentationViewModel.m in Sources */, + E3CD59A328977B2B0088ED12 /* FUGreenScreenViewController.m in Sources */, + E30721CC28A2369300332859 /* FUVideoRenderViewModel.m in Sources */, + E3447E8D28C1E2AF008E164C /* FUFaceFusionEffectViewController.m in Sources */, + E39709EF28A0F44900FC0F46 /* FUQualityStickerPageController.m in Sources */, + E369F91428D867730036AC5A /* FUStickerVideoRenderViewController.m in Sources */, + E3A58C3028A2759F00941101 /* FUHilariousViewModel.m in Sources */, + E3A58C5F28A3592A00941101 /* FUMusicFilterViewController.m in Sources */, + E3A58C5E28A3592A00941101 /* FUMusicFilterViewModel.m in Sources */, + E3406A28288AAA0600373612 /* FURenderViewModel.m in Sources */, + E3A58C6F28A364B800941101 /* FUDistortingMirrorViewController.m in Sources */, + E3A13D6C28C87A65009402A3 /* FUMakeupViewModel.m in Sources */, + E369F92528D96A6D0036AC5A /* FUMakeupVideoRenderViewModel.m in Sources */, + E3447E0428AB8172008E164C /* FUSegmentationModel.m in Sources */, + E3381CE228DD647E005C2E57 /* SVProgressHUD+FU.m in Sources */, + E3A58CB028A3AA5500941101 /* UIButton+FU.m in Sources */, + E39713DF289CE648002933BE /* FUHairBeautyView.m in Sources */, + E3A07C94288939BD00E6F7E5 /* AppDelegate.m in Sources */, + E34069A3288A836D00373612 /* UIColor+FU.m in Sources */, + E30721D328A2545100332859 /* FUStickerImageRenderViewController.m in Sources */, + E3447E8228C1D319008E164C /* FUFaceFusionManager.m in Sources */, + E397136A289BBB5D002933BE /* UIImage+FU.m in Sources */, + E369F95028D9AE3C0036AC5A /* FUStickerComponentViewModel.m in Sources */, + E354E7EB28E2CC0500749C80 /* FUComicFilterModel.m in Sources */, + E3447D9928AB3A45008E164C /* FUBodyAvatarViewController.m in Sources */, + E39713D9289CBBDF002933BE /* FUHairBeautyViewModel.m in Sources */, + E3923E3E288FC10000A5FB31 /* FUStickerViewModel.m in Sources */, + E3ED026728A11790000F28CD /* FUMediaPickerViewController.m in Sources */, + E3A58CA128A38B9F00941101 /* FUBodyBeautyCell.m in Sources */, + E3447E2128AB9BA5008E164C /* FUUtility.m in Sources */, + E3A58DE128A6484B00941101 /* FUGreenScreenImageRenderViewController.m in Sources */, + E3A58DEB28A653A300941101 /* FUGreenScreenImageRenderViewModel.m in Sources */, + E34069D9288A992800373612 /* FURenderKitManager.m in Sources */, + E3A07CC428893D4300E6F7E5 /* FUHomepageModuleCell.m in Sources */, + E3406A38288AAAF600373612 /* FUCircleProgressView.m in Sources */, + E39709B928A0BC4100FC0F46 /* FULightMakeupModel.m in Sources */, + E39709EE28A0F44900FC0F46 /* FUQualityStickerViewController.m in Sources */, + E3447E5528AC8D29008E164C /* FUFaceFusionCell.m in Sources */, + E369F91F28D96A030036AC5A /* FUMakeupImageRenderViewController.m in Sources */, + E3447D6628A9FDCD008E164C /* FUBeautyVideoRenderViewController.m in Sources */, + E3A58C0428A2726800941101 /* FUARMaskViewController.m in Sources */, + E3923E42288FC18E00A5FB31 /* FUStickerViewController.m in Sources */, + E3A58CA728A38C3700941101 /* FUBodyBeautyViewController.m in Sources */, + E3447EDB28C59984008E164C /* FUFaceFusionTipView.m in Sources */, + E369F91728D867CF0036AC5A /* FUStickerVideoRenderViewModel.m in Sources */, + E3A07CC028893D4300E6F7E5 /* FUHomepageModel.m in Sources */, + E39709B128A0B37A00FC0F46 /* FULightMakeupCell.m in Sources */, + E397138B289BC147002933BE /* FUAnimojiViewModel.m in Sources */, + E39713E3289CF4BD002933BE /* FUHairBeautyViewController.m in Sources */, + E39709F028A0F44900FC0F46 /* FUQualityStickerHelper.m in Sources */, + E3A58C4728A34F2600941101 /* FUExpressionRecognitionViewController.m in Sources */, + E30721D628A2548500332859 /* FUStickerImageRenderViewModel.m in Sources */, + E3A07CC228893D4300E6F7E5 /* FUHomepageHeaderView.m in Sources */, + E3406990288A730300373612 /* FURenderViewController.m in Sources */, + E3447E7228C1CE9D008E164C /* FUFaceFusionCaptureViewController.m in Sources */, + E3406993288A76FE00373612 /* FUNavigationController.m in Sources */, + E3447D9C28AB3A56008E164C /* FUBodyAvatarViewModel.m in Sources */, + E3A58C9B28A3838600941101 /* FUBodyBeautyViewModel.m in Sources */, + E3ED026028A113D6000F28CD /* FUImageRenderViewController.m in Sources */, + E3A13D6F28C87B1E009402A3 /* FUMakeupViewController.m in Sources */, + E3CD59AA289780C90088ED12 /* FUBeautyViewModel.m in Sources */, + E39709B628A0B93100FC0F46 /* FULightMakeupViewModel.m in Sources */, + E3ED026428A113E8000F28CD /* FUVideoRenderViewController.m in Sources */, + E354E79C28E1728500749C80 /* FUHairBeautyModel.m in Sources */, + E3447E8A28C1E244008E164C /* FUFaceFusionCaptureResultViewController.m in Sources */, + E3406A41288AAB0800373612 /* FUSwitch.m in Sources */, + E39709F228A0F44900FC0F46 /* FUQualityStickerModel.m in Sources */, + E369F92228D96A510036AC5A /* FUMakeupImageRenderViewModel.m in Sources */, + E3ED025428A0F6D5000F28CD /* FUQualityStickerViewModel.m in Sources */, + E3923E70288FDEF400A5FB31 /* FUBeautyViewController.m in Sources */, + E3406A40288AAB0800373612 /* FUPopupMenu.m in Sources */, + E3447D6928A9FDE7008E164C /* FUBeautyVideoRenderViewModel.m in Sources */, + E3971386289BC0A3002933BE /* FUAnimojiViewController.m in Sources */, + E3AD21F728DACB2B004D3F80 /* FULandmarkManager.m in Sources */, + E3CD59A628977B460088ED12 /* FUGreenScreenViewModel.m in Sources */, + E3447D6F28AA2045008E164C /* FUGreenScreenVideoRenderViewModel.m in Sources */, + E369F91C28D969EE0036AC5A /* FUMakeupVideoRenderViewController.m in Sources */, + E3A58C4628A34F2600941101 /* FUExpressionRecognitionViewModel.m in Sources */, + E3406A34288AAAF600373612 /* FULightingView.m in Sources */, + E3447E0128AB7F1A008E164C /* FUSegmentationViewController.m in Sources */, + E3447E5228AC889A008E164C /* FUFaceFusionCollectionViewController.m in Sources */, + E3447E7F28C1D07F008E164C /* FUFaceFusionCaptureViewModel.m in Sources */, + E39709AF28A0B37A00FC0F46 /* FULightMakeupViewController.m in Sources */, + E3A58C9828A380C000941101 /* FUBodyBeautyModel.m in Sources */, + E39709F328A0F44900FC0F46 /* FUQualityStickerCell.m in Sources */, + E3A58CAD28A38CCA00941101 /* FUBeautyImageRenderViewModel.m in Sources */, + E3447D8328AA4467008E164C /* FUGestureRecognitionViewModel.m in Sources */, + E3447D8428AA4467008E164C /* FUGestureRecognitionViewController.m in Sources */, + E3A07CC528893D4300E6F7E5 /* FUHomepageViewController.m in Sources */, + E3A58C6E28A364B800941101 /* FUDistortingMirrorViewModel.m in Sources */, + E3ED025928A0F709000F28CD /* FUNetworkingHelper.m in Sources */, + E369F94D28D9AB530036AC5A /* FUStickerComponentManager.m in Sources */, + E3447D6C28AA2028008E164C /* FUGreenScreenVideoRenderViewController.m in Sources */, + E30721C828A234A000332859 /* FUImageRenderViewModel.m in Sources */, + E3A07CA5288939BE00E6F7E5 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 0B5A0CBE2021913900AAD47D /* Main.storyboard */ = { + E340699E288A824700373612 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - 0B5A0CBF2021913900AAD47D /* Base */, - 0B6B00FA20F49BE90079118B /* zh-Hans */, - 0B6B010320F4A25C0079118B /* en */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 0B5A0CC32021913900AAD47D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 0B5A0CC42021913900AAD47D /* Base */, - 0B6B00FB20F49BEA0079118B /* zh-Hans */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 0B6B010020F49C0F0079118B /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 0B6B00FF20F49C0F0079118B /* en */, - 0B6B010120F49C110079118B /* zh-Hans */, + E340699D288A824700373612 /* en */, + E340699F288A824800373612 /* zh-Hans */, ); name = Localizable.strings; sourceTree = ""; - usesTabs = 0; - }; - E35AE63A2226709C0076C375 /* FUAPIDemoBar.xib */ = { - isa = PBXVariantGroup; - children = ( - E35AE63B2226709C0076C375 /* Base */, - ); - name = FUAPIDemoBar.xib; - sourceTree = ""; - }; - E3DF96BE2369403D00DB49B2 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - E3DF96BD2369403D00DB49B2 /* en */, - E3DF96BF2369405600DB49B2 /* zh-Hans */, - ); - name = InfoPlist.strings; - sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 0B5A0CDF2021913900AAD47D /* Debug */ = { + E3A07CA6288939BE00E6F7E5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -3410,15 +2507,16 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -3437,28 +2535,30 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; - 0B5A0CE02021913900AAD47D /* Release */ = { + E3A07CA7288939BE00E6F7E5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -3466,15 +2566,16 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; @@ -3487,165 +2588,126 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; - 0B5A0CE22021913900AAD47D /* Debug */ = { + E3A07CA9288939BE00E6F7E5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 29B79CC7B81FD9FA254B7E7E /* Pods-FULiveDemo.debug.xcconfig */; + baseConfigurationReference = B3711DF38725A8956C408A78 /* Pods-FULiveDemo.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = ""; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 64; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_ASSET_PATHS = ""; + CURRENT_PROJECT_VERSION = 65; DEVELOPMENT_TEAM = 35A6KD62ZJ; ENABLE_BITCODE = NO; - EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "\"$(SRCROOT)/FULiveDemo/Modules/Beauty\"", - "$(PROJECT_DIR)/FULiveDemo/Modules/Beauty", - "$(PROJECT_DIR)/FULiveDemo/Lib", - "$(PROJECT_DIR)/FULiveDemo/Resource", - ); - GCC_PREFIX_HEADER = "$(SRCROOT)/FULiveDemo/PrefixHeader.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_ROOT}/Headers/Public\"", - "\"${PODS_ROOT}/Headers/Public/AFNetworking\"", - "\"${PODS_ROOT}/Headers/Public/FLAnimatedImage\"", - "\"${PODS_ROOT}/Headers/Public/MJExtension\"", - "\"${PODS_ROOT}/Headers/Public/Masonry\"", - "\"${PODS_ROOT}/Headers/Public/SDWebImage\"", - "\"${PODS_ROOT}/Headers/Public/SVProgressHUD\"", - ); - INFOPLIST_FILE = FULiveDemo/AppSupportFiles/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_GENERATE_MAP_FILE = NO; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", + "$(PROJECT_DIR)/FULiveDemo/FURenderKit", "$(PROJECT_DIR)", - "$(PROJECT_DIR)/FULiveDemo/Lib/FURenderKit.framework", - ); - OTHER_CFLAGS = ( - "$(inherited)", - "-isystem", - "\"${PODS_ROOT}/Headers/Public\"", - "-isystem", - "\"${PODS_ROOT}/Headers/Public/SVProgressHUD\"", ); - OTHER_LDFLAGS = ( + GCC_PREFIX_HEADER = "$(SRCROOT)/FULiveDemo/Application/PrefixHeader.pch"; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = FULiveDemo/Application/Info.plist; + INFOPLIST_KEY_NSCameraUsageDescription = "请授权访问您的相机"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "请授权访问您的麦克风"; + INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "请授权访问您的相册"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "请授权访问您的相册"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIRequiresFullScreen = YES; + INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = UIInterfaceOrientationPortrait; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "-ObjC", - "-framework", - "\"QuartzCore\"", + "@executable_path/Frameworks", ); + MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.fu.fulivedemo; - PRODUCT_NAME = FULiveDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64e armv7 armv7s arm64"; }; name = Debug; }; - 0B5A0CE32021913900AAD47D /* Release */ = { + E3A07CAA288939BE00E6F7E5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D595CE4A595DEF848B6EF7B3 /* Pods-FULiveDemo.release.xcconfig */; + baseConfigurationReference = BF62D7141D5E58E477FC9C7B /* Pods-FULiveDemo.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = ""; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 64; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_ASSET_PATHS = ""; + CURRENT_PROJECT_VERSION = 65; DEVELOPMENT_TEAM = 35A6KD62ZJ; ENABLE_BITCODE = NO; - EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "\"$(SRCROOT)/FULiveDemo/Modules/Beauty\"", - "$(PROJECT_DIR)/FULiveDemo/Modules/Beauty", - "$(PROJECT_DIR)/FULiveDemo/Lib", - "$(PROJECT_DIR)/FULiveDemo/Resource", - ); - GCC_PREFIX_HEADER = "$(SRCROOT)/FULiveDemo/PrefixHeader.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_ROOT}/Headers/Public\"", - "\"${PODS_ROOT}/Headers/Public/AFNetworking\"", - "\"${PODS_ROOT}/Headers/Public/FLAnimatedImage\"", - "\"${PODS_ROOT}/Headers/Public/MJExtension\"", - "\"${PODS_ROOT}/Headers/Public/Masonry\"", - "\"${PODS_ROOT}/Headers/Public/SDWebImage\"", - "\"${PODS_ROOT}/Headers/Public/SVProgressHUD\"", - ); - INFOPLIST_FILE = FULiveDemo/AppSupportFiles/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_GENERATE_MAP_FILE = NO; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", + "$(PROJECT_DIR)/FULiveDemo/FURenderKit", "$(PROJECT_DIR)", - "$(PROJECT_DIR)/FULiveDemo/Lib/FURenderKit.framework", - ); - OTHER_CFLAGS = ( - "$(inherited)", - "-isystem", - "\"${PODS_ROOT}/Headers/Public\"", - "-isystem", - "\"${PODS_ROOT}/Headers/Public/SVProgressHUD\"", ); - OTHER_LDFLAGS = ( + GCC_PREFIX_HEADER = "$(SRCROOT)/FULiveDemo/Application/PrefixHeader.pch"; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = FULiveDemo/Application/Info.plist; + INFOPLIST_KEY_NSCameraUsageDescription = "请授权访问您的相机"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "请授权访问您的麦克风"; + INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "请授权访问您的相册"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "请授权访问您的相册"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIRequiresFullScreen = YES; + INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = UIInterfaceOrientationPortrait; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "-ObjC", - "-framework", - "\"QuartzCore\"", + "@executable_path/Frameworks", ); + MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.fu.fulivedemo; - PRODUCT_NAME = FULiveDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64e armv7 armv7s arm64"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0B5A0CB02021913900AAD47D /* Build configuration list for PBXProject "FULiveDemo" */ = { + E3A07C8A288939BD00E6F7E5 /* Build configuration list for PBXProject "FULiveDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0B5A0CDF2021913900AAD47D /* Debug */, - 0B5A0CE02021913900AAD47D /* Release */, + E3A07CA6288939BE00E6F7E5 /* Debug */, + E3A07CA7288939BE00E6F7E5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0B5A0CE12021913900AAD47D /* Build configuration list for PBXNativeTarget "FULiveDemo" */ = { + E3A07CA8288939BE00E6F7E5 /* Build configuration list for PBXNativeTarget "FULiveDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0B5A0CE22021913900AAD47D /* Debug */, - 0B5A0CE32021913900AAD47D /* Release */, + E3A07CA9288939BE00E6F7E5 /* Debug */, + E3A07CAA288939BE00E6F7E5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 0B5A0CAD2021913900AAD47D /* Project object */; + rootObject = E3A07C87288939BD00E6F7E5 /* Project object */; } diff --git a/FULiveDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FULiveDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata index a00a4a2b..919434a6 100644 --- a/FULiveDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/FULiveDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/FULiveDemo.xcodeproj/xcshareddata/xcschemes/FULiveDemo.xcscheme b/FULiveDemo.xcodeproj/xcshareddata/xcschemes/FULiveDemo.xcscheme index 7f922edc..2e7ab992 100644 --- a/FULiveDemo.xcodeproj/xcshareddata/xcschemes/FULiveDemo.xcscheme +++ b/FULiveDemo.xcodeproj/xcshareddata/xcschemes/FULiveDemo.xcscheme @@ -1,7 +1,7 @@ + LastUpgradeVersion = "1330" + version = "1.3"> @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -27,15 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - @@ -47,7 +38,6 @@ useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" - migratedStopOnEveryIssue = "YES" debugServiceExtension = "internal" enableGPUValidationMode = "1" allowLocationSimulation = "YES"> @@ -55,26 +45,15 @@ runnableDebuggingMode = "0"> - - - - - - diff --git a/FULiveDemo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/FULiveDemo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index a6f6fb21..00000000 --- a/FULiveDemo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ - - - - - IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded - - PreviewsEnabled - - - diff --git a/FULiveDemo/AppSupportFiles/AppDelegate.h b/FULiveDemo/AppSupportFiles/AppDelegate.h deleted file mode 100644 index 4fbc06a2..00000000 --- a/FULiveDemo/AppSupportFiles/AppDelegate.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// AppDelegate.h -// FULive -// -// Created by L on 2018/1/15. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/FULiveDemo/AppSupportFiles/AppDelegate.m b/FULiveDemo/AppSupportFiles/AppDelegate.m deleted file mode 100644 index 580c4ca1..00000000 --- a/FULiveDemo/AppSupportFiles/AppDelegate.m +++ /dev/null @@ -1,82 +0,0 @@ -// -// AppDelegate.m -// FUAPIDemo -// -// Created by 刘洋 on 2017/1/9. -// Copyright © 2017年 刘洋. All rights reserved. -// - -#import "AppDelegate.h" - -#import -#import -#import "UIView+FU.h" -#import "FUBaseViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. - - NSArray *languages = [NSLocale preferredLanguages]; - //判断当前系统语言 - NSString *language = [languages objectAtIndex:0]; - if ([language hasPrefix:@"zh-Hans"]) { - //我这里的需求是,如果不是中文,则APP语言都显示成英文, - //先把它存在NSUserDefaults中 - [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"]; - } else{ - //en.lproj 是英文资源包的文件名字 - [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"]; - } - - [UIApplication sharedApplication].idleTimerDisabled = YES; - [SVProgressHUD setMinimumDismissTimeInterval:1.5]; - - return YES; -} - -- (void)applicationWillResignActive:(UIApplication *)application { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - if ([FURenderKit shareRenderKit].captureCamera.capturing) { - [[FURenderKit shareRenderKit] stopInternalCamera]; - } -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - UIViewController *viewController = [UIView fu_topViewController:[UIApplication sharedApplication].delegate.window.rootViewController]; - if (!viewController || [viewController isKindOfClass:[FUBaseViewController class]]) { - [[FURenderKit shareRenderKit] startInternalCamera]; - } -} - - -- (void)applicationDidEnterBackground:(UIApplication *)application { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - -} - - -- (void)applicationWillEnterForeground:(UIApplication *)application { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. - -} - - - - - -- (void)applicationWillTerminate:(UIApplication *)application { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - - -@end diff --git a/FULiveDemo/AppSupportFiles/Base.lproj/LaunchScreen.storyboard b/FULiveDemo/AppSupportFiles/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index ea8052e7..00000000 --- a/FULiveDemo/AppSupportFiles/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/AppSupportFiles/Info.plist b/FULiveDemo/AppSupportFiles/Info.plist deleted file mode 100644 index 2709909f..00000000 --- a/FULiveDemo/AppSupportFiles/Info.plist +++ /dev/null @@ -1,65 +0,0 @@ - - - - - CFBundleAllowMixedLocalizations - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - FULiveDemo - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLocalizations - - en - - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - ITSAppUsesNonExemptEncryption - - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSCameraUsageDescription - 请授权访问您的相机 - NSMicrophoneUsageDescription - 请授权访问您的麦克风 - NSPhotoLibraryAddUsageDescription - 请授权访问您的相册 - NSPhotoLibraryUsageDescription - 请授权访问您的相册 - UIFileSharingEnabled - - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UIRequiresFullScreen - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - - - diff --git a/FULiveDemo/AppSupportFiles/en.lproj/InfoPlist.strings b/FULiveDemo/AppSupportFiles/en.lproj/InfoPlist.strings deleted file mode 100644 index c44577df..00000000 --- a/FULiveDemo/AppSupportFiles/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,14 +0,0 @@ -/* - InfoPlist.strings - FULiveDemo - - Created by 孙慕 on 2019/10/30. - Copyright © 2019 FaceUnity. All rights reserved. -*/ -//{ - - NSCameraUsageDescription = "Please authorize access to your camera"; - NSMicrophoneUsageDescription = "Please authorize access to your microphone"; - NSPhotoLibraryAddUsageDescription ="Please authorize access to your photo album"; - NSPhotoLibraryUsageDescription = "Please authorize access to your photo album"; -//} diff --git a/FULiveDemo/AppSupportFiles/en.lproj/Localizable.strings b/FULiveDemo/AppSupportFiles/en.lproj/Localizable.strings deleted file mode 100644 index c0c4fcf6..00000000 --- a/FULiveDemo/AppSupportFiles/en.lproj/Localizable.strings +++ /dev/null @@ -1,484 +0,0 @@ -/* - Localizable.strings - FULiveDemo - - Created by L on 2018/7/10. - Copyright © 2018年 L. All rights reserved. -*/ - -"FU Live Demo 特效版" = "FU Live Demo effects version"; - -"磨皮" = "Fine Blur" ; -"锐化" = "sharpen"; -"美白" = "Whiten" ; -"红润" = "Ruddy" ; -"亮眼" = "Eye Brighten" ; -"美牙" = "Tooth Whiten" ; -"大眼" = "Eye Enlarge" ; -"瘦脸" = "Cheek Thin" ; -"下巴" = "Chin" ; -"额头" = "Forehead" ; -"瘦鼻" = "Nose" ; -"嘴型" = "Mouth" ; - -"开眼角" = "Open eyes"; -"眼距" = "Eye distance"; -"眼睛角度" = "Eye angle"; -"长鼻" = "Long nose"; -"缩人中" = "Among people"; -"微笑嘴角" = "Smiling mouth"; -"去黑眼圈" = "Circles"; -"去法令纹" = "Wrinkles"; -"开眼角" = "Canthus"; -"眼距" = "Eye distance"; -"眼睛角度" = "Eye tilt"; -"长鼻" = " Length"; -"缩人中" = "Philtrum"; -"眼距" = "Eye distance"; -"锐化" = "Sharpen"; -"瘦颧骨" = "Cheekbone"; -"瘦下颌骨" = "Jawbone"; -"眉毛上下" = "Brow height"; -"眉间距" = "Brow space"; - -//滤镜 -"原图" = "Origin" ; -"自然1" = "Nature1" ; -"自然2" = "Nature2" ; -"自然3" = "Nature3" ; -"自然4" = "Nature4" ; -"自然5" = "Nature5" ; -"自然6" = "Nature6" ; -"自然7" = "Nature7" ; -"自然8" = "Nature8" ; -"自然9" = "Nature9" ; -"自然10" = "Nature10" ; -"自然11" = "Nature11" ; -"自然12" = "Nature12" ; - -"白亮1" = "Bright1"; -"白亮2" = "Bright2"; -"白亮3" = "Bright3"; -"白亮4" = "Bright4"; -"白亮5" = "Bright5"; -"白亮6" = "Bright6"; -"白亮7" = "Bright7"; - -"粉嫩" = "Pink" ; -"粉嫩1" = "Pink1" ; -"粉嫩2" = "Pink2" ; -"粉嫩3" = "Pink3" ; -"粉嫩4" = "Pink4" ; -"粉嫩5" = "Pink5" ; -"粉嫩6" = "Pink6" ; -"粉嫩7" = "Pink7" ; -"粉嫩8" = "Pink8" ; - -"冷色调"= "Cold tone"; -"冷色调1"= "Cold tone1"; -"冷色调2"= "Cold tone2"; -"冷色调3"= "Cold tone3"; -"冷色调4"= "Cold tone4"; -"冷色调5"= "Cold tone5"; -"冷色调6"= "Cold tone6"; -"冷色调7"= "Cold tone7"; -"冷色调8"= "Cold tone8"; -"冷色调9"= "Cold tone9"; -"冷色调10"= "Cold tone10"; -"冷色调11"= "Cold tone11"; - -"暖色调"= "Warm tone"; -"暖色调1"= "Warm tone1"; -"暖色调2"= "Warm tone2"; - -"个性1" = "personality1"; -"个性2" = "personality2"; -"个性3" = "personality3"; -"个性4" = "personality4"; -"个性5" = "personality5"; -"个性6" = "personality6"; -"个性7" = "personality7"; -"个性8" = "personality8"; -"个性9" = "personality9"; -"个性10" = "personality10"; -"个性11" = "personality11"; -"小清新" = "fresh"; -"小清新1" = "fresh1"; -"小清新2" = "fresh2"; -"小清新3" = "fresh3"; -"小清新4" = "fresh4"; -"小清新5" = "fresh5"; -"小清新6" = "fresh6"; -"黑白1" = "Fade1" ; -"黑白2" = "Fade2" ; -"黑白3" = "Fade3" ; -"黑白4" = "Fade4" ; - -"质感灰1" = "Texture grey1"; -"质感灰2" = "Texture grey2"; -"质感灰3" = "Texture grey3"; -"质感灰4" = "Texture grey4"; -"质感灰5" = "Texture grey5"; -"质感灰6" = "Texture grey6"; -"质感灰7" = "Texture grey7"; -"质感灰8" = "Texture grey8"; - -"蜜桃1" = "Peach1"; -"蜜桃2" = "Peach2"; -"蜜桃3" = "Peach3"; -"蜜桃4" = "Peach4"; -"蜜桃5" = "Peach5"; -"蜜桃6" = "Peach6"; -"蜜桃7" = "Peach7"; -"蜜桃8" = "Peach8"; - -"载入图片或视频" = "Load picture or video"; - -"红润" = "Ruddy" ; -"自定义" = "Customize" ; -"默认" = "Default" ; -"女神" = "Fairy" ; -"网红" = "Belle" ; -"自然" = "Nature" ; -//"长脸专属" = "Long face"; -//"圆脸专属" = "Circle face"; -//"清晰磨皮" = "Light Blur mode" ; -//"朦胧磨皮" = "Heavy Blur mode" ; -//"精细磨皮" = "Fine Blur mode" ; - -"美肤" = "Skin" ; -"美型" = "Reshape" ; -"滤镜" = "Filter" ; -"轻美妆" = "lightMakeup" ; -"桃花" = "peach"; -"西柚" = "grapefruit"; -"清透" = "clear"; -"男友" = "boyfriend"; -"赤茶妆" = "redtea"; -"冬日妆" = "winter"; -"奶油妆" = "cream"; -"恢复" = "recover"; -"v脸" = "V face"; -"窄脸" = "Narrow Face"; -"短脸" = "Short Face"; -"小脸" = "Small Face"; -"返回" = "back"; - -"美颜" = "Beautification" ; -"美妆" = "Make Up" ; -"Animoji" = "Animoji" ; -"道具贴纸" = "Sticker" ; -"AR面具" = "AR Mesh" ; -"表情识别" = "Expression" ; -"音乐滤镜" = "Music Filter" ; -"人像分割" = "Portrait segmentation" ; -"手势识别" = "Gesture" ; -"哈哈镜" = "FaceWarp" ; -"人像驱动" = "Dynamic Portrait" ; -"海报换脸" = "Face Fusion"; -"美发" = "Hair Color"; - -"AR面具高精度版" = "High-Precision AR Mesh"; - -"张嘴试试" = "Open Your Mouth"; -"鼓腮帮子" = "Puff Your Cheeks"; -"皱眉触发" = "Frown"; -"眨一眨眼" = "Blink"; -"嘟嘴试试" = "Give me a kiss"; -"微笑触发" = "Have a Smile"; -"吹气触发" = "Whistle"; - -"单手手指比心" = "Finger heart"; -"双手抱拳" = "Fist"; -"双手合十" = "Namaste"; -"双手比心" = "Heart_b"; -"竖个拇指" = "Thumb_up"; -"比个六" = "Shaka sign"; -"推出手掌" = "High five"; -"动漫滤镜" = "cartoon filter"; - -"双拳靠近脸颊卖萌" = "Holding fist"; -"转头触发" = "Swivel"; - -"未识别到人脸" = "No Face Tracking" ; - -"Performance_Preferred" = "Performance"; -"No_Face_Tracking" = "No Face Tracking"; -"Incomplete_face" = "Incomplete face"; -"sel_Photo" = "Photo"; -"Choose_photo_or_video_from_your_album" = "Choose from your album"; -"sel_Video" = "Video"; - -//美妆 -"口红" = "Lipstick"; -"腮红" = "Blush"; -"眉毛" = "Eyebrow"; -"眼影" = "Eye Shadow"; -"眼线" = "Eye Liner"; -"睫毛" = "Eyelash"; -"美瞳" = "Contact Lens"; - -"自定义" = "customize"; -"卸妆" = "remove"; -"桃花妆" = "peach"; -"雀斑妆" = "freckles"; -"朋克妆" = "punk."; -"保存图片失败" = "Failed"; -"图片已保存到相册" = "Successful"; -"保存视频失败" = "Failed"; -"视频已保存到相册" = "Successful"; - -"性感" = "Sexy"; -"甜美" = "sweet"; -"邻家" = "next-door"; -"欧美" = "European"; -"妩媚" = "Charming"; -"花花" = "flower"; -"硬汉" = "Tough guy"; -"星月" = "star"; -"珊瑚" = "coral"; -"仕女" = "Lady"; - -"粉底" = "Foundation"; -"雾面" = "Matte"; -"缎面" = "Satin"; -"苹果肌" = "Apple muscle"; -"扇形" = "sector"; -"眼角" = "canthus"; -"微醺" = "tipsy"; - -"柳叶眉" = "willow"; -"标准眉" = "standard"; -"小山眉" = "hill"; -"一字眉" = "horizontal"; -"扶形眉" = "Shaped"; -"日常风" = "daily"; -"日系风" = "Japanese"; - -"单色眼影" = "monochrome"; -"双色眼影Ⅰ" = "dichromatic Ⅰ"; -"双色眼影Ⅱ" = "dichromatic Ⅱ"; -"双色眼影Ⅲ" = "dichromatic Ⅲ"; -"三色眼影Ⅰ" = "Tricolor Ⅰ"; -"三色眼影Ⅱ" = "Tricolor Ⅱ"; -"三色眼影Ⅲ" = "Tricolor Ⅲ"; - -"猫眼" = "cats eye"; -"下垂眼" = "drooping eye"; -"拉开眼距" = "expand eye distance"; -"拉近眼距" = "shorten eye distance"; -"长眼" = "long eye"; -"圆眼" = "round eye"; - -"自然型Ⅰ" = "natural Ⅰ"; -"自然型Ⅱ" = "natural Ⅱ"; -"浓密型Ⅰ" = "denseness Ⅰ"; -"浓密型Ⅱ" = "denseness Ⅱ"; -"夸张型Ⅰ" = "hyperbole Ⅰ"; -"夸张型Ⅱ" = "hyperbole Ⅱ"; -"高光" = "highlight"; -"Ⅰ号" = "highlight I"; -"Ⅱ号" = "highlight Ⅱ"; -"阴影" = "shadow"; - -"润泽Ⅰ" = "Moist Ⅰ"; -"润泽Ⅱ" = "Moist Ⅱ"; -"珠光" = "Pearl"; -"咬唇" = "Bite lip"; - - -/* 海报融合 */ -"对准线框 正脸拍摄" = "Please take photos by positive face."; -"未检测出人脸,请重新上传" = "No face detected, please re-upload"; -"检测到多人,请选择一人进行换脸" = "Please select a face."; -"人脸偏转角度过大,请重新拍摄" = "please face face shooting."; -"人脸偏转角度过大,请重新选择" = "please face face shooting."; -"知道了" = "OK"; -"未检测出人脸,请重新拍摄" = "No face detected, please re-shoot"; -"人脸不全,请重新拍摄" = "Incomplete face, please reshoot"; -"人脸不全,请重新选择" = "Incomplete face, please select again"; - -/* 表情动图---异图 */ -"表情动图" = "Emotional Motion Map"; -"动动你的五官" = "Move your five senses"; -"精细调整" = "adjustment"; -"你还没有添加五官哦" = "You haven't added five senses yet"; -"不添加" = "Do not add"; -"去添加" = "To add"; -"返回后当前操作将不会保存哦" = "The current operation will not be saved after returning"; -"继续" = "Continue"; -"取消" = "Cancel"; -"道具保存成功" = "Projects are successfully preserved"; -"不能添加更多了哦~" = "Can't add more oh -"; - -"保存点位" = "Back to step up"; -"请选择以下五官至上方调整" = "Please select the following five senses to adjust to the top"; -"左眼" = "Left eye"; -"右眼" = "Right eye"; -"嘴巴" = "Mouth"; -"鼻子" = "Nose"; -"左眉毛" = "Left eyeb."; -"右眉毛" = "Right eyeb."; - -"暂无制作道具哦~" = "No props for the time being"; -"删除道具" = "Delete model"; -"重新编辑" = "re-edit"; -"确定删除所选中的道具?" = "Determine to delete the selected props? "; -"确定" = "Definite" ; -"全选" = "Select all"; -"删除" ="Delete"; -"删除(%ld)" ="Delete(%ld)"; - -// 一键变表情 -"一键变表情" = "Change expression"; -"对准线框,正脸拍摄" = "Align the wire frame, face shooting"; -"原图" = "Original"; -"微笑" = "smile"; -"露齿笑" = "Grinning"; -"大笑" = "laughing out loud"; -"左闭眼" = "L-closed"; -"右闭眼" = "R-closed"; -"生气" = "pissed off"; -"伤感" = "Sad"; -"左邪魅" = "Left evil"; -"右邪魅" = "Right evil"; -"人脸表情夸张,请正脸拍摄" = "Facial expression is exaggerated, please face the face"; -"返回后当前操作将不会被保存哦" = "The current operation will not be saved after returning."; -"请保持面部无夸张表情" = "Please keep your face without exaggerated expressions"; -"播放" = "Play"; -"加速" = "Quicken"; -"正在处理图片" = "Processing Pictures"; -"写实" = "Realistic"; -"漫画男" = "Comic boy"; -"漫画女" = "Comic girl"; -"萌版" = "Chibi version"; -/* 捏脸 */ -"Avatar 捏脸" = "Knead Face"; -"删除模型" = "Delete model"; -"新建模型" = "Create model"; -"编辑模型" = "update model"; -"发型" = "Hair style"; -"脸型" = "Face"; -"眼睛" = "Eyes"; -"嘴唇" = "Mouth"; -"鼻子" = "Nose"; -"自定义" = "Custom"; -"脸型长度" = "Face length"; -"脸颊宽度" = "Cheek width"; -"下颚宽度" = "Jaw width"; -"下巴高低" = "Jaw length"; -"眼睛位置" = "Eye position"; -"眼角高度" = "Canthus pos."; -"眼睛高低" = "Eye width"; -"眼睛宽窄" = "Eye length"; -"嘴部位置" = "Mouth pos."; -"上唇厚度" = "Upper lip thi."; -"下唇厚度" = "Down lip thi."; -"嘴唇宽度" = "Lip width"; -"鼻子位置" = "Nose position"; -"鼻翼宽窄" = "Nose width"; -"鼻头高低" = "Nose heigth"; -"是否将所有参数恢复到默认值" = "Reset all parameters to default?"; -"取消" = "Cancel"; -"确定" = "OK"; -"返回后当前操作将不会保存?" = "The current operation will not be saved after returning?"; - -"高精版" = "High"; -"极速版" = "Extreme"; -"开启高精版" = "Open High-quality Edition"; -"开启极速版" = "Open Extreme Edition"; - -//美体 -"美体" = "Body Shape"; -"瘦身" = "Body"; -"长腿" = "Leg"; -"细腰" = "Waist"; -"美肩" = "Shoulder"; -"美臀" = "Hip"; -"未检测到人体" = "No Body Tracking"; -"小头" = "Head shrink"; -"瘦腿" = "Thin leg"; - -//主模块 -"人脸特效" = "Face effects"; -"人体特效" = "Body effects"; -"搞笑大头" = "Funny big head"; -"全身Avatar" = "Whole-body avatar"; - -//美妆模块 -"减龄" = "Tender"; -"暖冬" = "Warm"; -"红枫" = "Maple"; -"少女" = "Maiden"; -"紫韵" = "Purple"; -"厌世猫" = "Cat"; -"人鱼" = "Mermaid"; -"初秋" = "Autumn"; -"千纸鹤" = "Crane"; -"超模" = "Model"; -"雏菊" = "Daisy"; -"港风" = "HK Style"; - -//其他 -"半身驱动" = "Half"; -"全身驱动" = "whole"; - - -"绿幕抠像" = "Green Screen Key"; -"抠像" = "Keying"; -"关键颜色" = "Key Color"; -"相似度" = "Similarity"; -"平滑" = "Smoothness"; -"祛色度" = "Transparency"; -"背景" = "Background segmentation"; -"科技" = "Technology"; - -"沙滩" = "Sand"; -"教室" = "Classroom"; -"请使用纯色背景拍摄,推荐绿色幕布效果最佳" = "Please use a solid background, a green screen is recommended for the best effect."; -"我知道了" = "I know."; - -/** - * 检测手势 - */ -"未检测到手势" = "No gesture tracking"; - -/** - * 绿慕 - */ -"水墨画" = "Ink"; -"森林" = "Forest"; -"白色区域为安全区域,不参与绿幕抠像" = "The white area is a safe area and does not participate in the green screen keying"; - -/** - * 精品贴纸 - */ -"精品贴纸" = "Exquisite sticker"; - -"下载失败" = "Download failed"; - -"蜜糖" = "Honey"; -"奶茶" = "Milk tea"; -"水波" = "Ripple"; -"鎏金" = "Gilding"; -"孔雀" = "Peacock"; -"星河" = "Milky way"; -"落目" = "Curtain"; -"极光" = "Aurora"; - - -"To use, cancel Presets first." = "To use %@, cancel \'Presets\' first."; - -"None" = "无"; -"Style1" = "Style1"; -"Style2" = "Style2"; -"Style3" = "Style3"; -"Style4" = "Style4"; -"Style5" = "Style5"; -"Style6" = "Style6"; -"Style7" = "Style7"; - -"presets" = "Presets"; -"Content service" = "Content service"; - -"该功能只支持在高端机使用" = "%@ is only supported on high-end devices"; diff --git a/FULiveDemo/AppSupportFiles/main.m b/FULiveDemo/AppSupportFiles/main.m deleted file mode 100644 index 1dcf6b48..00000000 --- a/FULiveDemo/AppSupportFiles/main.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// main.m -// FULiveDemo -// -// Created by L on 2018/1/31. -// Copyright © 2018年 L. All rights reserved. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/FULiveDemo/AppSupportFiles/zh-Hans.lproj/InfoPlist.strings b/FULiveDemo/AppSupportFiles/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index ea712410..00000000 --- a/FULiveDemo/AppSupportFiles/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1,7 +0,0 @@ -/* - InfoPlist.strings - FULiveDemo - - Created by 孙慕 on 2019/10/30. - Copyright © 2019 FaceUnity. All rights reserved. -*/ diff --git a/FULiveDemo/AppSupportFiles/zh-Hans.lproj/LaunchScreen.strings b/FULiveDemo/AppSupportFiles/zh-Hans.lproj/LaunchScreen.strings deleted file mode 100644 index 8b137891..00000000 --- a/FULiveDemo/AppSupportFiles/zh-Hans.lproj/LaunchScreen.strings +++ /dev/null @@ -1 +0,0 @@ - diff --git a/FULiveDemo/AppSupportFiles/zh-Hans.lproj/Localizable.strings b/FULiveDemo/AppSupportFiles/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index e3b0a02e..00000000 --- a/FULiveDemo/AppSupportFiles/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,186 +0,0 @@ -/* - Localizable.strings - FULiveDemo - - Created by L on 2018/7/10. - Copyright © 2018年 L. All rights reserved. -*/ - -"FU Live Demo 特效版" = "FU Live Demo 特效版"; - -"磨皮" = "磨皮"; - -"美颜" = "美颜"; - -"美妆" = "美妆" ; -"Animoji" = "Animoji" ; -"道具贴纸" = "道具贴纸" ; -"AR面具" = "AR面具" ; -"表情识别" = "表情识别" ; -"音乐滤镜" = "音乐滤镜" ; -"背景分割" = "背景分割" ; -"手势识别" = "手势识别" ; -"哈哈镜" = "哈哈镜" ; -"人像驱动" = "人像驱动" ; -"海报换脸" = "海报换脸"; -"美发" = "美发"; - -"AR面具高精度版" = "AR面具高精度版"; - -"张嘴试试" = "张嘴试试"; -"鼓腮帮子" = "鼓腮帮子"; -"皱眉触发" = "皱眉触发"; -"眨一眨眼" = "眨一眨眼"; -"嘟嘴试试" = "嘟嘴试试"; -"微笑触发" = "微笑触发"; -"吹气触发" = "吹气触发"; -"转头触发" = "转头触发"; -"单手手指比心" = "单手手指比心"; -"双手抱拳" = "双手抱拳"; -"双手合十" = "双手合十"; -"双手比心" = "双手比心"; -"竖个拇指" = "竖个拇指"; -"比个六" = "比个六"; -"推出手掌" = "推出手掌"; -"动漫滤镜" = "动漫滤镜"; - -"双拳靠近脸颊卖萌" = "双拳靠近脸颊卖萌"; -"Performance_Preferred" = "性能优先"; -"No_Face_Tracking" = "未检测到人脸"; -"Incomplete_face" = "人脸不完整"; -"sel_Photo" = "选择图片"; -"Choose_photo_or_video_from_your_album" = "请从相册中选择图片或视频"; -"sel_Video" = "选择视频"; - -//美妆 -"口红" = "口红"; -"腮红" = "腮红"; -"眉毛" = "眉毛"; -"眼影" = "眼影"; -"眼线" = "眼线"; -"睫毛" = "睫毛"; -"美瞳" = "美瞳"; - -"自定义" = "自定义"; -"卸妆" = "卸妆"; -"桃花妆" = "桃花妆"; -"雀斑妆" = "雀斑妆"; -"朋克妆" = "朋克妆"; - -"保存图片失败" = "保存图片失败"; -"图片已保存到相册" = "图片已保存到相册"; -"保存视频失败" = "保存视频失败"; -"视频已保存到相册" = "视频已保存到相册"; - -/* 海报融合 */ -"对准线框 正脸拍摄" = "对准线框 正脸拍摄"; -"未检测出人脸,请重新上传" = "未检测出人脸,请重新上传"; -"检测到多人,请选择一人进行换脸" = "检测到多人,请选择一人进行换脸"; -"人脸偏转角度过大,请重新拍摄" = "人脸偏转角度过大,请重新拍摄"; -"人脸偏转角度过大,请重新选择" = "人脸偏转角度过大,请重新选择"; -"知道了" = "知道了"; -"未检测出人脸,请重新拍摄" = "未检测出人脸,请重新拍摄"; -"人脸不全,请重新拍摄" = "人脸不全,请重新拍摄"; -"人脸不全,请重新选择" = "人脸不全,请重新选择"; - -/* 表情动图---异图 */ - -"表情动图" = "表情动图"; -"动动你的五官" = "动动你的五官"; -"精细调整" = "精细调整"; -"你还没有添加五官哦" = "你还没有添加五官哦"; -"不添加" = "不添加"; -"去添加" = "去添加"; -"返回后当前操作将不会保存哦" = "返回后当前操作将不会保存哦"; -"继续" = "继续" ; -"取消" = "取消"; -"道具保存成功" = "道具保存成功"; -"不能添加更多了哦~" = "不能添加更多了哦~"; - -"返回上步" = "返回上步"; -"请选择以下五官至上方调整" = "请选择以下五官至上方调整"; -"左眼" = "左眼" ; -"右眼" = "右眼"; -"嘴巴" = "嘴巴" ; -"鼻子" = "鼻子"; -"左眉毛" = "左眉毛"; -"右眉毛" = "右眉毛"; - -"暂无制作道具哦~" = "暂无制作道具哦~"; -"确定删除所选中的道具?" = "确定删除所选中的道具?"; -"确定" = "确定" ; -"全选" = "全选"; -"删除" ="删除"; -"删除(%ld)" ="删除(%ld)"; - -// 一键变表情 -"一键变表情" = "一键变表情"; -"对准线框,正脸拍摄" = "对准线框,正脸拍摄"; -"原图" = "原图"; -"微笑" = "微笑"; -"露齿笑" = "露齿笑"; -"大笑" = "大笑"; -"左闭眼" = "左闭眼"; -"右闭眼" = "右闭眼"; -"生气" = "生气"; -"伤感" = "伤感"; -"左邪魅" = "左邪魅"; -"右邪魅" = "右邪魅"; -"人脸表情夸张,请正脸拍摄" = "人脸表情夸张,请正脸拍摄"; -"返回后当前操作将不会被保存哦" = "返回后当前操作将不会被保存哦"; -"请保持面部无夸张表情" = "请保持面部无夸张表情"; -"播放" = "播放"; -"加速" = "加速"; -"正在处理图片" = "正在处理图片"; - - -"高精版" = "高精版"; -"极速版" = "极速版"; -"开启高精版" = "开启高精版"; -"开启高精版" = "开启高精版"; -"美体" = "美体"; - -/** - * 检测手势 - */ -"未检测到手势" = "未检测到手势"; - -/** - * 绿慕 - */ -"水墨画" = "水墨画"; -"森林" = "森林"; -"白色区域为安全区域,不参与绿幕抠像" = "白色区域为安全区域,不参与绿幕抠像"; - -/** - * 精品贴纸 - */ -"精品贴纸" = "精品贴纸"; - -"下载失败" = "下载失败"; - -"全身Avatar" = "全身Avatar"; - -"蜜糖" = "蜜糖"; -"奶茶" = "奶茶"; -"水波" = "水波"; -"鎏金" = "鎏金"; -"孔雀" = "孔雀"; -"星河" = "星河"; -"落目" = "落目"; -"极光" = "极光"; - -"To use, cancel Presets first." = "使用%@先取消\'风格推荐\'"; - -"None" = "无"; -"Style1" = "风格1"; -"Style2" = "风格2"; -"Style3" = "风格3"; -"Style4" = "风格4"; -"Style5" = "风格5"; -"Style6" = "风格6"; -"Style7" = "风格7"; -"presets" = "风格推荐"; -"Content service" = "内容服务"; - -"该功能只支持在高端机使用" = "%@功能仅支持支持在高端机使用"; diff --git a/FULiveDemo/Application/AppDelegate.h b/FULiveDemo/Application/AppDelegate.h new file mode 100644 index 00000000..22b1e3fc --- /dev/null +++ b/FULiveDemo/Application/AppDelegate.h @@ -0,0 +1,15 @@ +// +// AppDelegate.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/21. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow * window; + +@end + diff --git a/FULiveDemo/Application/AppDelegate.m b/FULiveDemo/Application/AppDelegate.m new file mode 100644 index 00000000..f27aab21 --- /dev/null +++ b/FULiveDemo/Application/AppDelegate.m @@ -0,0 +1,51 @@ +// +// AppDelegate.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/21. +// + +#import "AppDelegate.h" + +#import "FUNavigationController.h" +#import "FUHomepageViewController.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + [self.window makeKeyAndVisible]; + + FUHomepageViewController *homepageController = [[FUHomepageViewController alloc] init]; + FUNavigationController *navigationController = [[FUNavigationController alloc] initWithRootViewController:homepageController]; + self.window.rootViewController = navigationController; + + return YES; +} + +/// 绿幕和人像分割特殊处理 + +- (void)applicationWillResignActive:(UIApplication *)application { + if ([FURenderKit shareRenderKit].greenScreen.videoPath) { + [[FURenderKit shareRenderKit].greenScreen stopVideoDecode]; + } + if ([FURenderKit shareRenderKit].segmentation.videoPath) { + [[FURenderKit shareRenderKit].segmentation stopVideoDecode]; + } +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + if ([FURenderKit shareRenderKit].greenScreen.videoPath) { + [[FURenderKit shareRenderKit].greenScreen startVideoDecode]; + } + if ([FURenderKit shareRenderKit].segmentation.videoPath) { + [[FURenderKit shareRenderKit].segmentation startVideoDecode]; + } +} + +@end diff --git a/FULiveDemo/Assets.xcassets/Others/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/Contents.json rename to FULiveDemo/Application/Assets.xcassets/ARMask/Contents.json diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/baozi.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/baozi.imageset/Contents.json new file mode 100644 index 00000000..c7f20391 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/baozi.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "baozi.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/baozi.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/baozi.imageset/baozi.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/baozi.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/baozi.imageset/baozi.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/bluebird.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/bluebird.imageset/Contents.json new file mode 100644 index 00000000..977e1bfa --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/bluebird.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bluebird.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/bluebird.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/bluebird.imageset/bluebird.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/bluebird.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/bluebird.imageset/bluebird.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/fenhudie.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/fenhudie.imageset/Contents.json new file mode 100644 index 00000000..1acac7a7 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/fenhudie.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fenhudie.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/fenhudie.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/fenhudie.imageset/fenhudie.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/fenhudie.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/fenhudie.imageset/fenhudie.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/lanhudie.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/lanhudie.imageset/Contents.json new file mode 100644 index 00000000..9691c4da --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/lanhudie.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lanhudie.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/lanhudie.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/lanhudie.imageset/lanhudie.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/lanhudie.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/lanhudie.imageset/lanhudie.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/tiger.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger.imageset/Contents.json new file mode 100644 index 00000000..1a7223bf --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "tiger.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger.imageset/tiger.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/tiger.imageset/tiger.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_bai.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_bai.imageset/Contents.json new file mode 100644 index 00000000..e42eb70f --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_bai.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "tiger_bai.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_bai.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_bai.imageset/tiger_bai.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_bai.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/tiger_bai.imageset/tiger_bai.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_huang.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_huang.imageset/Contents.json new file mode 100644 index 00000000..7da2f5cb --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_huang.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "tiger_huang.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_huang.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/tiger_huang.imageset/tiger_huang.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_huang.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/tiger_huang.imageset/tiger_huang.png diff --git a/FULiveDemo/Application/Assets.xcassets/ARMask/xiongmao.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ARMask/xiongmao.imageset/Contents.json new file mode 100644 index 00000000..a10bd8e2 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ARMask/xiongmao.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiongmao.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/xiongmao.png" b/FULiveDemo/Application/Assets.xcassets/ARMask/xiongmao.imageset/xiongmao.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/xiongmao.png" rename to FULiveDemo/Application/Assets.xcassets/ARMask/xiongmao.imageset/xiongmao.png diff --git a/FULiveDemo/Assets.xcassets/Poster/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Animoji/Contents.json diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/baihu_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/baihu_Animoji.imageset/Contents.json new file mode 100644 index 00000000..af1d4ccc --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/baihu_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "baihu_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/baihu_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/baihu_Animoji.imageset/baihu_Animoji.png similarity index 100% rename from FULiveDemo/Resource/items/Animoji/baihu_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/baihu_Animoji.imageset/baihu_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/baimao_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/baimao_Animoji.imageset/Contents.json new file mode 100644 index 00000000..1796a63a --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/baimao_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "baimao_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/baimao_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/baimao_Animoji.imageset/baimao_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/baimao_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/baimao_Animoji.imageset/baimao_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/cartoon_princess_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/cartoon_princess_Animoji.imageset/Contents.json new file mode 100644 index 00000000..29606f04 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/cartoon_princess_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "cartoon_princess_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/cartoon_princess_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/cartoon_princess_Animoji.imageset/cartoon_princess_Animoji.png similarity index 100% rename from FULiveDemo/Resource/items/Animoji/cartoon_princess_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/cartoon_princess_Animoji.imageset/cartoon_princess_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/douniuquan_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/douniuquan_Animoji.imageset/Contents.json new file mode 100644 index 00000000..4af6e4d3 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/douniuquan_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "douniuquan_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/douniuquan_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/douniuquan_Animoji.imageset/douniuquan_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/douniuquan_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/douniuquan_Animoji.imageset/douniuquan_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/frog_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/frog_Animoji.imageset/Contents.json new file mode 100644 index 00000000..c1d58e77 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/frog_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "frog_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/frog_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/frog_Animoji.imageset/frog_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/frog_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/frog_Animoji.imageset/frog_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/hashiqi_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/hashiqi_Animoji.imageset/Contents.json new file mode 100644 index 00000000..60d92986 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/hashiqi_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hashiqi_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/hashiqi_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/hashiqi_Animoji.imageset/hashiqi_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/hashiqi_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/hashiqi_Animoji.imageset/hashiqi_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/hetun_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/hetun_Animoji.imageset/Contents.json new file mode 100644 index 00000000..38b9e662 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/hetun_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hetun_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/hetun_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/hetun_Animoji.imageset/hetun_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/hetun_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/hetun_Animoji.imageset/hetun_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/huangya_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/huangya_Animoji.imageset/Contents.json new file mode 100644 index 00000000..eff36de1 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/huangya_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "huangya_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/huangya_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/huangya_Animoji.imageset/huangya_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/huangya_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/huangya_Animoji.imageset/huangya_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/kaola_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/kaola_Animoji.imageset/Contents.json new file mode 100644 index 00000000..95e72041 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/kaola_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "kaola_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/kaola_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/kaola_Animoji.imageset/kaola_Animoji.png similarity index 100% rename from FULiveDemo/Resource/items/Animoji/kaola_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/kaola_Animoji.imageset/kaola_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/kuloutou_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/kuloutou_Animoji.imageset/Contents.json new file mode 100644 index 00000000..7964a3ce --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/kuloutou_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "kuloutou_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/kuloutou_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/kuloutou_Animoji.imageset/kuloutou_Animoji.png old mode 100755 new mode 100644 similarity index 100% rename from FULiveDemo/Resource/items/Animoji/kuloutou_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/kuloutou_Animoji.imageset/kuloutou_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/qgirl_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/qgirl_Animoji.imageset/Contents.json new file mode 100644 index 00000000..2c282603 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/qgirl_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "qgirl_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/qgirl_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/qgirl_Animoji.imageset/qgirl_Animoji.png similarity index 100% rename from FULiveDemo/Resource/items/Animoji/qgirl_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/qgirl_Animoji.imageset/qgirl_Animoji.png diff --git a/FULiveDemo/Application/Assets.xcassets/Animoji/wuxia_Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Animoji/wuxia_Animoji.imageset/Contents.json new file mode 100644 index 00000000..1824cab0 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Animoji/wuxia_Animoji.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "wuxia_Animoji.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Resource/items/Animoji/wuxia_Animoji.png b/FULiveDemo/Application/Assets.xcassets/Animoji/wuxia_Animoji.imageset/wuxia_Animoji.png similarity index 100% rename from FULiveDemo/Resource/items/Animoji/wuxia_Animoji.png rename to FULiveDemo/Application/Assets.xcassets/Animoji/wuxia_Animoji.imageset/wuxia_Animoji.png diff --git "a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/1024-\347\211\271\346\225\210\347\211\210.png" "b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/1024-\347\211\271\346\225\210\347\211\210.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/AppIcon.appiconset/1024-\347\211\271\346\225\210\347\211\210.png" rename to "FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/1024-\347\211\271\346\225\210\347\211\210.png" diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/152-152.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/152-152.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/152-152.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/152-152.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/167-167.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/167-167.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/167-167.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/167-167.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/20-20.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/20-20.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/20-20.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/20-20.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/29-29.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/29-29.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/29-29.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/29-29.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/40-41.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/40-41.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/40-41.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/40-41.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/40-42.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/40-42.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/40-42.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/40-42.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/58-59.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/58-59.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/58-59.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/58-59.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/76-76.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/76-76.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/76-76.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/76-76.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/80-81.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/80-81.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/80-81.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/80-81.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/Icon.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/Icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/Icon.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/Icon.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_29pt.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_29pt.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_29pt.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_29pt.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png diff --git a/FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png b/FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png rename to FULiveDemo/Application/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/Contents.json b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/Contents.json rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/demo_icon_avatar_female.png b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/demo_icon_avatar_female.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/demo_icon_avatar_female.png rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/demo_icon_avatar_female.png diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/demo_icon_avatar_female@2x.png b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/demo_icon_avatar_female@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/demo_icon_avatar_female@2x.png rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/demo_icon_avatar_female@2x.png diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/demo_icon_avatar_female@3x.png b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/demo_icon_avatar_female@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_female.imageset/demo_icon_avatar_female@3x.png rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_female.imageset/demo_icon_avatar_female@3x.png diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/demo_icon_avatar_male.png b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/demo_icon_avatar_male.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/demo_icon_avatar_male.png rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/demo_icon_avatar_male.png diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/demo_icon_avatar_male@2x.png b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/demo_icon_avatar_male@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/demo_icon_avatar_male@2x.png rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/demo_icon_avatar_male@2x.png diff --git a/FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/demo_icon_avatar_male@3x.png b/FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/demo_icon_avatar_male@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Avatar/avatar_male.imageset/demo_icon_avatar_male@3x.png rename to FULiveDemo/Application/Assets.xcassets/BodyAvatar/avatar_male.imageset/demo_icon_avatar_male@3x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/Contents.json b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/Contents.json rename to FULiveDemo/Application/Assets.xcassets/BodyBeauty/Contents.json diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/Contents.json" new file mode 100644 index 00000000..e854e64f --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_little_head_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_little_head_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_little_head_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/demo_icon_little_head_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/demo_icon_little_head_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/demo_icon_little_head_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/demo_icon_little_head_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/demo_icon_little_head_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/demo_icon_little_head_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/demo_icon_little_head_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/demo_icon_little_head_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/demo_icon_little_head_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/demo_icon_little_head_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/demo_icon_little_head_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-0.imageset/demo_icon_little_head_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/Contents.json" new file mode 100644 index 00000000..5b8d8d47 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_little_head_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_little_head_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_little_head_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/demo_icon_little_head_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/demo_icon_little_head_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/demo_icon_little_head_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/demo_icon_little_head_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/demo_icon_little_head_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/demo_icon_little_head_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/demo_icon_little_head_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/demo_icon_little_head_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/demo_icon_little_head_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/demo_icon_little_head_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/demo_icon_little_head_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-1.imageset/demo_icon_little_head_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/Contents.json" new file mode 100644 index 00000000..d3515831 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_little_head_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_little_head_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_little_head_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/demo_icon_little_head_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/demo_icon_little_head_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/demo_icon_little_head_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/demo_icon_little_head_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/demo_icon_little_head_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/demo_icon_little_head_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/demo_icon_little_head_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/demo_icon_little_head_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/demo_icon_little_head_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/demo_icon_little_head_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/demo_icon_little_head_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-2.imageset/demo_icon_little_head_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/Contents.json" new file mode 100644 index 00000000..c6b7a536 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_little_head_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_little_head_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_little_head_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/demo_icon_little_head_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/demo_icon_little_head_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/demo_icon_little_head_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/demo_icon_little_head_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/demo_icon_little_head_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/demo_icon_little_head_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/demo_icon_little_head_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/demo_icon_little_head_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/demo_icon_little_head_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/demo_icon_little_head_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/demo_icon_little_head_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\345\260\217\345\244\264-3.imageset/demo_icon_little_head_sel_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/Contents.json" new file mode 100644 index 00000000..15627f38 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stovepipe_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stovepipe_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stovepipe_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/demo_icon_stovepipe_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/demo_icon_stovepipe_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/demo_icon_stovepipe_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/demo_icon_stovepipe_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/demo_icon_stovepipe_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/demo_icon_stovepipe_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/demo_icon_stovepipe_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/demo_icon_stovepipe_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/demo_icon_stovepipe_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/demo_icon_stovepipe_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/demo_icon_stovepipe_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-0.imageset/demo_icon_stovepipe_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/Contents.json" new file mode 100644 index 00000000..27a3e9de --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stovepipe_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stovepipe_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stovepipe_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/demo_icon_stovepipe_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/demo_icon_stovepipe_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/demo_icon_stovepipe_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/demo_icon_stovepipe_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/demo_icon_stovepipe_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/demo_icon_stovepipe_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/demo_icon_stovepipe_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/demo_icon_stovepipe_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/demo_icon_stovepipe_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/demo_icon_stovepipe_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/demo_icon_stovepipe_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-1.imageset/demo_icon_stovepipe_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/Contents.json" new file mode 100644 index 00000000..8e3d5ac7 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stovepipe_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stovepipe_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stovepipe_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/demo_icon_stovepipe_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/demo_icon_stovepipe_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/demo_icon_stovepipe_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/demo_icon_stovepipe_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/demo_icon_stovepipe_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/demo_icon_stovepipe_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/demo_icon_stovepipe_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/demo_icon_stovepipe_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/demo_icon_stovepipe_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/demo_icon_stovepipe_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/demo_icon_stovepipe_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-2.imageset/demo_icon_stovepipe_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/Contents.json" new file mode 100644 index 00000000..1f906963 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_stovepipe_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_stovepipe_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_stovepipe_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/demo_icon_stovepipe_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/demo_icon_stovepipe_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/demo_icon_stovepipe_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/demo_icon_stovepipe_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/demo_icon_stovepipe_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/demo_icon_stovepipe_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/demo_icon_stovepipe_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/demo_icon_stovepipe_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/demo_icon_stovepipe_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/demo_icon_stovepipe_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/demo_icon_stovepipe_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\205\277-3.imageset/demo_icon_stovepipe_sel_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/Contents.json" new file mode 100644 index 00000000..9086d989 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_slimming_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_slimming_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_slimming_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/demo_icon_slimming_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/demo_icon_slimming_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/demo_icon_slimming_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/demo_icon_slimming_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/demo_icon_slimming_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/demo_icon_slimming_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/demo_icon_slimming_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/demo_icon_slimming_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/demo_icon_slimming_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/demo_icon_slimming_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/demo_icon_slimming_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-0.imageset/demo_icon_slimming_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/Contents.json" new file mode 100644 index 00000000..3f85b209 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_slimming_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_slimming_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_slimming_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/demo_icon_slimming_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/demo_icon_slimming_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/demo_icon_slimming_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/demo_icon_slimming_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/demo_icon_slimming_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/demo_icon_slimming_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/demo_icon_slimming_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/demo_icon_slimming_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/demo_icon_slimming_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/demo_icon_slimming_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/demo_icon_slimming_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-1.imageset/demo_icon_slimming_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/Contents.json" new file mode 100644 index 00000000..d3b5b63d --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_slimming_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_slimming_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_slimming_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/demo_icon_slimming_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/demo_icon_slimming_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/demo_icon_slimming_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/demo_icon_slimming_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/demo_icon_slimming_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/demo_icon_slimming_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/demo_icon_slimming_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/demo_icon_slimming_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/demo_icon_slimming_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/demo_icon_slimming_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/demo_icon_slimming_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-2.imageset/demo_icon_slimming_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/Contents.json" new file mode 100644 index 00000000..8b852dd2 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_slimming_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_slimming_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_slimming_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/demo_icon_slimming_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/demo_icon_slimming_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/demo_icon_slimming_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/demo_icon_slimming_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/demo_icon_slimming_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/demo_icon_slimming_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/demo_icon_slimming_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/demo_icon_slimming_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/demo_icon_slimming_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/demo_icon_slimming_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/demo_icon_slimming_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\230\246\350\272\253-3.imageset/demo_icon_slimming_sel_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/Contents.json" new file mode 100644 index 00000000..f92fe98d --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_waist_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_waist_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_waist_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/demo_icon_thin_waist_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/demo_icon_thin_waist_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/demo_icon_thin_waist_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/demo_icon_thin_waist_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/demo_icon_thin_waist_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/demo_icon_thin_waist_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/demo_icon_thin_waist_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/demo_icon_thin_waist_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/demo_icon_thin_waist_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/demo_icon_thin_waist_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/demo_icon_thin_waist_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-0.imageset/demo_icon_thin_waist_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/Contents.json" new file mode 100644 index 00000000..dc14a2dd --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_waist_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_waist_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_waist_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/demo_icon_thin_waist_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/demo_icon_thin_waist_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/demo_icon_thin_waist_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/demo_icon_thin_waist_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/demo_icon_thin_waist_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/demo_icon_thin_waist_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/demo_icon_thin_waist_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/demo_icon_thin_waist_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/demo_icon_thin_waist_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/demo_icon_thin_waist_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/demo_icon_thin_waist_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-1.imageset/demo_icon_thin_waist_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/Contents.json" new file mode 100644 index 00000000..aaa2ed75 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_waist_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_waist_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_waist_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/demo_icon_thin_waist_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/demo_icon_thin_waist_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/demo_icon_thin_waist_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/demo_icon_thin_waist_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/demo_icon_thin_waist_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/demo_icon_thin_waist_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/demo_icon_thin_waist_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/demo_icon_thin_waist_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/demo_icon_thin_waist_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/demo_icon_thin_waist_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/demo_icon_thin_waist_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-2.imageset/demo_icon_thin_waist_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/Contents.json" new file mode 100644 index 00000000..ba65b5d9 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_waist_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_waist_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_waist_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/demo_icon_thin_waist_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/demo_icon_thin_waist_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/demo_icon_thin_waist_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/demo_icon_thin_waist_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/demo_icon_thin_waist_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/demo_icon_thin_waist_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/demo_icon_thin_waist_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/demo_icon_thin_waist_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/demo_icon_thin_waist_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/demo_icon_thin_waist_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/demo_icon_thin_waist_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\273\206\350\205\260-3.imageset/demo_icon_thin_waist_sel_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/Contents.json" new file mode 100644 index 00000000..cb94a487 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shoulder_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shoulder_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shoulder_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/demo_icon_shoulder_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/demo_icon_shoulder_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/demo_icon_shoulder_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/demo_icon_shoulder_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/demo_icon_shoulder_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/demo_icon_shoulder_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/demo_icon_shoulder_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/demo_icon_shoulder_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/demo_icon_shoulder_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/demo_icon_shoulder_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/demo_icon_shoulder_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-0.imageset/demo_icon_shoulder_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/Contents.json" new file mode 100644 index 00000000..28658440 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shoulder_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shoulder_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shoulder_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/demo_icon_shoulder_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/demo_icon_shoulder_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/demo_icon_shoulder_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/demo_icon_shoulder_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/demo_icon_shoulder_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/demo_icon_shoulder_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/demo_icon_shoulder_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/demo_icon_shoulder_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/demo_icon_shoulder_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/demo_icon_shoulder_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/demo_icon_shoulder_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-1.imageset/demo_icon_shoulder_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/Contents.json" new file mode 100644 index 00000000..41f6d2af --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shoulder_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shoulder_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shoulder_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/demo_icon_shoulder_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/demo_icon_shoulder_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/demo_icon_shoulder_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/demo_icon_shoulder_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/demo_icon_shoulder_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/demo_icon_shoulder_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/demo_icon_shoulder_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/demo_icon_shoulder_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/demo_icon_shoulder_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/demo_icon_shoulder_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/demo_icon_shoulder_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-2.imageset/demo_icon_shoulder_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/Contents.json" new file mode 100644 index 00000000..b6f2997e --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_shoulder_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_shoulder_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_shoulder_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/demo_icon_shoulder_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/demo_icon_shoulder_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/demo_icon_shoulder_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/demo_icon_shoulder_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/demo_icon_shoulder_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/demo_icon_shoulder_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/demo_icon_shoulder_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/demo_icon_shoulder_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/demo_icon_shoulder_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/demo_icon_shoulder_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/demo_icon_shoulder_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\202\251-3.imageset/demo_icon_shoulder_sel_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/Contents.json" new file mode 100644 index 00000000..71b2abaa --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_hip_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_hip_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_hip_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/demo_icon_hip_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/demo_icon_hip_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/demo_icon_hip_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/demo_icon_hip_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/demo_icon_hip_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/demo_icon_hip_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/demo_icon_hip_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/demo_icon_hip_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/demo_icon_hip_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/demo_icon_hip_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/demo_icon_hip_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-0.imageset/demo_icon_hip_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/Contents.json" new file mode 100644 index 00000000..5bdcb975 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_hip_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_hip_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_hip_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/demo_icon_hip_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/demo_icon_hip_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/demo_icon_hip_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/demo_icon_hip_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/demo_icon_hip_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/demo_icon_hip_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/demo_icon_hip_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/demo_icon_hip_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/demo_icon_hip_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/demo_icon_hip_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/demo_icon_hip_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-1.imageset/demo_icon_hip_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/Contents.json" new file mode 100644 index 00000000..db1a6ed2 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_hip_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_hip_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_hip_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/demo_icon_hip_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/demo_icon_hip_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/demo_icon_hip_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/demo_icon_hip_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/demo_icon_hip_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/demo_icon_hip_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/demo_icon_hip_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/demo_icon_hip_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/demo_icon_hip_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/demo_icon_hip_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/demo_icon_hip_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-2.imageset/demo_icon_hip_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/Contents.json" new file mode 100644 index 00000000..2e6099bb --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_hip_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_hip_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_hip_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/demo_icon_hip_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/demo_icon_hip_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/demo_icon_hip_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/demo_icon_hip_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/demo_icon_hip_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/demo_icon_hip_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/demo_icon_hip_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/demo_icon_hip_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/demo_icon_hip_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/demo_icon_hip_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/demo_icon_hip_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\347\276\216\350\207\200-3.imageset/demo_icon_hip_sel_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/Contents.json" new file mode 100644 index 00000000..acc843ab --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_leg_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_leg_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_leg_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/demo_icon_thin_leg_nor.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/demo_icon_thin_leg_nor.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/demo_icon_thin_leg_nor.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/demo_icon_thin_leg_nor.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/demo_icon_thin_leg_nor@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/demo_icon_thin_leg_nor@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/demo_icon_thin_leg_nor@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/demo_icon_thin_leg_nor@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/demo_icon_thin_leg_nor@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/demo_icon_thin_leg_nor@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/demo_icon_thin_leg_nor@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-0.imageset/demo_icon_thin_leg_nor@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/Contents.json" new file mode 100644 index 00000000..1731140a --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_leg_nor_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_leg_nor_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_leg_nor_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/demo_icon_thin_leg_nor_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/demo_icon_thin_leg_nor_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/demo_icon_thin_leg_nor_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/demo_icon_thin_leg_nor_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/demo_icon_thin_leg_nor_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/demo_icon_thin_leg_nor_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/demo_icon_thin_leg_nor_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/demo_icon_thin_leg_nor_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/demo_icon_thin_leg_nor_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/demo_icon_thin_leg_nor_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/demo_icon_thin_leg_nor_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-1.imageset/demo_icon_thin_leg_nor_open@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/Contents.json" new file mode 100644 index 00000000..10630f80 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_leg_sel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_leg_sel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_leg_sel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/demo_icon_thin_leg_sel.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/demo_icon_thin_leg_sel.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/demo_icon_thin_leg_sel.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/demo_icon_thin_leg_sel.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/demo_icon_thin_leg_sel@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/demo_icon_thin_leg_sel@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/demo_icon_thin_leg_sel@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/demo_icon_thin_leg_sel@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/demo_icon_thin_leg_sel@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/demo_icon_thin_leg_sel@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/demo_icon_thin_leg_sel@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-2.imageset/demo_icon_thin_leg_sel@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/Contents.json" new file mode 100644 index 00000000..64f4dd67 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_thin_leg_sel_open.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_thin_leg_sel_open@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_thin_leg_sel_open@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/demo_icon_thin_leg_sel_open.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/demo_icon_thin_leg_sel_open.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/demo_icon_thin_leg_sel_open.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/demo_icon_thin_leg_sel_open.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/demo_icon_thin_leg_sel_open@2x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/demo_icon_thin_leg_sel_open@2x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/demo_icon_thin_leg_sel_open@2x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/demo_icon_thin_leg_sel_open@2x.png" diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/demo_icon_thin_leg_sel_open@3x.png "b/FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/demo_icon_thin_leg_sel_open@3x.png" similarity index 100% rename from FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/demo_icon_thin_leg_sel_open@3x.png rename to "FULiveDemo/Application/Assets.xcassets/BodyBeauty/\351\225\277\350\205\277-3.imageset/demo_icon_thin_leg_sel_open@3x.png" diff --git a/FULiveDemo/Assets.xcassets/renderView/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/Contents.json rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/Contents.json diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/Contents.json new file mode 100644 index 00000000..e603c91a --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter1.imageset/fuzzytoonfilter1@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/Contents.json new file mode 100644 index 00000000..0a190fd2 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter2.imageset/fuzzytoonfilter2@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/Contents.json new file mode 100644 index 00000000..04c60e70 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter3.imageset/fuzzytoonfilter3@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/Contents.json new file mode 100644 index 00000000..df8c44b0 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter4.imageset/fuzzytoonfilter4@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/Contents.json new file mode 100644 index 00000000..540ee6c5 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter5.imageset/fuzzytoonfilter5@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/Contents.json new file mode 100644 index 00000000..f7b0561d --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter6.imageset/fuzzytoonfilter6@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/Contents.json new file mode 100644 index 00000000..be5072b2 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter7.imageset/fuzzytoonfilter7@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/Contents.json new file mode 100644 index 00000000..1c27751f --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fuzzytoonfilter8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fuzzytoonfilter8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fuzzytoonfilter8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@2x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@2x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@2x.png diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@3x.png b/FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@3x.png rename to FULiveDemo/Application/Assets.xcassets/ComicFilter/fuzzytoonfilter8.imageset/fuzzytoonfilter8@3x.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/Contents.json b/FULiveDemo/Application/Assets.xcassets/Contents.json similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Contents.json diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/Contents.json b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/Contents.json similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/Contents.json rename to FULiveDemo/Application/Assets.xcassets/DistortingMirror/Contents.json diff --git a/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp2.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp2.imageset/Contents.json new file mode 100644 index 00000000..c1900508 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "facewarp2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp2.png" b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp2.imageset/facewarp2.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp2.png" rename to FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp2.imageset/facewarp2.png diff --git a/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp3.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp3.imageset/Contents.json new file mode 100644 index 00000000..09a81a16 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "facewarp3.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp3.png" b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp3.imageset/facewarp3.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp3.png" rename to FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp3.imageset/facewarp3.png diff --git a/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp4.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp4.imageset/Contents.json new file mode 100644 index 00000000..61c2a166 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp4.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "facewarp4.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp4.png" b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp4.imageset/facewarp4.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp4.png" rename to FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp4.imageset/facewarp4.png diff --git a/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp5.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp5.imageset/Contents.json new file mode 100644 index 00000000..011c6270 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp5.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "facewarp5.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp5.png" b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp5.imageset/facewarp5.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp5.png" rename to FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp5.imageset/facewarp5.png diff --git a/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp6.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp6.imageset/Contents.json new file mode 100644 index 00000000..f937494c --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp6.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "facewarp6.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp6.png" b/FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp6.imageset/facewarp6.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp6.png" rename to FULiveDemo/Application/Assets.xcassets/DistortingMirror/facewarp6.imageset/facewarp6.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/Contents.json similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/Contents.json rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/Contents.json diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/future_warrior.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/future_warrior.imageset/Contents.json new file mode 100644 index 00000000..ce2cb19c --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/future_warrior.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "future_warrior.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/future_warrior.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/future_warrior.imageset/future_warrior.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/future_warrior.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/future_warrior.imageset/future_warrior.png diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/jet_mask.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/jet_mask.imageset/Contents.json new file mode 100644 index 00000000..fded7fe6 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/jet_mask.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "jet_mask.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/jet_mask.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/jet_mask.imageset/jet_mask.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/jet_mask.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/jet_mask.imageset/jet_mask.png diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/luhantongkuan_ztt_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/luhantongkuan_ztt_fu.imageset/Contents.json new file mode 100644 index 00000000..59c44e3c --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/luhantongkuan_ztt_fu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "luhantongkuan_ztt_fu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/luhantongkuan_ztt_fu.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/luhantongkuan_ztt_fu.imageset/luhantongkuan_ztt_fu.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/luhantongkuan_ztt_fu.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/luhantongkuan_ztt_fu.imageset/luhantongkuan_ztt_fu.png diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/qingqing_ztt_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/qingqing_ztt_fu.imageset/Contents.json new file mode 100644 index 00000000..e6d2cb4b --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/qingqing_ztt_fu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "qingqing_ztt_fu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/qingqing_ztt_fu.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/qingqing_ztt_fu.imageset/qingqing_ztt_fu.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/qingqing_ztt_fu.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/qingqing_ztt_fu.imageset/qingqing_ztt_fu.png diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/sdx2.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/sdx2.imageset/Contents.json new file mode 100644 index 00000000..5f072dbe --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/sdx2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "sdx2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/sdx2.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/sdx2.imageset/sdx2.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/sdx2.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/sdx2.imageset/sdx2.png diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaobianzi_zh_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaobianzi_zh_fu.imageset/Contents.json new file mode 100644 index 00000000..b2dee779 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaobianzi_zh_fu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaobianzi_zh_fu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaobianzi_zh_fu.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaobianzi_zh_fu.imageset/xiaobianzi_zh_fu.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaobianzi_zh_fu.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaobianzi_zh_fu.imageset/xiaobianzi_zh_fu.png diff --git a/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaoxueshen_ztt_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaoxueshen_ztt_fu.imageset/Contents.json new file mode 100644 index 00000000..60fc9c05 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaoxueshen_ztt_fu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xiaoxueshen_ztt_fu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaoxueshen_ztt_fu.png" b/FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaoxueshen_ztt_fu.imageset/xiaoxueshen_ztt_fu.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaoxueshen_ztt_fu.png" rename to FULiveDemo/Application/Assets.xcassets/ExpressionRecognition/xiaoxueshen_ztt_fu.imageset/xiaoxueshen_ztt_fu.png diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/Contents.json similarity index 100% rename from FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/save_nav_back.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/save_nav_back.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/save_nav_back.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/save_nav_back.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/save_nav_back@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/save_nav_back@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/save_nav_back@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/save_nav_back@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/save_nav_back@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/save_nav_back@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_back.imageset/save_nav_back@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_back.imageset/save_nav_back@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/face_contour.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/face_contour.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/face_contour.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/face_contour.png diff --git a/FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/face_contour@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/face_contour@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/face_contour@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/face_contour@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/face_contour@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/face_contour@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/face_contour.imageset/face_contour@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_contour.imageset/face_contour@3x.png diff --git "a/FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/Contents.json" b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/Contents.json similarity index 100% rename from "FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/Contents.json" rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/Contents.json diff --git "a/FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/\346\234\252\350\257\206\345\210\253icon.png" "b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/\346\234\252\350\257\206\345\210\253icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/\346\234\252\350\257\206\345\210\253icon.png" rename to "FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/\346\234\252\350\257\206\345\210\253icon.png" diff --git "a/FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/\346\234\252\350\257\206\345\210\253icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/\346\234\252\350\257\206\345\210\253icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/\346\234\252\350\257\206\345\210\253icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/\346\234\252\350\257\206\345\210\253icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/\346\234\252\350\257\206\345\210\253icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/\346\234\252\350\257\206\345\210\253icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Poster/\346\234\252\350\257\206\345\210\253icon.imageset/\346\234\252\350\257\206\345\210\253icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_no_tracked.imageset/\346\234\252\350\257\206\345\210\253icon@3x.png" diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/save_nav_save.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/save_nav_save.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/save_nav_save.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/save_nav_save.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/save_nav_save@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/save_nav_save@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/save_nav_save@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/save_nav_save@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/save_nav_save@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/save_nav_save@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_nav_save.imageset/save_nav_save@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save.imageset/save_nav_save@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_close.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_close.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/save_close.imageset/save_close.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/save_close.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_close.imageset/save_close.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/save_close.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_close.imageset/save_close@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/save_close@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_close.imageset/save_close@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/save_close@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_close.imageset/save_close@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/save_close@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_close.imageset/save_close@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_close.imageset/save_close@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_done.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_done.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/save_done.imageset/save_done.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/save_done.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_done.imageset/save_done.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/save_done.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_done.imageset/save_done@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/save_done@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_done.imageset/save_done@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/save_done@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/save_done.imageset/save_done@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/save_done@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/save_done.imageset/save_done@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_save_done.imageset/save_done@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster_tip.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_tip.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster_tip.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_tip.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster_tip.imageset/poster_tip.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_tip.imageset/poster_tip.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster_tip.imageset/poster_tip.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_tip.imageset/poster_tip.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster_tip.imageset/poster_tip@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_tip.imageset/poster_tip@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster_tip.imageset/poster_tip@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/face_fusion_tip.imageset/poster_tip@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1.imageset/image7.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1.imageset/image7.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1.imageset/image7.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1.imageset/image7.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/poster1_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/poster1_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/poster1_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/poster1_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/poster1_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/poster1_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/poster1_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/poster1_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/poster1_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/poster1_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_icon.imageset/poster1_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_icon.imageset/poster1_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/poster1_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/poster1_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/poster1_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/poster1_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/poster1_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/poster1_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/poster1_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/poster1_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/poster1_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/poster1_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster1_list.imageset/poster1_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster1_list.imageset/poster1_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2.imageset/image9.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2.imageset/image9.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2.imageset/image9.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2.imageset/image9.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/poster2_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/poster2_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/poster2_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/poster2_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/poster2_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/poster2_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/poster2_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/poster2_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/poster2_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/poster2_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_icon.imageset/poster2_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_icon.imageset/poster2_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/poster2_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/poster2_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/poster2_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/poster2_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/poster2_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/poster2_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/poster2_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/poster2_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/poster2_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/poster2_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster2_list.imageset/poster2_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster2_list.imageset/poster2_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3.imageset/image8.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3.imageset/image8.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3.imageset/image8.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3.imageset/image8.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/poster3_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/poster3_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/poster3_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/poster3_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/poster3_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/poster3_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/poster3_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/poster3_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/poster3_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/poster3_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_icon.imageset/poster3_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_icon.imageset/poster3_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/poster3_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/poster3_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/poster3_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/poster3_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/poster3_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/poster3_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/poster3_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/poster3_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/poster3_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/poster3_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster3_list.imageset/poster3_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster3_list.imageset/poster3_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4.imageset/image4.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4.imageset/image4.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4.imageset/image4.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4.imageset/image4.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/poster4_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/poster4_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/poster4_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/poster4_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/poster4_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/poster4_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/poster4_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/poster4_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/poster4_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/poster4_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_icon.imageset/poster4_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_icon.imageset/poster4_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/poster4_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/poster4_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/poster4_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/poster4_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/poster4_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/poster4_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/poster4_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/poster4_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/poster4_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/poster4_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster4_list.imageset/poster4_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster4_list.imageset/poster4_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5.imageset/image6.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5.imageset/image6.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5.imageset/image6.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5.imageset/image6.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/poster5_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/poster5_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/poster5_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/poster5_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/poster5_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/poster5_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/poster5_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/poster5_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/poster5_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/poster5_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_icon.imageset/poster5_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_icon.imageset/poster5_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/poster5_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/poster5_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/poster5_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/poster5_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/poster5_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/poster5_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/poster5_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/poster5_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/poster5_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/poster5_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster5_list.imageset/poster5_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster5_list.imageset/poster5_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6.imageset/image1.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6.imageset/image1.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6.imageset/image1.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6.imageset/image1.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/poster6_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/poster6_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/poster6_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/poster6_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/poster6_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/poster6_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/poster6_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/poster6_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/poster6_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/poster6_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_icon.imageset/poster6_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_icon.imageset/poster6_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/poster6_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/poster6_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/poster6_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/poster6_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/poster6_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/poster6_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/poster6_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/poster6_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/poster6_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/poster6_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster6_list.imageset/poster6_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster6_list.imageset/poster6_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7.imageset/image3.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7.imageset/image3.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7.imageset/image3.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7.imageset/image3.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/poster7_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/poster7_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/poster7_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/poster7_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/poster7_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/poster7_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/poster7_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/poster7_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/poster7_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/poster7_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_icon.imageset/poster7_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_icon.imageset/poster7_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/poster7_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/poster7_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/poster7_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/poster7_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/poster7_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/poster7_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/poster7_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/poster7_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/poster7_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/poster7_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster7_list.imageset/poster7_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster7_list.imageset/poster7_list@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8.imageset/image5.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8.imageset/image5.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8.imageset/image5.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8.imageset/image5.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/poster8_icon.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/poster8_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/poster8_icon.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/poster8_icon.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/poster8_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/poster8_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/poster8_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/poster8_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/poster8_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/poster8_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_icon.imageset/poster8_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_icon.imageset/poster8_icon@3x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/poster8_list.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/poster8_list.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/poster8_list.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/poster8_list.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/poster8_list@2x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/poster8_list@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/poster8_list@2x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/poster8_list@2x.png diff --git a/FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/poster8_list@3x.png b/FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/poster8_list@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Poster/poster8_list.imageset/poster8_list@3x.png rename to FULiveDemo/Application/Assets.xcassets/FaceFusion/poster8_list.imageset/poster8_list@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_flower_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_flower_740.imageset/Contents.json new file mode 100644 index 00000000..24f9b50d --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_flower_740.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ctrl_flower.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_flower.png" b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_flower_740.imageset/ctrl_flower.png similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_flower.png" rename to FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_flower_740.imageset/ctrl_flower.png diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_rain_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_rain_740.imageset/Contents.json new file mode 100644 index 00000000..67544669 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_rain_740.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ctrl_rain.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_rain.png" b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_rain_740.imageset/ctrl_rain.png similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_rain.png" rename to FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_rain_740.imageset/ctrl_rain.png diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_snow_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_snow_740.imageset/Contents.json new file mode 100644 index 00000000..c2c8b697 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_snow_740.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ctrl_snow.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_snow.png" b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_snow_740.imageset/ctrl_snow.png similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_snow.png" rename to FULiveDemo/Application/Assets.xcassets/GestureRecognition/ctrl_snow_740.imageset/ctrl_snow.png diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_cute.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_cute.imageset/Contents.json new file mode 100644 index 00000000..bbe45b7e --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_cute.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ssd_thread_cute.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_cute.png" b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_cute.imageset/ssd_thread_cute.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_cute.png" rename to FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_cute.imageset/ssd_thread_cute.png diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_korheart.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_korheart.imageset/Contents.json new file mode 100644 index 00000000..8dd19790 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_korheart.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ssd_thread_korheart.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_korheart.png" b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_korheart.imageset/ssd_thread_korheart.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_korheart.png" rename to FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_korheart.imageset/ssd_thread_korheart.png diff --git a/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_six.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_six.imageset/Contents.json new file mode 100644 index 00000000..a5de5df3 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_six.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ssd_thread_six.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_six.png" b/FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_six.imageset/ssd_thread_six.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_six.png" rename to FULiveDemo/Application/Assets.xcassets/GestureRecognition/ssd_thread_six.imageset/ssd_thread_six.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/Contents.json new file mode 100644 index 00000000..50115769 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/hair_color_1.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/hair_color_1.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/hair_color_1.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/hair_color_1.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/hair_color_1@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/hair_color_1@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/hair_color_1@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/hair_color_1@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/hair_color_1@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/hair_color_1@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/hair_color_1@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_1.imageset/hair_color_1@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/Contents.json new file mode 100644 index 00000000..c8381b6d --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/hair_color_2.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/hair_color_2.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/hair_color_2.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/hair_color_2.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/hair_color_2@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/hair_color_2@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/hair_color_2@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/hair_color_2@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/hair_color_2@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/hair_color_2@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/hair_color_2@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_2.imageset/hair_color_2@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/Contents.json new file mode 100644 index 00000000..e212ffc6 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/hair_color_3.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/hair_color_3.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/hair_color_3.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/hair_color_3.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/hair_color_3@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/hair_color_3@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/hair_color_3@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/hair_color_3@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/hair_color_3@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/hair_color_3@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/hair_color_3@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_3.imageset/hair_color_3@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/Contents.json new file mode 100644 index 00000000..6b5f0abf --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/hair_color_4.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/hair_color_4.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/hair_color_4.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/hair_color_4.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/hair_color_4@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/hair_color_4@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/hair_color_4@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/hair_color_4@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/hair_color_4@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/hair_color_4@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/hair_color_4@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_4.imageset/hair_color_4@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/Contents.json new file mode 100644 index 00000000..2b0623f2 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/hair_color_5.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/hair_color_5.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/hair_color_5.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/hair_color_5.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/hair_color_5@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/hair_color_5@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/hair_color_5@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/hair_color_5@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/hair_color_5@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/hair_color_5@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/hair_color_5@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_5.imageset/hair_color_5@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/Contents.json new file mode 100644 index 00000000..058360fd --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_6@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/hair_color_6.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/hair_color_6.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/hair_color_6.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/hair_color_6.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/hair_color_6@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/hair_color_6@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/hair_color_6@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/hair_color_6@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/hair_color_6@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/hair_color_6@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/hair_color_6@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_6.imageset/hair_color_6@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/Contents.json new file mode 100644 index 00000000..95e04c9b --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/hair_color_7.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/hair_color_7.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/hair_color_7.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/hair_color_7.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/hair_color_7@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/hair_color_7@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/hair_color_7@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/hair_color_7@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/hair_color_7@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/hair_color_7@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/hair_color_7@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_7.imageset/hair_color_7@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/Contents.json new file mode 100644 index 00000000..9f3ef731 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hair_color_8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hair_color_8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hair_color_8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/hair_color_8.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/hair_color_8.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/hair_color_8.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/hair_color_8.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/hair_color_8@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/hair_color_8@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/hair_color_8@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/hair_color_8@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/hair_color_8@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/hair_color_8@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/hair_color_8@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/hair_color_8.imageset/hair_color_8@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/Contents.json new file mode 100644 index 00000000..62274b38 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_gradualchangehair_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_gradualchangehair_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_gradualchangehair_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_01.imageset/icon_gradualchangehair_01@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/Contents.json new file mode 100644 index 00000000..44566490 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_gradualchangehair_02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_gradualchangehair_02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_gradualchangehair_02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_02.imageset/icon_gradualchangehair_02@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/Contents.json new file mode 100644 index 00000000..21dafc0b --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_gradualchangehair_04.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_gradualchangehair_04@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_gradualchangehair_04@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_03.imageset/icon_gradualchangehair_04@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/Contents.json new file mode 100644 index 00000000..c30789e0 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_gradualchangehair_05.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_gradualchangehair_05@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_gradualchangehair_05@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_04.imageset/icon_gradualchangehair_05@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/Contents.json new file mode 100644 index 00000000..ce23ed62 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_gradualchangehair_06.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_gradualchangehair_06@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_gradualchangehair_06@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@2x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@2x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@2x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@2x.png diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@3x.png" b/FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@3x.png similarity index 100% rename from "FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@3x.png" rename to FULiveDemo/Application/Assets.xcassets/HairBeauty/icon_gradualchangehair_05.imageset/icon_gradualchangehair_06@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Hilarious/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Hilarious/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/demo_icon_big_head.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/demo_icon_big_head.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/demo_icon_big_head.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/demo_icon_big_head.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/demo_icon_big_head@2x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/demo_icon_big_head@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/demo_icon_big_head@2x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/demo_icon_big_head@2x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/demo_icon_big_head@3x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/demo_icon_big_head@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp1.imageset/demo_icon_big_head@3x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp1.imageset/demo_icon_big_head@3x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/demo_icon_husky_face.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/demo_icon_husky_face.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/demo_icon_husky_face.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/demo_icon_husky_face.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/demo_icon_husky_face@2x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/demo_icon_husky_face@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/demo_icon_husky_face@2x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/demo_icon_husky_face@2x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/demo_icon_husky_face@3x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/demo_icon_husky_face@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp2.imageset/demo_icon_husky_face@3x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp2.imageset/demo_icon_husky_face@3x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/demo_icon_smiling_head.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/demo_icon_smiling_head.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/demo_icon_smiling_head.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/demo_icon_smiling_head.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/demo_icon_smiling_head@2x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/demo_icon_smiling_head@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/demo_icon_smiling_head@2x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/demo_icon_smiling_head@2x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/demo_icon_smiling_head@3x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/demo_icon_smiling_head@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp3.imageset/demo_icon_smiling_head@3x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp3.imageset/demo_icon_smiling_head@3x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/demo_icon_sausage_mouth.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/demo_icon_sausage_mouth.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/demo_icon_sausage_mouth.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/demo_icon_sausage_mouth.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/demo_icon_sausage_mouth@2x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/demo_icon_sausage_mouth@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/demo_icon_sausage_mouth@2x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/demo_icon_sausage_mouth@2x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/demo_icon_sausage_mouth@3x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/demo_icon_sausage_mouth@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp4.imageset/demo_icon_sausage_mouth@3x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp4.imageset/demo_icon_sausage_mouth@3x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp5.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp5.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp5.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp5.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp5.imageset/big_head_facewarp5.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp5.imageset/big_head_facewarp5.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp5.imageset/big_head_facewarp5.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp5.imageset/big_head_facewarp5.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/demo_icon_dark_circles.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/demo_icon_dark_circles.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/demo_icon_dark_circles.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/demo_icon_dark_circles.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/demo_icon_dark_circles@2x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/demo_icon_dark_circles@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/demo_icon_dark_circles@2x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/demo_icon_dark_circles@2x.png diff --git a/FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/demo_icon_dark_circles@3x.png b/FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/demo_icon_dark_circles@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/BigHead/big_head_facewarp6.imageset/demo_icon_dark_circles@3x.png rename to FULiveDemo/Application/Assets.xcassets/Hilarious/big_head_facewarp6.imageset/demo_icon_dark_circles@3x.png diff --git "a/FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/AR\351\235\242\345\205\267icon@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/Contents.json" new file mode 100644 index 00000000..5097adbd --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "AR面具icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "AR面具icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "AR面具icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon.png b/FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon.png diff --git a/FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@2x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@2x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@2x.png diff --git a/FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@3x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@3x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/ANIMOJIicon@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/Contents.json new file mode 100644 index 00000000..30c39b7d --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Homepage/Animoji.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "ANIMOJIicon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ANIMOJIicon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ANIMOJIicon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/Homepage/Contents.json b/FULiveDemo/Application/Assets.xcassets/Homepage/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Homepage/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/Contents.json new file mode 100644 index 00000000..27177dd7 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "图层1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "图层1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/\345\233\276\345\261\2021@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/\345\233\276\345\261\2021@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/\345\233\276\345\261\2021@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/\345\233\276\345\261\2021@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/\345\233\276\345\261\2021@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/\345\233\276\345\261\2021@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/\345\233\276\345\261\2021@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/homepage_background_top.imageset/\345\233\276\345\261\2021@3x.png" diff --git a/FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/bg_card_small_elements.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/bg_card_small_elements.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/bg_card_small_elements.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/bg_card_small_elements.png diff --git a/FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/bg_card_small_elements@2x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/bg_card_small_elements@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/bg_card_small_elements@2x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/bg_card_small_elements@2x.png diff --git a/FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/bg_card_small_elements@3x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/bg_card_small_elements@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/bg_card_small_elements.imageset/bg_card_small_elements@3x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_background.imageset/bg_card_small_elements@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/Contents.json new file mode 100644 index 00000000..fd2b3722 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bottomImage@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bottomImage@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/bottomImage@2x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/bottomImage@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/bottomImage@2x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/bottomImage@2x.png diff --git a/FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/bottomImage@3x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/bottomImage@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/bottomImage@3x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image.imageset/bottomImage@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/Contents.json new file mode 100644 index 00000000..6cf7390f --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bottomImage_gray@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bottomImage_gray@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/bottomImage_gray@2x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/bottomImage_gray@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/bottomImage_gray@2x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/bottomImage_gray@2x.png diff --git a/FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/bottomImage_gray@3x.png b/FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/bottomImage_gray@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/bottomImage_gray@3x.png rename to FULiveDemo/Application/Assets.xcassets/Homepage/homepage_cell_bottom_image_gray.imageset/bottomImage_gray@3x.png diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/Contents.json" new file mode 100644 index 00000000..7f2f3c5c --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "背景图片icon .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "背景图片icon @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "背景图片icon @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon .png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon .png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon .png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon .png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/\350\203\214\346\231\257\345\233\276\347\211\207icon @3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/Contents.json" new file mode 100644 index 00000000..e6b4445c --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/Contents.json" @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "filename" : "demo_icon_whole_body.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_whole_body@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/demo_icon_whole_body@2x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/Contents.json" new file mode 100644 index 00000000..3c8793fe --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "哈哈镜icon .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "哈哈镜icon @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "哈哈镜icon @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon .png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon .png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon .png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon .png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/\345\223\210\345\223\210\351\225\234icon @3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/Contents.json" new file mode 100644 index 00000000..391a62cb --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "赞icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "赞icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "赞icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/\350\265\236icon@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/Contents.json" new file mode 100644 index 00000000..d6f36397 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_photo_sticker.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_photo_sticker@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_photo_sticker@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/demo_icon_photo_sticker@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/Contents.json" new file mode 100644 index 00000000..ef6bfe55 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "海报换脸.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "海报换脸@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "海报换脸@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/\346\265\267\346\212\245\346\215\242\350\204\270@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/Contents.json" new file mode 100644 index 00000000..7de5f553 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_green_curtain.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_green_curtain@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_green_curtain@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/demo_icon_green_curtain@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/Contents.json" new file mode 100644 index 00000000..975e940f --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_body.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_body@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_body@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/demo_icon_body@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/Contents.json" new file mode 100644 index 00000000..8fc75596 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "美发.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美发@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美发@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/\347\276\216\345\217\221@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/Contents.json" new file mode 100644 index 00000000..5c7f56e2 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "美妆.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美妆@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美妆@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/\347\276\216\345\246\206@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/Contents.json" new file mode 100644 index 00000000..12a95471 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "美颜icon .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "美颜icon @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "美颜icon @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon .png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon .png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon .png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon .png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/\347\276\216\351\242\234icon @3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/Contents.json" new file mode 100644 index 00000000..3c10d7c6 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_yitu_figure.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_yitu_figure@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_yitu_figure@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/icon_yitu_figure@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/Contents.json" new file mode 100644 index 00000000..4b346a70 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "表情识别icon .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "表情识别icon @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "表情识别icon @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon .png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon .png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon .png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon .png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/\350\241\250\346\203\205\350\257\206\345\210\253icon @3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/Contents.json" new file mode 100644 index 00000000..03497007 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_texture_beauty.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_texture_beauty@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_texture_beauty@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/demo_icon_texture_beauty@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/Contents.json" new file mode 100644 index 00000000..2ba16630 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "道具贴纸icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "道具贴纸icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "道具贴纸icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/\351\201\223\345\205\267\350\264\264\347\272\270icon@3x.png" diff --git "a/FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/Contents.json" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/Contents.json" new file mode 100644 index 00000000..7be75b78 --- /dev/null +++ "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "音乐滤镜icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "音乐滤镜icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "音乐滤镜icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/\351\237\263\344\271\220\346\273\244\351\225\234icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/LightMakeup/Contents.json b/FULiveDemo/Application/Assets.xcassets/LightMakeup/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/LightMakeup/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/Contents.json new file mode 100644 index 00000000..dd0684e6 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_makeup_boyfriend.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_makeup_boyfriend@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_makeup_boyfriend@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@2x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@2x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@3x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@3x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_boyfriend.imageset/demo_makeup_boyfriend@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/Contents.json new file mode 100644 index 00000000..57a766f6 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_makeup_clear.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_makeup_clear@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_makeup_clear@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/demo_makeup_clear.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/demo_makeup_clear.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/demo_makeup_clear.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/demo_makeup_clear.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/demo_makeup_clear@2x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/demo_makeup_clear@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/demo_makeup_clear@2x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/demo_makeup_clear@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/demo_makeup_clear@3x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/demo_makeup_clear@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/demo_makeup_clear@3x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_clear.imageset/demo_makeup_clear@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/Contents.json new file mode 100644 index 00000000..995b4198 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_makeup_grapefruit.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_makeup_grapefruit@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_makeup_grapefruit@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@2x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@2x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@3x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@3x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_grapefruit.imageset/demo_makeup_grapefruit@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/Contents.json new file mode 100644 index 00000000..a9fcbeee --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_makeup_peachblossom.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_makeup_peachblossom@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_makeup_peachblossom@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@2x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@2x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@3x.png b/FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@3x.png rename to FULiveDemo/Application/Assets.xcassets/LightMakeup/demo_makeup_peachblossom.imageset/demo_makeup_peachblossom@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/MediaPicker/Contents.json b/FULiveDemo/Application/Assets.xcassets/MediaPicker/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MediaPicker/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/Contents.json new file mode 100644 index 00000000..7a5b1925 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "selectedBg.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "selectedBg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "selectedBg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/selectedBg.png b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/selectedBg.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/selectedBg.png rename to FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/selectedBg.png diff --git a/FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/selectedBg@2x.png b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/selectedBg@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/selectedBg@2x.png rename to FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/selectedBg@2x.png diff --git a/FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/selectedBg@3x.png b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/selectedBg@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/selectedBg@3x.png rename to FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_button_background.imageset/selectedBg@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/Contents.json new file mode 100644 index 00000000..b78e6b11 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "选择相册icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "选择相册icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "选择相册icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon.png" "b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon.png" rename to "FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_image_selection.imageset/\351\200\211\346\213\251\347\233\270\345\206\214icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/Contents.json new file mode 100644 index 00000000..818b5f24 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "视频icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "视频icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "视频icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/\350\247\206\351\242\221icon.png" "b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/\350\247\206\351\242\221icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/\350\247\206\351\242\221icon.png" rename to "FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/\350\247\206\351\242\221icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/\350\247\206\351\242\221icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/\350\247\206\351\242\221icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/\350\247\206\351\242\221icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/\350\247\206\351\242\221icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/\350\247\206\351\242\221icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/\350\247\206\351\242\221icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/\350\247\206\351\242\221icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/MediaPicker/media_picker_video_selection.imageset/\350\247\206\351\242\221icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/MusicFilter/Contents.json b/FULiveDemo/Application/Assets.xcassets/MusicFilter/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MusicFilter/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_01.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_01.imageset/Contents.json new file mode 100644 index 00000000..6f3c0193 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_01.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "douyin_01.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_01.png" b/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_01.imageset/douyin_01.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_01.png" rename to FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_01.imageset/douyin_01.png diff --git a/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_02.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_02.imageset/Contents.json new file mode 100644 index 00000000..1d03ebdb --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_02.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "douyin_02.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_02.png" b/FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_02.imageset/douyin_02.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_02.png" rename to FULiveDemo/Application/Assets.xcassets/MusicFilter/douyin_02.imageset/douyin_02.png diff --git a/FULiveDemo/Application/Assets.xcassets/Others/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Others/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/icon_yitu_add.png b/FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/icon_yitu_add.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/icon_yitu_add.png rename to FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/icon_yitu_add.png diff --git a/FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/icon_yitu_add@2x.png b/FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/icon_yitu_add@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/icon_yitu_add@2x.png rename to FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/icon_yitu_add@2x.png diff --git a/FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/icon_yitu_add@3x.png b/FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/icon_yitu_add@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/icon_yitu_add.imageset/icon_yitu_add@3x.png rename to FULiveDemo/Application/Assets.xcassets/Others/add_item.imageset/icon_yitu_add@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/Contents.json new file mode 100644 index 00000000..66808b63 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "返回icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "返回icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "返回icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/\350\277\224\345\233\236icon.png" "b/FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/\350\277\224\345\233\236icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/\350\277\224\345\233\236icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/\350\277\224\345\233\236icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/\350\277\224\345\233\236icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/\350\277\224\345\233\236icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/\350\277\224\345\233\236icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/\350\277\224\345\233\236icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/\350\277\224\345\233\236icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/\350\277\224\345\233\236icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/\350\277\224\345\233\236icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Others/back_item.imageset/\350\277\224\345\233\236icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/Contents.json new file mode 100644 index 00000000..be68c999 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "makeup_noitem.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "makeup_noitem@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "makeup_noitem@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/makeup_noitem.png b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/makeup_noitem.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/makeup_noitem.png rename to FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/makeup_noitem.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/makeup_noitem@2x.png b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/makeup_noitem@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/makeup_noitem@2x.png rename to FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/makeup_noitem@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/makeup_noitem@3x.png b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/makeup_noitem@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/makeup_noitem@3x.png rename to FULiveDemo/Application/Assets.xcassets/Others/cancel_item.imageset/makeup_noitem@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/Contents.json new file mode 100644 index 00000000..a05daa60 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "makeup_noitem_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "makeup_noitem_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "makeup_noitem_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/makeup_noitem_selected.png b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/makeup_noitem_selected.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/makeup_noitem_selected.png rename to FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/makeup_noitem_selected.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/makeup_noitem_selected@2x.png b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/makeup_noitem_selected@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/makeup_noitem_selected@2x.png rename to FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/makeup_noitem_selected@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/makeup_noitem_selected@3x.png b/FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/makeup_noitem_selected@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/makeup_noitem_selected@3x.png rename to FULiveDemo/Application/Assets.xcassets/Others/cancel_item_selected.imageset/makeup_noitem_selected@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/Contents.json new file mode 100644 index 00000000..0a642d9b --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "恢复-0.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "恢复-0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "恢复-0@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0.png" "b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0.png" new file mode 100644 index 00000000..735a75ea Binary files /dev/null and "b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0.png" differ diff --git "a/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0@2x.png" new file mode 100644 index 00000000..741e6be4 Binary files /dev/null and "b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0@2x.png" differ diff --git "a/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0@3x.png" new file mode 100644 index 00000000..5c176cd4 Binary files /dev/null and "b/FULiveDemo/Application/Assets.xcassets/Others/recover_item.imageset/\346\201\242\345\244\215-0@3x.png" differ diff --git a/FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/Contents.json new file mode 100644 index 00000000..22ce3441 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "删除icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "删除icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "删除icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/\345\210\240\351\231\244icon.png" "b/FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/\345\210\240\351\231\244icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/\345\210\240\351\231\244icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/\345\210\240\351\231\244icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/\345\210\240\351\231\244icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/\345\210\240\351\231\244icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/\345\210\240\351\231\244icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/\345\210\240\351\231\244icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/\345\210\240\351\231\244icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/\345\210\240\351\231\244icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/\345\210\240\351\231\244icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Others/reset_item.imageset/\345\210\240\351\231\244icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/QualitySticker/Contents.json b/FULiveDemo/Application/Assets.xcassets/QualitySticker/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/QualitySticker/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/sticker_cancel.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/sticker_cancel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/sticker_cancel.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/sticker_cancel.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/sticker_cancel@2x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/sticker_cancel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/sticker_cancel@2x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/sticker_cancel@2x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/sticker_cancel@3x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/sticker_cancel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_cancel.imageset/sticker_cancel@3x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_cancel.imageset/sticker_cancel@3x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/sticker_download.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/sticker_download.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/sticker_download.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/sticker_download.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/sticker_download@2x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/sticker_download@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/sticker_download@2x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/sticker_download@2x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/sticker_download@3x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/sticker_download@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_download.imageset/sticker_download@3x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_download.imageset/sticker_download@3x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/sticker_placeholder.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/sticker_placeholder.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/sticker_placeholder.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/sticker_placeholder.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/sticker_placeholder@2x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/sticker_placeholder@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/sticker_placeholder@2x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/sticker_placeholder@2x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/sticker_placeholder@3x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/sticker_placeholder@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_placeholder.imageset/sticker_placeholder@3x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_placeholder.imageset/sticker_placeholder@3x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/sticker_refresh.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/sticker_refresh.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/sticker_refresh.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/sticker_refresh.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/sticker_refresh@2x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/sticker_refresh@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/sticker_refresh@2x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/sticker_refresh@2x.png diff --git a/FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/sticker_refresh@3x.png b/FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/sticker_refresh@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Sticker/sticker_refresh.imageset/sticker_refresh@3x.png rename to FULiveDemo/Application/Assets.xcassets/QualitySticker/sticker_refresh.imageset/sticker_refresh@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Render/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/Contents.json new file mode 100644 index 00000000..4a4aa2fc --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "校准.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "校准@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "校准@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/\346\240\241\345\207\206.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/\346\240\241\345\207\206.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/\346\240\241\345\207\206.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/\346\240\241\345\207\206.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/\346\240\241\345\207\206@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/\346\240\241\345\207\206@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/\346\240\241\345\207\206@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/\346\240\241\345\207\206@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/\346\240\241\345\207\206@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/\346\240\241\345\207\206@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/\346\240\241\345\207\206@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_adjust.imageset/\346\240\241\345\207\206@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/Contents.json new file mode 100644 index 00000000..fcabb359 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "home icon .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "home icon @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "home icon @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/renderView/home icon.imageset/home icon .png b/FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/home icon .png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/home icon.imageset/home icon .png rename to FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/home icon .png diff --git a/FULiveDemo/Assets.xcassets/renderView/home icon.imageset/home icon @2x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/home icon @2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/home icon.imageset/home icon @2x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/home icon @2x.png diff --git a/FULiveDemo/Assets.xcassets/renderView/home icon.imageset/home icon @3x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/home icon @3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/home icon.imageset/home icon @3x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_back_home.imageset/home icon @3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/Contents.json new file mode 100644 index 00000000..1e3ed007 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "测试icon .png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "测试icon @2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "测试icon @3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/bugly.imageset/\346\265\213\350\257\225icon .png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/\346\265\213\350\257\225icon .png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/bugly.imageset/\346\265\213\350\257\225icon .png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/\346\265\213\350\257\225icon .png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/bugly.imageset/\346\265\213\350\257\225icon @2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/\346\265\213\350\257\225icon @2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/bugly.imageset/\346\265\213\350\257\225icon @2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/\346\265\213\350\257\225icon @2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/bugly.imageset/\346\265\213\350\257\225icon @3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/\346\265\213\350\257\225icon @3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/bugly.imageset/\346\265\213\350\257\225icon @3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_bugly.imageset/\346\265\213\350\257\225icon @3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/Contents.json new file mode 100644 index 00000000..2f3d8161 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "相机按钮.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "相机按钮@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "相机按钮@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/\347\233\270\346\234\272\346\214\211\351\222\256.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/\347\233\270\346\234\272\346\214\211\351\222\256.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/\347\233\270\346\234\272\346\214\211\351\222\256.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/\347\233\270\346\234\272\346\214\211\351\222\256.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_camera_capture.imageset/\347\233\270\346\234\272\346\214\211\351\222\256@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/Contents.json new file mode 100644 index 00000000..8bbc651d --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "相机icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "相机icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "相机icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/\347\233\270\346\234\272icon.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/\347\233\270\346\234\272icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/\347\233\270\346\234\272icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/\347\233\270\346\234\272icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/\347\233\270\346\234\272icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/\347\233\270\346\234\272icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/\347\233\270\346\234\272icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/\347\233\270\346\234\272icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/\347\233\270\346\234\272icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/\347\233\270\346\234\272icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/\347\233\270\346\234\272icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_camera_switch.imageset/\347\233\270\346\234\272icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/Contents.json new file mode 100644 index 00000000..88834d3a --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "明度条椭圆 icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "明度条椭圆 icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "明度条椭圆 icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting.imageset/\346\230\216\345\272\246\346\235\241\346\244\255\345\234\206 icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/Contents.json new file mode 100644 index 00000000..76e66f4c --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "月亮.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "月亮@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "月亮@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/\346\234\210\344\272\256.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/\346\234\210\344\272\256.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/\346\234\210\344\272\256.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/\346\234\210\344\272\256.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/\346\234\210\344\272\256@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/\346\234\210\344\272\256@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/\346\234\210\344\272\256@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/\346\234\210\344\272\256@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/\346\234\210\344\272\256@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/\346\234\210\344\272\256@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/\346\234\210\344\272\256@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting_mon.imageset/\346\234\210\344\272\256@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/Contents.json new file mode 100644 index 00000000..e49494fe --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "小太阳icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "小太阳icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "小太阳icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_lighting_sun.imageset/\345\260\217\345\244\252\351\230\263icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/Contents.json new file mode 100644 index 00000000..7fa7c5af --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_more.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_more@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_more@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/demo_icon_more.png b/FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/demo_icon_more.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/demo_icon_more.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/demo_icon_more.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/demo_icon_more@2x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/demo_icon_more@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/demo_icon_more@2x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/demo_icon_more@2x.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/demo_icon_more@3x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/demo_icon_more@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/demo_icon_more@3x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_more.imageset/demo_icon_more@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/Contents.json new file mode 100644 index 00000000..00b647d8 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "相册icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "相册icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "相册icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/\347\233\270\345\206\214icon.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/\347\233\270\345\206\214icon.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/\347\233\270\345\206\214icon.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/\347\233\270\345\206\214icon.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/\347\233\270\345\206\214icon@2x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/\347\233\270\345\206\214icon@2x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/\347\233\270\345\206\214icon@2x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/\347\233\270\345\206\214icon@2x.png" diff --git "a/FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/\347\233\270\345\206\214icon@3x.png" "b/FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/\347\233\270\345\206\214icon@3x.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/\347\233\270\345\206\214icon@3x.png" rename to "FULiveDemo/Application/Assets.xcassets/Render/render_picture.imageset/\347\233\270\345\206\214icon@3x.png" diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/Contents.json new file mode 100644 index 00000000..6034dbcd --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "play_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "play_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "play_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/play_icon.png b/FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/play_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/play_icon.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/play_icon.png diff --git a/FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/play_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/play_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/play_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/play_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/play_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/play_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/play_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_play.imageset/play_icon@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Contents.json new file mode 100644 index 00000000..2c64569f --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Replay_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Replay_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Replay_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Replay_icon.png b/FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Replay_icon.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Replay_icon.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Replay_icon.png diff --git a/FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Replay_icon@2x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Replay_icon@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Replay_icon@2x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Replay_icon@2x.png diff --git a/FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Replay_icon@3x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Replay_icon@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Replay_icon@3x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_replay.imageset/Replay_icon@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/Contents.json new file mode 100644 index 00000000..d190e23e --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_save.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_save@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_save@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/demo_icon_save.png b/FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/demo_icon_save.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/demo_icon_save.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/demo_icon_save.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/demo_icon_save@2x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/demo_icon_save@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/demo_icon_save@2x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/demo_icon_save@2x.png diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/demo_icon_save@3x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/demo_icon_save@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/demo_icon_save@3x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_save.imageset/demo_icon_save@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/Contents.json new file mode 100644 index 00000000..7cb7f7af --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_icon_add_to.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_icon_add_to@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_icon_add_to@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/demo_icon_add_to.png b/FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/demo_icon_add_to.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/demo_icon_add_to.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/demo_icon_add_to.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/demo_icon_add_to@2x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/demo_icon_add_to@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/demo_icon_add_to@2x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/demo_icon_add_to@2x.png diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/demo_icon_add_to@3x.png b/FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/demo_icon_add_to@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/demo_icon_add_to@3x.png rename to FULiveDemo/Application/Assets.xcassets/Render/render_select_media.imageset/demo_icon_add_to@3x.png diff --git a/FULiveDemo/Application/Assets.xcassets/Segmentation/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Segmentation/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend1_740.imageset/demo_icon_boyfriend_01@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend2_740.imageset/demo_icon_boyfriend_03@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/boyfriend3_740.imageset/demo_icon_boyfriend_02@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/gufeng_zh_fu.imageset/gufeng_zh_fu@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/hez_ztt_fu.imageset/hez_ztt_fu@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/human_outline_740.imageset/demo_icon_character_stroke@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/ice_lm_fu.imageset/ice_lm_fu@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/sea_lm_fu.imageset/sea_lm_fu@3x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/Contents.json rename to FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@2x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@2x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@2x.png diff --git a/FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@3x.png b/FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@3x.png rename to FULiveDemo/Application/Assets.xcassets/Segmentation/xiandai_ztt_fu.imageset/xiandai_ztt_fu@3x.png diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/CatSparks.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/CatSparks.imageset/CatSparks.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/CatSparks.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/CatSparks.imageset/CatSparks.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/CatSparks.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/CatSparks.imageset/Contents.json new file mode 100644 index 00000000..6fc3ea1d --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/CatSparks.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "CatSparks.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/DaisyPig.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/DaisyPig.imageset/Contents.json new file mode 100644 index 00000000..acb572df --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/DaisyPig.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "DaisyPig.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/DaisyPig.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/DaisyPig.imageset/DaisyPig.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/DaisyPig.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/DaisyPig.imageset/DaisyPig.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/fu_zh_fenshu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/fu_zh_fenshu.imageset/Contents.json new file mode 100644 index 00000000..1637a727 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/fu_zh_fenshu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fu_zh_fenshu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/fu_zh_fenshu.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/fu_zh_fenshu.imageset/fu_zh_fenshu.png similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/fu_zh_fenshu.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/fu_zh_fenshu.imageset/fu_zh_fenshu.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/newy1.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/newy1.imageset/Contents.json new file mode 100644 index 00000000..b78bef3e --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/newy1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "newy1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/newy1.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/newy1.imageset/newy1.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/newy1.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/newy1.imageset/newy1.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/redribbt.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/redribbt.imageset/Contents.json new file mode 100644 index 00000000..c9e7daa4 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/redribbt.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "redribbt.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/redribbt.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/redribbt.imageset/redribbt.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/redribbt.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/redribbt.imageset/redribbt.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/sdlr.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/sdlr.imageset/Contents.json new file mode 100644 index 00000000..e6125ad3 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/sdlr.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "sdlr.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlr.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/sdlr.imageset/sdlr.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlr.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/sdlr.imageset/sdlr.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/sdlu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/sdlu.imageset/Contents.json new file mode 100644 index 00000000..6c4af867 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/sdlu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "sdlu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlu.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/sdlu.imageset/sdlu.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlu.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/sdlu.imageset/sdlu.png diff --git a/FULiveDemo/Application/Assets.xcassets/Sticker/xlong_zh_fu.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/Sticker/xlong_zh_fu.imageset/Contents.json new file mode 100644 index 00000000..0441539e --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/Sticker/xlong_zh_fu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "xlong_zh_fu.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/xlong_zh_fu.png" b/FULiveDemo/Application/Assets.xcassets/Sticker/xlong_zh_fu.imageset/xlong_zh_fu.png old mode 100755 new mode 100644 similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/xlong_zh_fu.png" rename to FULiveDemo/Application/Assets.xcassets/Sticker/xlong_zh_fu.imageset/xlong_zh_fu.png diff --git a/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/Contents.json b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/Contents.json new file mode 100644 index 00000000..14340c34 --- /dev/null +++ b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/Contents.json @@ -0,0 +1,33 @@ +{ + "images" : [ + { + "filename" : "启动页320-480.png", + "idiom" : "iphone", + "scale" : "1x" + }, + { + "filename" : "启动页750-1334.png", + "idiom" : "iphone", + "scale" : "2x" + }, + { + "filename" : "启动页1125-2436.png", + "idiom" : "iphone", + "scale" : "3x" + }, + { + "filename" : "启动页768-1024.png", + "idiom" : "ipad", + "scale" : "1x" + }, + { + "filename" : "启动页1536-2048.png", + "idiom" : "ipad", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651125-2436.png" "b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\2651125-2436.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651125-2436.png" rename to "FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\2651125-2436.png" diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2048.png" "b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\2651536-2048.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2048.png" rename to "FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\2651536-2048.png" diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265320-480.png" "b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\265320-480.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265320-480.png" rename to "FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\265320-480.png" diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265750-1334.png" "b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\265750-1334.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265750-1334.png" rename to "FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\265750-1334.png" diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1024.png" "b/FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\265768-1024.png" similarity index 100% rename from "FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1024.png" rename to "FULiveDemo/Application/Assets.xcassets/launch_image.imageset/\345\220\257\345\212\250\351\241\265768-1024.png" diff --git a/FULiveDemo/Application/Info.plist b/FULiveDemo/Application/Info.plist new file mode 100644 index 00000000..4a0e87ba --- /dev/null +++ b/FULiveDemo/Application/Info.plist @@ -0,0 +1,15 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIFileSharingEnabled + + UIStatusBarStyle + UIStatusBarStyleDefault + + diff --git a/FULiveDemo/Application/LaunchScreen.storyboard b/FULiveDemo/Application/LaunchScreen.storyboard new file mode 100644 index 00000000..5ceba9e4 --- /dev/null +++ b/FULiveDemo/Application/LaunchScreen.storyboard @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FULiveDemo/Application/PrefixHeader.pch b/FULiveDemo/Application/PrefixHeader.pch new file mode 100644 index 00000000..6bcd3798 --- /dev/null +++ b/FULiveDemo/Application/PrefixHeader.pch @@ -0,0 +1,24 @@ +// +// PrefixHeader.pch +// FULiveDemo +// +// Created by 项林平 on 2022/7/22. +// + +#ifndef PrefixHeader_pch +#define PrefixHeader_pch + +// Include any system framework and library headers here that should be included in all compilation units. +// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. +#import +#import +#import +#import +#import + +#import "FULiveDefine.h" +#import "FUUtility.h" +#import "FURenderKitManager.h" +#import "SVProgressHUD+FU.h" + +#endif /* PrefixHeader_pch */ diff --git a/FULiveDemo/Application/en.lproj/Localizable.strings b/FULiveDemo/Application/en.lproj/Localizable.strings new file mode 100644 index 00000000..0a9c7ee9 --- /dev/null +++ b/FULiveDemo/Application/en.lproj/Localizable.strings @@ -0,0 +1,129 @@ +/* + Localizable.strings + FULiveDemo + + Created by L on 2018/7/10. + Copyright © 2018年 L. All rights reserved. +*/ + +"FU Live Demo 特效版" = "FU Live Demo effects version"; +"人脸特效" = "Face effects"; +"人体特效" = "Body effects"; +"内容服务" = "Content service"; + +"载入图片或视频" = "Load picture or video"; +"设备不支持该分辨率" = "The device does not support the resolution"; + +"美颜" = "Beautification"; +"美妆" = "Makeup"; +"道具贴纸" = "Sticker"; +"Animoji" = "Animoji"; +"美发" = "Hair Color"; +"轻美妆" = "Light Makeup"; +"AR面具" = "AR Mesh"; +"表情识别" = "Expression"; +"音乐滤镜" = "Music Filter"; +"人像分割" = "Portrait Segmentation"; +"手势识别" = "Gesture"; +"哈哈镜" = "Face Warp"; +"海报换脸" = "Face Fusion"; +"搞笑大头" = "Funny Big Head"; +"全身Avatar" = "Whole-body Avatar"; +"美体" = "Body Shape"; +"绿幕抠像" = "Green Screen Key"; +"精品贴纸" = "Exquisite sticker"; + +"张嘴试试" = "Open Your Mouth"; +"鼓腮帮子" = "Puff Your Cheeks"; +"皱眉触发" = "Frown"; +"眨一眨眼" = "Blink"; +"嘟嘴试试" = "Give me a kiss"; +"微笑触发" = "Have a smile"; +"吹气触发" = "Whistle"; + +"单手手指比心" = "Finger heart"; +"双手抱拳" = "Fist"; +"双手合十" = "Namaste"; +"双手比心" = "Hand to heart"; +"竖个拇指" = "Thumbs up"; +"比个六" = "Shaka sign"; +"推出手掌" = "High five"; + +"动漫滤镜" = "Cartoon Filter"; + +"双拳靠近脸颊卖萌" = "Holding fist"; +"转头触发" = "Swivel"; + +"Performance_Preferred" = "Performance"; +"Incomplete_face" = "Incomplete face"; +"请从相册中选择图片或视频" = "Choose from your album"; +"选择图片" = "Photo"; +"选择视频" = "Video"; + +"卸妆" = "Remove"; + +"保存图片失败" = "Failed"; +"图片已保存到相册" = "Successful"; +"保存视频失败" = "Failed"; +"视频已保存到相册" = "Successful"; + +//海报融合 +"对准线框 正脸拍摄" = "Please take photos by positive face."; +"未检测出人脸,请重新上传" = "No face detected, please re-upload"; +"检测到多人,请选择一人进行换脸" = "Please select a face."; +"人脸偏转角度过大,请重新拍摄" = "please face face shooting."; +"人脸偏转角度过大,请重新选择" = "please face face shooting."; +"知道了" = "OK"; +"未检测出人脸,请重新拍摄" = "No face detected, please re-shoot"; +"人脸不全,请重新拍摄" = "Incomplete face, please reshoot"; +"人脸不全,请重新选择" = "Incomplete face, please select again"; + +//美体 +"瘦身" = "Body"; +"长腿" = "Leg"; +"细腰" = "Waist"; +"美肩" = "Shoulder"; +"美臀" = "Hip"; +"小头" = "Head shrink"; +"瘦腿" = "Thin leg"; + +"是否将所有参数恢复到默认值" = "Reset all parameters to default?"; + +//轻美妆 +"桃花" = "Peach"; +"西柚" = "Grapefruit"; +"清透" = "Clear"; +"男友" = "Boyfriend"; + +"半身驱动" = "Half"; +"全身驱动" = "whole"; + +"请使用纯色背景拍摄,推荐绿色幕布效果最佳" = "Please use a solid background, a green screen is recommended for the best effect."; +"我知道了" = "I know."; + +"下载失败" = "Download failed"; + +"To use, cancel Presets first." = "To use %@, cancel \'Presets\' first."; + +"None" = "无"; +"Style1" = "Style1"; +"Style2" = "Style2"; +"Style3" = "Style3"; +"Style4" = "Style4"; +"Style5" = "Style5"; +"Style6" = "Style6"; +"Style7" = "Style7"; + +"presets" = "Presets"; +"Content service" = "Content service"; + +"未检测到人脸" = "No face detected"; +"未检测到人体" = "No body detected"; +"未检测到手势" = "No gesture detected"; + +// Segmentation +"通用分割版" = "Generic"; +"视频会议版" = "Video Conference"; + +"请使用纯色背景拍摄,推荐绿色幕布效果最佳" = "Please use a solid background, a green screen is recommended for the best effect."; + diff --git a/FULiveDemo/Application/main.m b/FULiveDemo/Application/main.m new file mode 100644 index 00000000..49d067dd --- /dev/null +++ b/FULiveDemo/Application/main.m @@ -0,0 +1,18 @@ +// +// main.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/21. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + NSString * appDelegateClassName; + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + appDelegateClassName = NSStringFromClass([AppDelegate class]); + } + return UIApplicationMain(argc, argv, nil, appDelegateClassName); +} diff --git a/FULiveDemo/Application/zh-Hans.lproj/Localizable.strings b/FULiveDemo/Application/zh-Hans.lproj/Localizable.strings new file mode 100644 index 00000000..776254bf --- /dev/null +++ b/FULiveDemo/Application/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,108 @@ +/* + Localizable.strings + FULiveDemo + + Created by L on 2018/7/10. + Copyright © 2018年 L. All rights reserved. +*/ + +"FU Live Demo 特效版" = "FU Live Demo 特效版"; +"人脸特效" = "人脸特效"; +"人体特效" = "人体特效"; +"内容服务" = "内容服务"; + +"载入图片或视频" = "载入图片或视频"; +"设备不支持该分辨率" = "设备不支持该分辨率"; + +"美颜" = "美颜"; +"美妆" = "美妆"; +"道具贴纸" = "道具贴纸"; +"Animoji" = "Animoji"; +"美发" = "美发"; +"轻美妆" = "轻美妆"; +"AR面具" = "AR面具"; +"表情识别" = "表情识别"; +"音乐滤镜" = "音乐滤镜"; +"背景分割" = "背景分割"; +"手势识别" = "手势识别"; +"哈哈镜" = "哈哈镜"; +"动漫滤镜" = "动漫滤镜"; +"海报换脸" = "海报换脸"; +"美体" = "美体"; +"全身Avatar" = "全身Avatar"; +"绿幕抠像" = "绿幕抠像"; +"精品贴纸" = "精品贴纸"; + +"张嘴试试" = "张嘴试试"; +"鼓腮帮子" = "鼓腮帮子"; +"皱眉触发" = "皱眉触发"; +"眨一眨眼" = "眨一眨眼"; +"嘟嘴试试" = "嘟嘴试试"; +"微笑触发" = "微笑触发"; +"吹气触发" = "吹气触发"; +"转头触发" = "转头触发"; +"单手手指比心" = "单手手指比心"; +"双手抱拳" = "双手抱拳"; +"双手合十" = "双手合十"; +"双手比心" = "双手比心"; +"竖个拇指" = "竖个拇指"; +"比个六" = "比个六"; +"推出手掌" = "推出手掌"; +"双拳靠近脸颊卖萌" = "双拳靠近脸颊卖萌"; + +"Performance_Preferred" = "性能优先"; +"Incomplete_face" = "人脸不完整"; +"请从相册中选择图片或视频" = "请从相册中选择图片或视频"; +"选择图片" = "选择图片"; +"选择视频" = "选择视频"; + +"是否将所有参数恢复到默认值" = "是否将所有参数恢复到默认值?"; + +//轻美妆 +"桃花" = "桃花"; +"西柚" = "西柚"; +"清透" = "清透"; +"男友" = "男友"; + +"半身驱动" = "半身驱动"; +"全身驱动" = "全身驱动"; + +"保存图片失败" = "保存图片失败"; +"图片已保存到相册" = "图片已保存到相册"; +"保存视频失败" = "保存视频失败"; +"视频已保存到相册" = "视频已保存到相册"; + +// 海报融合 +"对准线框 正脸拍摄" = "对准线框 正脸拍摄"; +"未检测出人脸,请重新上传" = "未检测出人脸,请重新上传"; +"检测到多人,请选择一人进行换脸" = "检测到多人,请选择一人进行换脸"; +"人脸偏转角度过大,请重新拍摄" = "人脸偏转角度过大,请重新拍摄"; +"人脸偏转角度过大,请重新选择" = "人脸偏转角度过大,请重新选择"; +"知道了" = "知道了"; +"未检测出人脸,请重新拍摄" = "未检测出人脸,请重新拍摄"; +"人脸不全,请重新拍摄" = "人脸不全,请重新拍摄"; +"人脸不全,请重新选择" = "人脸不全,请重新选择"; + +"我知道了" = "我知道了"; + +"下载失败" = "下载失败"; + +"To use, cancel Presets first." = "使用%@先取消\'风格推荐\'"; + +"None" = "无"; +"Style1" = "风格1"; +"Style2" = "风格2"; +"Style3" = "风格3"; +"Style4" = "风格4"; +"Style5" = "风格5"; +"Style6" = "风格6"; +"Style7" = "风格7"; +"presets" = "风格推荐"; + +"未检测到人脸" = "未检测到人脸"; +"未检测到人体" = "未检测到人体"; +"未检测到手势" = "未检测到手势"; + +// 人像分割 +"通用分割版" = "通用分割版"; +"视频会议版" = "视频会议版"; diff --git a/FULiveDemo/Assets.xcassets/Blur/Contents.json b/FULiveDemo/Assets.xcassets/Blur/Contents.json deleted file mode 100644 index da4a164c..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/Contents.json deleted file mode 100644 index c3ea913e..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_list_clear_buffing_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_clear_buffing_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_clear_buffing_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor.png deleted file mode 100644 index 50d077c1..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor@2x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor@2x.png deleted file mode 100644 index 03c58744..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor@3x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor@3x.png deleted file mode 100644 index 90517362..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_nor.imageset/demo_icon_list_clear_buffing_nor@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/Contents.json deleted file mode 100644 index d159cc8f..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_list_clear_buffing_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_clear_buffing_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_clear_buffing_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel.png deleted file mode 100644 index 84c95123..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel@2x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel@2x.png deleted file mode 100644 index 3f28ba03..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel@3x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel@3x.png deleted file mode 100644 index e181388c..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_clear_buffing_sel.imageset/demo_icon_list_clear_buffing_sel@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/Contents.json deleted file mode 100644 index 5f55d46f..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_list_fine_buffing_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_fine_buffing_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_fine_buffing_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor.png deleted file mode 100644 index a1798e5b..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor@2x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor@2x.png deleted file mode 100644 index 27d45917..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor@3x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor@3x.png deleted file mode 100644 index 2c0637d1..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_nor.imageset/demo_icon_list_fine_buffing_nor@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/Contents.json deleted file mode 100644 index a01e2ef6..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_list_fine_buffing_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_fine_buffing_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_fine_buffing_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel.png deleted file mode 100644 index 9b685ba9..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel@2x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel@2x.png deleted file mode 100644 index c7980f3c..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel@3x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel@3x.png deleted file mode 100644 index 0183a6a1..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_fine_buffing_sel.imageset/demo_icon_list_fine_buffing_sel@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/Contents.json deleted file mode 100644 index 52f60c69..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_list_hazy_buffing_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_hazy_buffing_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_hazy_buffing_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor.png deleted file mode 100644 index d4677a78..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor@2x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor@2x.png deleted file mode 100644 index 56f164b4..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor@3x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor@3x.png deleted file mode 100644 index ce34184f..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_nor.imageset/demo_icon_list_hazy_buffing_nor@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/Contents.json deleted file mode 100644 index 80b2e9cd..00000000 --- a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_list_hazy_buffing_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_hazy_buffing_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_list_hazy_buffing_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel.png deleted file mode 100644 index b0266091..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel@2x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel@2x.png deleted file mode 100644 index 607783d0..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel@3x.png b/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel@3x.png deleted file mode 100644 index 52506afe..00000000 Binary files a/FULiveDemo/Assets.xcassets/Blur/demo_icon_list_hazy_buffing_sel.imageset/demo_icon_list_hazy_buffing_sel@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/BodySlim/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/Contents.json deleted file mode 100644 index da4a164c..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/Contents.json deleted file mode 100644 index 8cd85da3..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_hip_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/Contents.json deleted file mode 100644 index bd7feeec..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_hip_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/Contents.json deleted file mode 100644 index 6cc96f68..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_hip_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/Contents.json deleted file mode 100644 index a6b1147d..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_hip_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_hip_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_hip_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/Contents.json deleted file mode 100644 index 85fb455d..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/Contents.json deleted file mode 100644 index 3e2c592d..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/Contents.json deleted file mode 100644 index a187ed03..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/Contents.json deleted file mode 100644 index baab7830..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_little_head_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_little_head_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/Contents.json deleted file mode 100644 index d4d71e6e..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/Contents.json deleted file mode 100644 index 3dbb593c..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/Contents.json deleted file mode 100644 index c667a2c2..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/Contents.json deleted file mode 100644 index b215bc36..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_shoulder_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shoulder_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/Contents.json deleted file mode 100644 index afd498ee..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/Contents.json deleted file mode 100644 index 0deac35f..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/Contents.json deleted file mode 100644 index d2a0802d..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/Contents.json deleted file mode 100644 index a2341898..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_slimming_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_slimming_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/Contents.json deleted file mode 100644 index 539f5c6f..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/Contents.json deleted file mode 100644 index aa365ec8..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/Contents.json deleted file mode 100644 index 35cdb6cd..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/Contents.json deleted file mode 100644 index 33b235e5..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_stovepipe_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_stovepipe_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/Contents.json deleted file mode 100644 index 485d9a05..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/Contents.json deleted file mode 100644 index 0f8b998e..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/Contents.json deleted file mode 100644 index 1cc104a8..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/Contents.json deleted file mode 100644 index 9c065c45..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_leg_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_leg_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/Contents.json deleted file mode 100644 index 6efdb405..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/Contents.json deleted file mode 100644 index 2c51b361..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/Contents.json deleted file mode 100644 index a1c4150a..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/Contents.json deleted file mode 100644 index 6b9b1a7c..00000000 --- a/FULiveDemo/Assets.xcassets/BodySlim/demo_icon_thin_waist_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_thin_waist_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/Contents.json deleted file mode 100644 index da4a164c..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/Contents.json deleted file mode 100644 index d825df61..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/Contents.json deleted file mode 100644 index fb5123d7..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/Contents.json deleted file mode 100644 index d087ff7c..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/Contents.json deleted file mode 100644 index 733eebc1..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/Contents.json deleted file mode 100644 index f930902c..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/Contents.json deleted file mode 100644 index 606455bd..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/Contents.json deleted file mode 100644 index db42393f..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/Contents.json b/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/Contents.json deleted file mode 100644 index 9d084d30..00000000 --- a/FULiveDemo/Assets.xcassets/FuzzyToonFilter/fuzzytoonfilter8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fuzzytoonfilter8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/Contents.json deleted file mode 100644 index 61a5a313..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/aiming_point.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "aiming_point.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "aiming_point@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "aiming_point@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/Contents.json deleted file mode 100644 index e60536e7..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_beach.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_bg_beach.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_beach@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_beach@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/Contents.json deleted file mode 100644 index dae0347a..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_classroom.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_bg_classroom.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_classroom@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_classroom@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/Contents.json deleted file mode 100644 index e53b4810..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_forest.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_bg_forest.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_forest@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_forest@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/Contents.json deleted file mode 100644 index 4c6a6c07..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_ink painting.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_bg_ink painting.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_ink painting@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_ink painting@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/Contents.json deleted file mode 100644 index 370dc88f..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_science.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_bg_science.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_science@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_science@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/Contents.json deleted file mode 100644 index 474d97a4..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_bg_transparent.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_bg_transparent.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_transparent@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_bg_transparent@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/Contents.json deleted file mode 100644 index dd196237..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_key_color_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_key_color_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_key_color_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/Contents.json deleted file mode 100644 index f891f2c6..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_key_color_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_key_color_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_key_color_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_key_color_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/Contents.json deleted file mode 100644 index a2f232f9..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_save1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_save.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_save@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_save@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/Contents.json deleted file mode 100644 index 75631813..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/Contents.json deleted file mode 100644 index 4c355384..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/Contents.json deleted file mode 100644 index 884f1645..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/Contents.json deleted file mode 100644 index fb31f39f..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_similarityr_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_similarityr_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/Contents.json deleted file mode 100644 index 998598a3..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/Contents.json deleted file mode 100644 index f0673bfd..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/Contents.json deleted file mode 100644 index 4a53e851..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/Contents.json deleted file mode 100644 index a546a885..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_smooth_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smooth_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/Contents.json deleted file mode 100644 index a1a22442..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_straw.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_straw .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_straw @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_straw @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/Contents.json deleted file mode 100644 index 79ee1946..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/Contents.json deleted file mode 100644 index 6ccfd2db..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_nor_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/Contents.json deleted file mode 100644 index d8a7b7c5..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/Contents.json b/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/Contents.json deleted file mode 100644 index 34b52339..00000000 --- a/FULiveDemo/Assets.xcassets/GreenScreen/demo_icon_transparency_sel_open.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_transparency_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/Contents.json" deleted file mode 100644 index d814ded1..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/AR\351\235\242\345\205\267.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "AR面具icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "AR面具icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "AR面具icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/Contents.json deleted file mode 100644 index 13acc381..00000000 --- a/FULiveDemo/Assets.xcassets/Homepage/Animoji.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "ANIMOJIicon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "ANIMOJIicon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "ANIMOJIicon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/Contents.json deleted file mode 100644 index f3764fcc..00000000 --- a/FULiveDemo/Assets.xcassets/Homepage/bottomImage.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bottomImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bottomImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/Contents.json deleted file mode 100644 index a7409a3b..00000000 --- a/FULiveDemo/Assets.xcassets/Homepage/bottomImage_gray.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bottomImage_gray@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bottomImage_gray@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/Contents.json deleted file mode 100644 index 6e638559..00000000 --- a/FULiveDemo/Assets.xcassets/Homepage/homeview_background_top.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "图层1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "图层1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/Contents.json" deleted file mode 100644 index 74d6f366..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "表情实验室.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "表情实验室@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "表情实验室@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244.png" "b/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244.png" deleted file mode 100644 index 77ff6c8e..00000000 Binary files "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244@2x.png" "b/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244@2x.png" deleted file mode 100644 index 79faea58..00000000 Binary files "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244@3x.png" "b/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244@3x.png" deleted file mode 100644 index 85613571..00000000 Binary files "a/FULiveDemo/Assets.xcassets/Homepage/\344\270\200\351\224\256\345\217\230\350\241\250\346\203\205.imageset/\350\241\250\346\203\205\345\256\236\351\252\214\345\256\244@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/Contents.json" deleted file mode 100644 index 1fc956eb..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\344\272\272\345\203\217\345\210\206\345\211\262.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "背景图片icon .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "背景图片icon @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "背景图片icon @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/Contents.json" deleted file mode 100644 index 41355e7a..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\345\205\250\350\272\253Avatar.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_whole_body.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_whole_body@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/Contents.json" deleted file mode 100644 index e2958135..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\345\223\210\345\223\210\351\225\234.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "哈哈镜icon .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "哈哈镜icon @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "哈哈镜icon @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/Contents.json" deleted file mode 100644 index f6be4f56..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\346\211\213\345\212\277\350\257\206\345\210\253.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "赞icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "赞icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "赞icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/Contents.json" deleted file mode 100644 index f246f53c..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\346\220\236\347\254\221\345\244\247\345\244\264.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_photo_sticker.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_photo_sticker@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_photo_sticker@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/Contents.json" deleted file mode 100644 index a9494494..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\346\265\267\346\212\245\346\215\242\350\204\270.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "海报换脸.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "海报换脸@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "海报换脸@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/Contents.json" deleted file mode 100644 index 45ba88d9..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\347\273\277\345\271\225\346\212\240\345\203\217.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_green_curtain.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_green_curtain@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_green_curtain@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/Contents.json" deleted file mode 100644 index 3135235f..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\344\275\223.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_body.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_body@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_body@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/Contents.json" deleted file mode 100644 index 5e78dc68..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\217\221.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "美发.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美发@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美发@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/Contents.json" deleted file mode 100644 index 2ed554c4..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\345\246\206.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "美妆.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美妆@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美妆@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/Contents.json" deleted file mode 100644 index a79e5479..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\347\276\216\351\242\234.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "美颜icon .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美颜icon @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美颜icon @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/Contents.json" deleted file mode 100644 index bcfd5cdf..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\345\212\250\345\233\276.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_yitu_figure.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_yitu_figure@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_yitu_figure@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/Contents.json" deleted file mode 100644 index 4fd37790..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\350\241\250\346\203\205\350\257\206\345\210\253.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "表情识别icon .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "表情识别icon @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "表情识别icon @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/Contents.json" deleted file mode 100644 index 42970408..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\350\275\273\347\276\216\345\246\206.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_texture_beauty.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_texture_beauty@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_texture_beauty@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/Contents.json" deleted file mode 100644 index d0e89814..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\351\201\223\345\205\267\350\264\264\347\272\270.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "道具贴纸icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "道具贴纸icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "道具贴纸icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/Contents.json" deleted file mode 100644 index 355b97f7..00000000 --- "a/FULiveDemo/Assets.xcassets/Homepage/\351\237\263\344\271\220\346\273\244\351\225\234.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "音乐滤镜icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "音乐滤镜icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "音乐滤镜icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index a86966be..00000000 --- a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "images" : [ - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "2436h", - "filename" : "启动页1125-2436.png", - "minimum-system-version" : "11.0", - "orientation" : "portrait", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "启动页1242-2208.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "667h", - "filename" : "启动页750-1334.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "启动页640-960.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "启动页640-1136.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "启动页768-1024.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "启动页1024-768.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "启动页1536-2048.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "启动页-2048-1536.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "启动页320-480.png", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "启动页640-961.png", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "启动页640-1138.png", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "启动页768-1004.png", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "启动页768-1026.png", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "启动页-1024-748.png", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "启动页1024-769.png", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "启动页1536-2008.png", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "启动页1536-2049.png", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "启动页-2048-1496.png", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "启动页-2048-1537.png", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-1024-748.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-1024-748.png" deleted file mode 100644 index b58e1e20..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-1024-748.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1496.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1496.png" deleted file mode 100644 index f7b6b779..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1496.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1536.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1536.png" deleted file mode 100644 index e058da96..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1536.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1537.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1537.png" deleted file mode 100644 index e058da96..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265-2048-1537.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651024-768.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651024-768.png" deleted file mode 100644 index a482f322..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651024-768.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651024-769.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651024-769.png" deleted file mode 100644 index a482f322..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651024-769.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651242-2208.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651242-2208.png" deleted file mode 100644 index 218e2159..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651242-2208.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2008.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2008.png" deleted file mode 100644 index bd2617d0..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2008.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2049.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2049.png" deleted file mode 100644 index 778c12ec..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\2651536-2049.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-1136.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-1136.png" deleted file mode 100644 index 2beffa0d..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-1136.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-1138.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-1138.png" deleted file mode 100644 index 2beffa0d..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-1138.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-960.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-960.png" deleted file mode 100644 index 4bae1e35..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-960.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-961.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-961.png" deleted file mode 100644 index 4bae1e35..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265640-961.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1004.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1004.png" deleted file mode 100644 index a6b44982..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1004.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1026.png" "b/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1026.png" deleted file mode 100644 index 70754c23..00000000 Binary files "a/FULiveDemo/Assets.xcassets/LaunchImage.launchimage/\345\220\257\345\212\250\351\241\265768-1026.png" and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/Contents.json deleted file mode 100644 index 78e1b6fe..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_age.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_age@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_age@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/Contents.json deleted file mode 100644 index 56d0994e..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_bored_cat.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_bored_cat@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_bored_cat@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/Contents.json deleted file mode 100644 index 18e3f49c..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_charming.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_charming@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_charming@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/Contents.json deleted file mode 100644 index 4f75ef32..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_coral.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_coral@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_coral@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral.png deleted file mode 100644 index 58ef0306..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral@2x.png deleted file mode 100644 index fa6e581e..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral@3x.png deleted file mode 100644 index 690b2dce..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_coral.imageset/demo_combination_coral@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/Contents.json deleted file mode 100644 index 4b92abb6..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_daisy.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_daisy@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_daisy@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/Contents.json deleted file mode 100644 index 06ab7adc..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_early_autumn.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_early_autumn@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_early_autumn@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/Contents.json deleted file mode 100644 index d12efe43..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_flower.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_flower@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_flower@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower.png deleted file mode 100644 index 934ae050..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower@2x.png deleted file mode 100644 index 0b174d11..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower@3x.png deleted file mode 100644 index 0ee8069c..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_flower.imageset/demo_combination_flower@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/Contents.json deleted file mode 100644 index 303aacac..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_girl.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_girl@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_girl@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/Contents.json deleted file mode 100644 index cd8d5835..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_harbour_wind.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_harbour_wind@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_harbour_wind@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/Contents.json deleted file mode 100644 index 5f4f9b90..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_lady.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_lady@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_lady@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady.png deleted file mode 100644 index 6fd0ff24..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady@2x.png deleted file mode 100644 index 66dd2c59..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady@3x.png deleted file mode 100644 index 8bfaaaf5..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_lady.imageset/demo_combination_lady@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/Contents.json deleted file mode 100644 index 327192ed..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_mermaid.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_mermaid@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_mermaid@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/Contents.json deleted file mode 100644 index 6d5eb8e5..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_combination_mixed_race.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_combination_mixed_race@2x.png", - "idiom" : "universal", - "filename" : "小脸-1@2x.png", - "scale" : "2x" - }, - { - "filename" : "demo_combination_mixed_race@3x.png", - "idiom" : "universal", - "filename" : "小脸-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/Contents.json deleted file mode 100644 index 1d248040..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_moon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_moon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_moon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon.png deleted file mode 100644 index f4edb723..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon@2x.png deleted file mode 100644 index 064461f0..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon@3x.png deleted file mode 100644 index c81f7c47..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_moon.imageset/demo_combination_moon@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/Contents.json deleted file mode 100644 index c980c889..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_neighbor_girl.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_neighbor_girl@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_neighbor_girl@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/Contents.json deleted file mode 100644 index b2297175..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_occident.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_occident@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_occident@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/Contents.json deleted file mode 100644 index 062e8b79..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_paper_cranes.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_paper_cranes@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_paper_cranes@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/Contents.json deleted file mode 100644 index 91aaee57..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_purple_rhyme.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_purple_rhyme@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_purple_rhyme@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/Contents.json deleted file mode 100644 index 8293eee2..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_red_maple.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_red_maple@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_red_maple@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/Contents.json deleted file mode 100644 index 267aa24d..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_rose.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_rose@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_rose@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/Contents.json deleted file mode 100644 index 7362d76b..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_sexy.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_sexy@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_sexy@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/Contents.json deleted file mode 100644 index 5b34f26b..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_supermodel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_supermodel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_supermodel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/Contents.json deleted file mode 100644 index 910f966b..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_sweet.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_sweet@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_sweet@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/Contents.json deleted file mode 100644 index 32014c94..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_tough_guy.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_tough_guy@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_tough_guy@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy.png deleted file mode 100644 index 0b3e3d8f..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy@2x.png deleted file mode 100644 index f1863fd0..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy@3x.png deleted file mode 100644 index 6e6fc264..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_tough_guy.imageset/demo_combination_tough_guy@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/Contents.json deleted file mode 100644 index ce64ffe7..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_combination_warm_winter.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_warm_winter@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_combination_warm_winter@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/Contents.json deleted file mode 100644 index c962a8c7..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_black.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_black@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_black@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black.png deleted file mode 100644 index 5aebe64c..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black@2x.png deleted file mode 100644 index c9139eca..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black@3x.png deleted file mode 100644 index 00ca977b..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_black.imageset/demo_makeup_black@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/Contents.json deleted file mode 100644 index 8d1e1287..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_boyfriend.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_boyfriend.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_boyfriend@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_boyfriend@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/Contents.json deleted file mode 100644 index 264ff809..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_brocade_carp.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_brocade_carp@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_brocade_carp@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp.png deleted file mode 100644 index 9aca29ce..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp@2x.png deleted file mode 100644 index 49c39720..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp@3x.png deleted file mode 100644 index 878a868b..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_brocade_carp.imageset/demo_makeup_brocade_carp@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/Contents.json deleted file mode 100644 index 6a8aa182..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_classical.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_classical@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_classical@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical.png deleted file mode 100644 index 145616e8..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical@2x.png deleted file mode 100644 index 8f1cde92..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical@3x.png deleted file mode 100644 index ffd97b8c..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_classical.imageset/demo_makeup_classical@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/Contents.json deleted file mode 100644 index f296ff90..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_clear.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_clear.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_clear@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_clear@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/Contents.json deleted file mode 100644 index ea5bd516..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_cream.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_cream@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_cream@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream.png deleted file mode 100644 index 9f4af8d6..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream@2x.png deleted file mode 100644 index ecffab58..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream@3x.png deleted file mode 100644 index 0c213291..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_cream.imageset/demo_makeup_cream@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/Contents.json deleted file mode 100644 index dd71a21a..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_freckles.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_freckles@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_freckles@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles.png deleted file mode 100644 index eecf6ba6..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles@2x.png deleted file mode 100644 index 6cca34b2..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles@3x.png deleted file mode 100644 index a4c965e9..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_freckles.imageset/demo_makeup_freckles@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/Contents.json deleted file mode 100644 index a4eaec57..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_grapefruit.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_grapefruit.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_grapefruit@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_grapefruit@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/Contents.json deleted file mode 100644 index 369cfbd9..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_maple_leaves.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_maple_leaves@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_maple_leaves@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves.png deleted file mode 100644 index bc154e03..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves@2x.png deleted file mode 100644 index 8bcdf513..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves@3x.png deleted file mode 100644 index b8e9e7fa..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_maple_leaves.imageset/demo_makeup_maple_leaves@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/Contents.json deleted file mode 100644 index ee275d1c..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_peachblossom.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_peachblossom.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_peachblossom@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_peachblossom@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/Contents.json deleted file mode 100644 index 41619e01..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_plum.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_plum@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_plum@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum.png deleted file mode 100644 index c837bc79..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum@2x.png deleted file mode 100644 index 1fa6c099..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum@3x.png deleted file mode 100644 index 0c56c2bc..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_plum.imageset/demo_makeup_plum@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/Contents.json deleted file mode 100644 index 261c2b89..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_punk.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_punk@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_punk@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk.png deleted file mode 100644 index 6bc1739f..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk@2x.png deleted file mode 100644 index c985e3af..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk@3x.png deleted file mode 100644 index bfff3703..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_punk.imageset/demo_makeup_punk@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/Contents.json deleted file mode 100644 index fc310ae9..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_red_tea.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_red_tea@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_red_tea@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea.png deleted file mode 100644 index 7bf1ab37..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea@2x.png deleted file mode 100644 index ed6a1885..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea@3x.png deleted file mode 100644 index 98ca9688..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_red_tea.imageset/demo_makeup_red_tea@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/Contents.json deleted file mode 100644 index 7ed2c2ec..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_tipsy.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_tipsy@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_tipsy@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy.png deleted file mode 100644 index fec59b1b..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy@2x.png deleted file mode 100644 index 812ddd66..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy@3x.png deleted file mode 100644 index 8ddd0d07..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_tipsy.imageset/demo_makeup_tipsy@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/Contents.json deleted file mode 100644 index dc39693c..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_ winter.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_ winter@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_ winter@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter.png deleted file mode 100644 index 62467f96..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter@2x.png deleted file mode 100644 index 67d3bc5d..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter@3x.png deleted file mode 100644 index 4405739e..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_winter.imageset/demo_makeup_ winter@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/Contents.json deleted file mode 100644 index 1d44117c..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_makeup_world_weariness.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_world_weariness@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_makeup_world_weariness@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness.png deleted file mode 100644 index 82ff0eb0..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness@2x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness@2x.png deleted file mode 100644 index c957bc61..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness@3x.png b/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness@3x.png deleted file mode 100644 index 38158313..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_makeup_world_weariness.imageset/demo_makeup_world_weariness@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/Contents.json deleted file mode 100644 index a47249d0..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_blush_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/Contents.json deleted file mode 100644 index 50cd3968..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_blush_02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/Contents.json deleted file mode 100644 index 16f9c109..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_blush_03.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_03@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_03@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/Contents.json deleted file mode 100644 index 0815aba1..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_blush_04.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_04@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_04@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/Contents.json deleted file mode 100644 index d341fed2..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_blush_05.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_05@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_blush_05@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05.png deleted file mode 100644 index 854ad1b1..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05@2x.png deleted file mode 100644 index 5917772b..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05@3x.png deleted file mode 100644 index 7976a273..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_05.imageset/demo_style_blush_05@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/Contents.json deleted file mode 100644 index 8842437e..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_contour _01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_contour _01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_contour _01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/Contents.json deleted file mode 100644 index dc5338d3..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyebrow_02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyebrow_02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyebrow_02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/Contents.json deleted file mode 100644 index 76c520b1..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_style_eyebrow_03.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_style_eyebrow_03@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_style_eyebrow_03@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03.png deleted file mode 100644 index 809002f5..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03@2x.png deleted file mode 100644 index 41a96fd3..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03@3x.png deleted file mode 100644 index dbbec847..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_03.imageset/demo_style_eyebrow_03@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/Contents.json deleted file mode 100644 index 16e7d24d..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_style_eyebrow_04.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_style_eyebrow_04@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_style_eyebrow_04@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04.png deleted file mode 100644 index f5df099d..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04@2x.png deleted file mode 100644 index 19cbcd93..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04@3x.png deleted file mode 100644 index 6c82c185..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_04.imageset/demo_style_eyebrow_04@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/Contents.json deleted file mode 100644 index 5d3ccbd8..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_style_eyebrow_05.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_style_eyebrow_05@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_style_eyebrow_05@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05.png deleted file mode 100644 index 25d15fd8..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05@2x.png deleted file mode 100644 index 4d82cfe1..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05@3x.png deleted file mode 100644 index 680d2ec2..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_05.imageset/demo_style_eyebrow_05@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/Contents.json deleted file mode 100644 index ce78ae5f..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_style_eyebrow_06.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_style_eyebrow_06@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_style_eyebrow_06@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06.png deleted file mode 100644 index 970bd480..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06@2x.png deleted file mode 100644 index f118817f..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06@3x.png deleted file mode 100644 index 35a643d4..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_06.imageset/demo_style_eyebrow_06@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/Contents.json deleted file mode 100644 index 9e3deda2..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_style_eyebrow_07.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_style_eyebrow_07@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_style_eyebrow_07@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07.png deleted file mode 100644 index c22ffa64..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07@2x.png deleted file mode 100644 index 8b3922d7..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07@3x.png deleted file mode 100644 index cd29b389..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_07.imageset/demo_style_eyebrow_07@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/Contents.json deleted file mode 100644 index 801feeee..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/Contents.json deleted file mode 100644 index 5092236c..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/Contents.json deleted file mode 100644 index 7875195a..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_03.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_03@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_03@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/Contents.json deleted file mode 100644 index 2402552a..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_04.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_04@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_04@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/Contents.json deleted file mode 100644 index f050ebad..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_05.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_05@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_05@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/Contents.json deleted file mode 100644 index 8ffe6e3a..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_06.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_06@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyelash_06@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/Contents.json deleted file mode 100644 index d0450864..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/Contents.json deleted file mode 100644 index 1b83af78..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/Contents.json deleted file mode 100644 index 15c40fe0..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_03.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_03@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_03@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/Contents.json deleted file mode 100644 index f4570d3a..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_04.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_04@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_04@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/Contents.json deleted file mode 100644 index 65ffd785..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_05.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_05@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_05@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/Contents.json deleted file mode 100644 index 9126ee50..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_06.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_06@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeliner_06@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/Contents.json deleted file mode 100644 index ea0b712e..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyepupil_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyepupil_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyepupil_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/Contents.json deleted file mode 100644 index d7086e8d..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/Contents.json deleted file mode 100644 index 2bceb7df..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/Contents.json deleted file mode 100644 index b80ebbd6..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_03.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_03@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_03@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/Contents.json deleted file mode 100644 index a1f1ae68..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_04.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_04@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_04@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/Contents.json deleted file mode 100644 index 94ebf4b5..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_05.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_05@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_05@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/Contents.json deleted file mode 100644 index 856dfea2..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_06.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_06@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_06@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/Contents.json deleted file mode 100644 index 3c720cff..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_07.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_07@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_07@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07.png deleted file mode 100644 index d2eadcf3..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07@2x.png deleted file mode 100644 index 286914bf..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07@3x.png deleted file mode 100644 index 0c4c7c6f..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_07.imageset/demo_style_eyeshadow_07@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/Contents.json deleted file mode 100644 index 692e2c69..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_08.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_08@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_eyeshadow_08@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08.png deleted file mode 100644 index 842d3371..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08@2x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08@2x.png deleted file mode 100644 index f4f49cad..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08@3x.png b/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08@3x.png deleted file mode 100644 index 7b90cf22..00000000 Binary files a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_08.imageset/demo_style_eyeshadow_08@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/Contents.json deleted file mode 100644 index ed43c7c1..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_highlight _01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_highlight _01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_highlight _01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/Contents.json deleted file mode 100644 index bac27e83..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_highlight _02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_highlight _02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_highlight _02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/Contents.json deleted file mode 100644 index bd8a80b6..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_lip_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_lip_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_lip_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/Contents.json deleted file mode 100644 index a3bb234e..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_style_lip_05.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_lip_05@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_style_lip_05@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/Contents.json deleted file mode 100644 index 93180bfb..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "makeup_custom_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "makeup_custom_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "makeup_custom_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/Contents.json deleted file mode 100644 index 0bb101fb..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "makeup_noitem.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "makeup_noitem@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "makeup_noitem@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/Contents.json deleted file mode 100644 index f95343ed..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/makeup_noitem_selected.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "makeup_noitem_selected.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "makeup_noitem_selected@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "makeup_noitem_selected@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/Contents.json deleted file mode 100644 index 10c8af29..00000000 --- a/FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "makeup_return_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "makeup_return_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "makeup_return_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Contents.json" deleted file mode 100644 index da4a164c..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Contents.json" +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/Contents.json" deleted file mode 100644 index da4a164c..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/Contents.json" +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/Contents.json" deleted file mode 100644 index c3ec243f..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_01.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_01.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_01@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_01@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/Contents.json" deleted file mode 100644 index e1f2ae7e..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_02.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_02.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_02@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_02@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/Contents.json" deleted file mode 100644 index 3b7c5b77..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_03.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_04.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_04@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_04@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/Contents.json" deleted file mode 100644 index 3edd9ae2..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_03.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_03@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_03@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03.png" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03.png" deleted file mode 100644 index 321dbe5a..00000000 Binary files "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03@2x.png" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03@2x.png" deleted file mode 100644 index 3d932720..00000000 Binary files "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03@3x.png" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03@3x.png" deleted file mode 100644 index 3da21838..00000000 Binary files "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_032.imageset/icon_gradualchangehair_03@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/Contents.json" deleted file mode 100644 index b295f1f9..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_04.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_05.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_05@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_05@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/Contents.json" deleted file mode 100644 index 32704ada..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/Gradual/icon_gradualchangehair_05.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_06.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_06@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_gradualchangehair_06@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/Contents.json" deleted file mode 100644 index 82143dc9..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/Contents.json" deleted file mode 100644 index 5550be3a..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/Contents.json" deleted file mode 100644 index 23ba2897..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/Contents.json" deleted file mode 100644 index 42ef8443..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_4.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/Contents.json" deleted file mode 100644 index f5b0a605..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_5.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/Contents.json" deleted file mode 100644 index 659b8fd7..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_6.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/Contents.json" deleted file mode 100644 index 374b80fb..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_7.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/Contents.json" deleted file mode 100644 index 90f71e65..00000000 --- "a/FULiveDemo/Assets.xcassets/Makeup/\347\276\216\345\217\221/hair_color_8.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hair_color_8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hair_color_8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/Contents.json deleted file mode 100644 index c016d9c8..00000000 --- a/FULiveDemo/Assets.xcassets/Others/demo_icon_add_to.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_add_to.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_add_to@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_add_to@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/Contents.json deleted file mode 100644 index 84cd5910..00000000 --- a/FULiveDemo/Assets.xcassets/Others/demo_icon_cancel.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_cancel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cancel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cancel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/Contents.json deleted file mode 100644 index d755443f..00000000 --- a/FULiveDemo/Assets.xcassets/Others/demo_icon_contrast.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_contrast.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_contrast@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_contrast@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/Contents.json deleted file mode 100644 index 705c4995..00000000 --- a/FULiveDemo/Assets.xcassets/Others/demo_icon_more.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_more.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_more@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_more@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/Poster/poster9.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Poster/poster9.imageset/Contents.json deleted file mode 100644 index f0326be1..00000000 --- a/FULiveDemo/Assets.xcassets/Poster/poster9.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "image2.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Poster/poster9.imageset/image2.png b/FULiveDemo/Assets.xcassets/Poster/poster9.imageset/image2.png deleted file mode 100644 index a46774fa..00000000 Binary files a/FULiveDemo/Assets.xcassets/Poster/poster9.imageset/image2.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/Contents.json b/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/Contents.json deleted file mode 100644 index 2a7a27c0..00000000 --- a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "save_nav_back_n.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "save_nav_back_n@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "save_nav_back_n@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n.png b/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n.png deleted file mode 100644 index 8838d6b0..00000000 Binary files a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n@2x.png b/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n@2x.png deleted file mode 100644 index bbc9cf96..00000000 Binary files a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n@3x.png b/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n@3x.png deleted file mode 100644 index 526a0949..00000000 Binary files a/FULiveDemo/Assets.xcassets/Poster/save_nav_back_n.imageset/save_nav_back_n@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/Contents.json deleted file mode 100644 index f851a08b..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/FULighting_Btn.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "明度条椭圆 icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "明度条椭圆 icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "明度条椭圆 icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/Contents.json deleted file mode 100644 index cbce63d9..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/FULighting_mon.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "月亮.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "月亮@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "月亮@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/Contents.json deleted file mode 100644 index 3326d7e1..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/FULighting_sun.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "小太阳icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "小太阳icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "小太阳icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/Contents.json deleted file mode 100644 index 10379040..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "未选中框.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "未选中框@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "未选中框@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206.png" "b/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206.png" deleted file mode 100644 index f5923649..00000000 Binary files "a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206@2x.png" "b/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206@2x.png" deleted file mode 100644 index a3596cdb..00000000 Binary files "a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206@3x.png" "b/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206@3x.png" deleted file mode 100644 index a10bc56b..00000000 Binary files "a/FULiveDemo/Assets.xcassets/renderView/Performance.imageset/\346\234\252\351\200\211\344\270\255\346\241\206@3x.png" and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Contents.json deleted file mode 100644 index bb87b8cb..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/Replay_icon.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "Replay_icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "Replay_icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "Replay_icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/Contents.json deleted file mode 100644 index 7fe06260..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/back_btn_normal.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "返回icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "返回icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "返回icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/bugly.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/bugly.imageset/Contents.json deleted file mode 100644 index f27c49a4..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/bugly.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "测试icon .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "测试icon @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "测试icon @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/Contents.json deleted file mode 100644 index 1d149c0d..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/camera_btn_camera_normal.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "相机按钮.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "相机按钮@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "相机按钮@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/Contents.json deleted file mode 100644 index b02e3553..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/camera_btn_shotcut_normal.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "相机icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "相机icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "相机icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/Contents.json" deleted file mode 100644 index 618ea74a..00000000 --- "a/FULiveDemo/Assets.xcassets/renderView/camera_\346\240\241\345\207\206.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "校准.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "校准@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "校准@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/download.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/download.imageset/Contents.json deleted file mode 100644 index e3e7ef6c..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/download.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "download.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "download@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "download@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/download.imageset/download.png b/FULiveDemo/Assets.xcassets/renderView/download.imageset/download.png deleted file mode 100644 index f9026b0d..00000000 Binary files a/FULiveDemo/Assets.xcassets/renderView/download.imageset/download.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/renderView/download.imageset/download@2x.png b/FULiveDemo/Assets.xcassets/renderView/download.imageset/download@2x.png deleted file mode 100644 index 1a223bc4..00000000 Binary files a/FULiveDemo/Assets.xcassets/renderView/download.imageset/download@2x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/renderView/download.imageset/download@3x.png b/FULiveDemo/Assets.xcassets/renderView/download.imageset/download@3x.png deleted file mode 100644 index 7086a47d..00000000 Binary files a/FULiveDemo/Assets.xcassets/renderView/download.imageset/download@3x.png and /dev/null differ diff --git a/FULiveDemo/Assets.xcassets/renderView/home icon.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/home icon.imageset/Contents.json deleted file mode 100644 index 0998e1e7..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/home icon.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "home icon .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "home icon @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "home icon @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/Contents.json deleted file mode 100644 index e3348171..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/play_icon.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "play_icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "play_icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "play_icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/Contents.json deleted file mode 100644 index 00a16665..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/resetItem.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "删除icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "删除icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "删除icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/Contents.json b/FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/Contents.json deleted file mode 100644 index 34082aed..00000000 --- a/FULiveDemo/Assets.xcassets/renderView/selectedBg.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "selectedBg.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "selectedBg@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "selectedBg@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/Contents.json" deleted file mode 100644 index c53ea0d9..00000000 --- "a/FULiveDemo/Assets.xcassets/renderView/\347\233\270\345\206\214icon.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "相册icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "相册icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "相册icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/Contents.json" deleted file mode 100644 index b5426385..00000000 --- "a/FULiveDemo/Assets.xcassets/renderView/\350\247\206\351\242\221icon.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "视频icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "视频icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "视频icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/Contents.json" "b/FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/Contents.json" deleted file mode 100644 index 738512c0..00000000 --- "a/FULiveDemo/Assets.xcassets/renderView/\351\200\211\346\213\251\347\233\270\345\206\214icon.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "选择相册icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "选择相册icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "选择相册icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Base.lproj/Main.storyboard b/FULiveDemo/Base.lproj/Main.storyboard deleted file mode 100644 index 6e13aa64..00000000 --- a/FULiveDemo/Base.lproj/Main.storyboard +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Config/BodyBeautyDefault.json b/FULiveDemo/Config/BodyBeautyDefault.json deleted file mode 100644 index d3b279b5..00000000 --- a/FULiveDemo/Config/BodyBeautyDefault.json +++ /dev/null @@ -1,57 +0,0 @@ -[{ - "name":"瘦身", - "type":0, - "value":0, - "iconName":"demo_icon_slimming", - "isSel":true, - "bundleKey":"BodySlimStrength" -}, -{ - "name":"长腿", - "type":1, - "value":0, - "iconName":"demo_icon_stovepipe", - "isSel":false, - "bundleKey":"LegSlimStrength" - }, - { - "name":"细腰", - "type":2, - "value":0, - "iconName":"demo_icon_thin_waist", - "isSel":false, - "bundleKey":"WaistSlimStrength" - }, - { - "name":"美肩", - "type":3, - "value":0.5, - "iconName":"demo_icon_shoulder", - "isSel":false, - "bundleKey":"ShoulderSlimStrength" - }, - { - "name":"美臀", - "type":4, - "value":0, - "iconName":"demo_icon_hip", - "isSel":false, - "bundleKey":"HipSlimStrength" - }, - { - "name":"小头", - "type":5, - "value":0, - "iconName":"demo_icon_little_head", - "isSel":false, - "bundleKey":"HeadSlim" - }, - { - "name":"瘦腿", - "type":6, - "value":0, - "iconName":"demo_icon_thin_leg", - "isSel":false, - "bundleKey":"LegSlim" - } -] diff --git a/FULiveDemo/Config/FULiveDefine.h b/FULiveDemo/Config/FULiveDefine.h deleted file mode 100755 index 435926e4..00000000 --- a/FULiveDemo/Config/FULiveDefine.h +++ /dev/null @@ -1,108 +0,0 @@ -// -// FULiveDefine.h -// FULive -// -// Created by L on 2018/8/1. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -#pragma mark - 宏 - -#define FUScreenWidth ([UIScreen mainScreen].bounds.size.width) - -#define FUScreenHeight ([UIScreen mainScreen].bounds.size.height) - -#define iPhoneXStyle ((FUScreenWidth == 375.f && FUScreenHeight == 812.f ? YES : NO) || (FUScreenWidth == 414.f && FUScreenHeight == 896.f ? YES : NO)) - -#define FUDocumentPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject - -#define FUStickersPath [FUDocumentPath stringByAppendingPathComponent:@"FUStickers"] - -#define FUStickerIconsPath [FUDocumentPath stringByAppendingPathComponent:@"FUStickerIcons"] - -#define FUStickerBundlesPath [FUDocumentPath stringByAppendingPathComponent:@"FUStickerBundles"] - -#define FUNSLocalizedString(Context,comment) [NSString stringWithFormat:@"%@", [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(Context) value:nil table:nil]] - -#define FUPicturePixelMaxSize ([FUManager shareManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh ? 12746752 : 5760000) - -#pragma mark - 常量 - -extern NSString * const FUPersistentBeautyKey; - -#pragma mark - 枚举 - -typedef NS_ENUM(NSUInteger, FUGroupType) { - FUGroupTypeFace = 0, - FUGroupTypeBody, - FUGroupTypeContentService -}; - -//typedef NS_ENUM(NSUInteger, FULiveModelType) { -// FULiveModelTypeBeautifyFace = 0, -// FULiveModelTypeMakeUp, -// FULiveModelTypeItems, -// FULiveModelTypeAnimoji, -// FULiveModelTypeHair, -// FULiveModelTypeLightMakeup, -// FULiveModelTypeARMarsk, -// FULiveModelTypeHilarious, -// FULiveModelTypePoster,//海报换脸 -// FULiveModelTypeExpressionRecognition, -// FULiveModelTypeMusicFilter, -// FULiveModelTypeHahaMirror, -// FULiveModelTypeBody, -// FULiveModelTypeWholeAvatar, -// FULiveModelTypeBGSegmentation, -// FULiveModelTypeGestureRecognition, -// FULiveModelTypeLvMu, -// FULiveModelTypeQSTickers -//}; - -typedef NS_ENUM(NSUInteger, FUModuleType) { - FUModuleTypeBeauty = 0, - FUModuleTypeMakeup, - FUModuleTypeSticker, - FUModuleTypeAnimoji, - FUModuleTypeHair, - FUModuleTypeLightMakeup, - FUModuleTypeARMask, - FUModuleTypeHilarious, - FUModuleTypePoster, - FUModuleTypeExpressionRecognition, - FUModuleTypeMusicFilter, - FUModuleTypeDistortingMirror, - FUModuleTypeBody, - FUModuleTypeWholeAvatar, - FUModuleTypeSegmentation, - FUModuleTypeGestureRecognition, - FUModuleTypeGreenScreen, - FUModuleTypeQualityTicker -}; - -/// AI模型分类 -typedef NS_OPTIONS(NSUInteger, FUAIModelType) { - FUAIModelTypeFace = 1 << 0, // 人脸 - FUAIModelTypeHuman = 1 << 1, // 人体 - FUAIModelTypeHand = 1 << 2 // 手势 -}; - -#pragma mark - 内联函数 - -static inline CGFloat FUHeightIncludeBottomSafeArea(CGFloat height) { - if (@available(iOS 11.0, *)) { - height += [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom; - } - return height; -} - -static inline NSString * FUCurrentDateString() { - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - formatter.dateFormat = @"YYYYMMddhhmmssSS"; - NSDate *date = [NSDate date]; - NSString *dateString = [formatter stringFromDate:date]; - return dateString; -} - diff --git a/FULiveDemo/Config/dataSource.plist b/FULiveDemo/Config/dataSource.plist deleted file mode 100644 index 1aaaa312..00000000 --- a/FULiveDemo/Config/dataSource.plist +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - itemName - 美颜 - maxFace - 4 - enble - - itemType - 0 - conpareCode - 0 - modules - - 1 - - items - - - - itemName - 美妆 - maxFace - 4 - enble - - itemType - 1 - conpareCode - 0 - modules - - 524288 - - items - - - - items - - resetItem - CatSparks - fu_zh_fenshu - sdlr - xlong_zh_fu - newy1 - redribbt - DaisyPig - sdlu - - itemName - 道具贴纸 - maxFace - 4 - enble - - itemType - 2 - conpareCode - 0 - modules - - 110 - - - - itemName - Animoji - maxFace - 4 - enble - - itemType - 3 - conpareCode - 0 - modules - - 16 - - items - - resetItem - cartoon_princess_Animoji - qgirl_Animoji - kaola_Animoji - wuxia_Animoji - baihu_Animoji - frog_Animoji - huangya_Animoji - hetun_Animoji - douniuquan_Animoji - hashiqi_Animoji - baimao_Animoji - kuloutou_Animoji - - - - itemName - 美发 - maxFace - 4 - enble - - itemType - 4 - conpareCode - 0 - modules - - 1048576 - - items - - resetItem - icon_gradualchangehair_01 - icon_gradualchangehair_02 - icon_gradualchangehair_03 - icon_gradualchangehair_04 - icon_gradualchangehair_05 - hair_color_1 - hair_color_2 - hair_color_3 - hair_color_4 - hair_color_5 - hair_color_6 - hair_color_7 - hair_color_8 - - - - itemName - 轻美妆 - maxFace - 4 - enble - - itemType - 5 - conpareCode - 1 - modules - - 8 - - items - - - - itemName - AR面具 - maxFace - 4 - enble - - itemType - 6 - conpareCode - 0 - modules - - 96 - - items - - resetItem - bluebird - lanhudie - fenhudie - tiger_huang - tiger_bai - baozi - tiger - xiongmao - - - - itemName - 搞笑大头 - maxFace - 1 - enble - - itemType - 7 - conpareCode - 1 - modules - - 32768 - - items - - resetItem - big_head_facewarp1 - big_head_facewarp2 - big_head_facewarp4 - big_head_facewarp5 - big_head_facewarp6 - big_head_facewarp3 - - - - itemName - 海报换脸 - maxFace - 4 - enble - - itemType - 8 - conpareCode - 0 - modules - - 8388608 - - items - - poster1 - poster2 - poster3 - poster4 - poster5 - poster6 - poster7 - poster8 - - - - itemName - 表情识别 - maxFace - 4 - enble - - itemType - 9 - conpareCode - 0 - modules - - 2058 - - items - - resetItem - future_warrior - jet_mask - sdx2 - luhantongkuan_ztt_fu - qingqing_ztt_fu - xiaobianzi_zh_fu - xiaoxueshen_ztt_fu - - - - itemName - 音乐滤镜 - maxFace - 4 - enble - - itemType - 10 - conpareCode - 0 - modules - - 131072 - - items - - resetItem - douyin_01 - douyin_02 - - - - itemName - 哈哈镜 - maxFace - 4 - enble - - itemType - 11 - conpareCode - 0 - modules - - 65536 - - items - - resetItem - facewarp2 - facewarp3 - facewarp4 - facewarp5 - facewarp6 - - - - - - itemName - 美体 - maxFace - 4 - enble - - itemType - 12 - conpareCode - 1 - modules - - 32 - - items - - - - itemName - 全身Avatar - maxFace - 4 - enble - - itemType - 13 - conpareCode - 1 - modules - - 448 - - items - - avatar_nan_image - avatar_nv_image - - - - itemName - 人像分割 - maxFace - 1 - enble - - itemType - 14 - conpareCode - 0 - modules - - 256 - - items - - human_outline_740 - boyfriend1_740 - boyfriend3_740 - boyfriend2_740 - hez_ztt_fu - gufeng_zh_fu - xiandai_ztt_fu - sea_lm_fu - ice_lm_fu - - - - itemName - 手势识别 - maxFace - 4 - enble - - itemType - 15 - conpareCode - 0 - modules - - 512 - - items - - resetItem - ctrl_rain - ctrl_snow - ctrl_flower - ssd_thread_korheart - ssd_thread_six - ssd_thread_cute - - - - itemName - 绿幕抠像 - maxFace - 4 - enble - - itemType - 16 - conpareCode - 1 - modules - - 512 - - - - - - itemName - 精品贴纸 - maxFace - 4 - enble - - itemType - 17 - conpareCode - 0 - animationIcon - - animationNamed - tiezhi_data - modules - - 110 - - items - - - - - diff --git a/FULiveDemo/Config/homepage_data_source b/FULiveDemo/Config/homepage_data_source deleted file mode 100644 index e69de29b..00000000 diff --git a/FULiveDemo/Config/lightMakeup.json b/FULiveDemo/Config/lightMakeup.json deleted file mode 100644 index e7e00cda..00000000 --- a/FULiveDemo/Config/lightMakeup.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "data": [{ - "name": "卸妆", - "imageStr": "makeup_noitem", - "isSel": true, - "value": 0.0, - "selectedFilter": "origin", - "selectedFilterLevel": 1.0, - "makeups": [{ - "makeType": 0, - "namaValueStr": "makeup_intensity_lip", - "value": 0.0 - }, - { - "makeType": 1, - "namaValueStr": "makeup_intensity_blusher", - "value": 0.0 - }, - { - "makeType": 2, - "namaValueStr": "makeup_intensity_eyeBrow", - "value": 0.0 - }, - { - "makeType": 3, - "namaValueStr": "makeup_intensity_eye", - "value": 0.0 - }, - { - "makeType": 4, - "namaValueStr": "makeup_intensity_eyeLiner", - "value": 0.0 - }, - { - "makeType": 5, - "namaValueStr": "makeup_intensity_eyelash", - "value": 0.0 - }, - { - "makeType": 6, - "namaValueStr": "makeup_intensity_pupil", - "value": 0.0 - }, - - { - "makeType": 4, - "namaValueStr": "makeup_intensity_eyeLiner", - "value": 0.0 - }, - { - "makeType": 5, - "namaValueStr": "makeup_intensity_eyelash", - "value": 0.0 - }, - { - "makeType": 6, - "namaValueStr": "makeup_intensity_pupil", - "value": 0.0 - } - ] - }, - - { - "name": "桃花", - "imageStr": "demo_makeup_peachblossom", - "value": 1.0, - "selectedFilter": "fennen3", - "selectedFilterLevel": 1.0, - "isSel": false, - "makeups": [{ - "makeType": 1, - "namaValueStr": "makeup_intensity_lip", - "value": 0.9, - "colorStr": "makeup_lip_color", - "colorStrV": [0.90, 0.21, 0.49, 0.3], - "is_two_color": 0, - "lip_type": 1 - }, - { - "makeType": 2, - "namaBundle": "mu_blush_01", - "namaValueStr": "makeup_intensity_blusher", - "value": 0.9 - }, - { - "makeType": 3, - "namaBundle": "mu_eyebrow_01", - "namaValueStr": "makeup_intensity_eyeBrow", - "value": 0.9 - }, - { - "makeType": 4, - "namaBundle": "mu_eyeshadow_01", - "namaValueStr": "makeup_intensity_eye", - "value": 0.9 - } - ] - }, - - { - "name": "西柚", - "imageStr": "demo_makeup_grapefruit", - "value": 1.0, - "selectedFilter": "lengsediao4", - "selectedFilterLevel": 0.7, - "isSel": false, - "makeups": [{ - "makeType": 1, - "namaValueStr": "makeup_intensity_lip", - "value": 0.7, - "colorStr": "makeup_lip_color", - "colorStrV": [0.94, 0.29, 0.11, 0.4], - "is_two_color": 0, - "lip_type": 1 - }, - { - "makeType": 2, - "namaBundle": "mu_blush_23", - "namaValueStr": "makeup_intensity_blusher", - "value": 0.7 - }, - { - "makeType": 3, - "namaBundle": "mu_eyebrow_19", - "namaValueStr": "makeup_intensity_eyeBrow", - "value": 0.5 - }, - { - "makeType": 4, - "namaBundle": "mu_eyeshadow_21", - "namaValueStr": "makeup_intensity_eye", - "value": 0.7 - } - ] - }, - - { - "name": "男友", - "imageStr": "demo_makeup_boyfriend", - "value": 1.0, - "selectedFilter": "xiaoqingxin3", - "selectedFilterLevel": 0.9, - "isSel": false, - "makeups": [{ - "makeType": 1, - "namaValueStr": "makeup_intensity_lip", - "value": 0.7, - "colorStr": "makeup_lip_color", - "colorStrV": [0.88, 0.55, 0.51, 0.7], - "is_two_color": 0, - "lip_type": 1 - }, - { - "makeType": 2, - "namaBundle": "mu_blush_20", - "namaValueStr": "makeup_intensity_blusher", - "value": 0.7 - }, - { - "makeType": 3, - "namaBundle": "mu_eyebrow_16", - "namaValueStr": "makeup_intensity_eyeBrow", - "value": 0.5 - }, - { - "makeType": 4, - "namaBundle": "mu_eyeshadow_18", - "namaValueStr": "makeup_intensity_eye", - "value": 0.7 - } - ] - }, - { - "name": "清透", - "imageStr": "demo_makeup_clear", - "value": 1.0, - "selectedFilter": "xiaoqingxin6", - "selectedFilterLevel": 0.8, - "isSel": false, - "makeups": [{ - "makeType": 1, - "namaValueStr": "makeup_intensity_lip", - "value": 0.7, - "colorStr": "makeup_lip_color", - "colorStrV": [0.89, 0.59, 0.58, 0.50], - "colorStr2": "makeup_lip_color2", - "colorStr2V": "", - "is_two_color": 0, - "lip_type": 1 - }, - { - "makeType": 2, - "namaBundle": "mu_blush_22", - "namaValueStr": "makeup_intensity_blusher", - "value": 0.7 - }, - { - "makeType": 3, - "namaBundle": "mu_eyebrow_18", - "namaValueStr": "makeup_intensity_eyeBrow", - "value": 0.5 - }, - { - "makeType": 4, - "namaBundle": "mu_eyeshadow_20", - "namaValueStr": "makeup_intensity_eye", - "value": 0.7 - } - ] - } - - ] -} diff --git a/FULiveDemo/Config/makeup.json b/FULiveDemo/Config/makeup.json deleted file mode 100644 index 82b84b31..00000000 --- a/FULiveDemo/Config/makeup.json +++ /dev/null @@ -1,2169 +0,0 @@ -{ - "data": [ - { - "name": "粉底", - "sgArr": [ - { - "makeType": 0, - "iconStr": "makeup_noitem", - "namaValueType": 0, - "value": 0.0, - "colorStr": "makeup_foundation_color", - "colorStrV": [ - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - { - "makeType": 0, - "iconStr": "mu_style_foundation_01", - "namaBundleType": 0, - "namaValueType": 0, - "namaBundle": "mu_style_foundation_01", - "colorStr": "makeup_foundation_color", - "value": 1.0, - "colors": [ - [ - 0.82, - 0.71, - 0.62, - 1.0 - ], - [ - 0.87, - 0.74, - 0.69, - 1.0 - ], - [ - 0.91, - 0.81, - 0.74, - 1.0 - ], - [ - 0.8, - 0.74, - 0.65, - 1.0 - ], - [ - 0.74, - 0.62, - 0.56, - 1.0 - ] - ], - "defaultColorIndex": 0 - }, - { - "makeType": 0, - "iconStr": "mu_style_foundation_01", - "namaBundleType": 0, - "namaValueType": 0, - "namaBundle": "mu_style_foundation_01", - "colorStr": "makeup_foundation_color", - "value": 1.0, - "colors": [ - [ - 0.82, - 0.71, - 0.62, - 1.0 - ], - [ - 0.87, - 0.74, - 0.69, - 1.0 - ], - [ - 0.91, - 0.81, - 0.74, - 1.0 - ], - [ - 0.8, - 0.74, - 0.65, - 1.0 - ], - [ - 0.74, - 0.62, - 0.56, - 1.0 - ] - ], - "defaultColorIndex": 1 - }, - { - "makeType": 0, - "iconStr": "mu_style_foundation_01", - "namaBundleType": 0, - "namaValueType": 0, - "namaBundle": "mu_style_foundation_01", - "colorStr": "makeup_foundation_color", - "value": 1.0, - "colors": [ - [ - 0.82, - 0.71, - 0.62, - 1.0 - ], - [ - 0.87, - 0.74, - 0.69, - 1.0 - ], - [ - 0.91, - 0.81, - 0.74, - 1.0 - ], - [ - 0.8, - 0.74, - 0.65, - 1.0 - ], - [ - 0.74, - 0.62, - 0.56, - 1.0 - ] - ], - "defaultColorIndex": 2 - }, - { - "makeType": 0, - "iconStr": "mu_style_foundation_01", - "namaBundleType": 0, - "namaValueType": 0, - "namaBundle": "mu_style_foundation_01", - "colorStr": "makeup_foundation_color", - "value": 1.0, - "colors": [ - [ - 0.82, - 0.71, - 0.62, - 1.0 - ], - [ - 0.87, - 0.74, - 0.69, - 1.0 - ], - [ - 0.91, - 0.81, - 0.74, - 1.0 - ], - [ - 0.8, - 0.74, - 0.65, - 1.0 - ], - [ - 0.74, - 0.62, - 0.56, - 1.0 - ] - ], - "defaultColorIndex": 3 - }, - { - "makeType": 0, - "iconStr": "mu_style_foundation_01", - "namaBundleType": 0, - "namaValueType": 0, - "namaBundle": "mu_style_foundation_01", - "colorStr": "makeup_foundation_color", - "value": 1.0, - "colors": [ - [ - 0.82, - 0.71, - 0.62, - 1.0 - ], - [ - 0.87, - 0.74, - 0.69, - 1.0 - ], - [ - 0.91, - 0.81, - 0.74, - 1.0 - ], - [ - 0.8, - 0.74, - 0.65, - 1.0 - ], - [ - 0.74, - 0.62, - 0.56, - 1.0 - ] - ], - "defaultColorIndex": 4 - } - ] - }, - { - "name": "口红", - "sgArr": [ - { - "makeType": 1, - "iconStr": "makeup_noitem", - "namaValueType": 1, - "value": 0.0 - }, - { - "makeType": 1, - "iconStr": "demo_style_lip_01", - "namaBundleType": 1, - "namaValueType": 1, - "namaBundle": "mu_style_lip_01", - "is_two_color": 0, - "lip_type": 0, - "value": 1.0, - "colorStr": "makeup_lip_color", - "colors": [ - [ - 0.60, - 0.16, - 0.16, - 1.0 - ], - [ - 0.84, - 0.16, - 0.27, - 1.0 - ], - [ - 0.84, - 0.26, - 0.16, - 1.0 - ], - [ - 0.60, - 0.11, - 0.23, - 1.0 - ], - [ - 0.81, - 0.31, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "雾面" - }, - { - "makeType": 1, - "iconStr": "demo_style_lip_03", - "namaBundleType": 1, - "namaValueType": 1, - "namaBundle": "mu_style_lip_03", - "lip_type": 2, - "value": 1.0, - "colorStr": "makeup_lip_color", - "colors": [ - [ - 0.60, - 0.16, - 0.16, - 1.0 - ], - [ - 0.84, - 0.16, - 0.27, - 1.0 - ], - [ - 0.84, - 0.26, - 0.16, - 1.0 - ], - [ - 0.60, - 0.11, - 0.23, - 1.0 - ], - [ - 0.81, - 0.31, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "润泽Ⅰ" - }, - { - "makeType": 1, - "iconStr": "demo_style_lip_02", - "namaBundleType": 1, - "namaValueType": 1, - "namaBundle": "mu_style_lip_02", - "is_two_color": 0, - "lip_type": 7, - "value": 1.0, - "colorStr": "makeup_lip_color_v2", - "colors": [ - [ - 0.60, - 0.16, - 0.16, - 1.0 - ], - [ - 0.84, - 0.16, - 0.27, - 1.0 - ], - [ - 0.84, - 0.26, - 0.16, - 1.0 - ], - [ - 0.60, - 0.11, - 0.23, - 1.0 - ], - [ - 0.81, - 0.31, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "润泽Ⅱ" - }, - { - "makeType": 1, - "iconStr": "demo_style_lip_04", - "namaBundleType": 1, - "namaValueType": 1, - "namaBundle": "mu_style_lip_04", - "lip_type": 3, - "value": 1.0, - "colorStr": "makeup_lip_color", - "colors": [ - [ - 0.60, - 0.16, - 0.16, - 1.0 - ], - [ - 0.84, - 0.16, - 0.27, - 1.0 - ], - [ - 0.84, - 0.26, - 0.16, - 1.0 - ], - [ - 0.60, - 0.11, - 0.23, - 1.0 - ], - [ - 0.81, - 0.31, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "珠光" - }, - { - "makeType": 1, - "iconStr": "demo_style_lip_05", - "namaBundleType": 1, - "namaValueType": 1, - "namaBundle": "mu_style_lip_05", - "lip_type": 0, - "is_two_color": 1, - "value": 1.0, - "colorStr": "makeup_lip_color", - "colors": [ - [ - 0.60, - 0.16, - 0.16, - 1.0 - ], - [ - 0.84, - 0.16, - 0.27, - 1.0 - ], - [ - 0.84, - 0.26, - 0.16, - 1.0 - ], - [ - 0.60, - 0.11, - 0.23, - 1.0 - ], - [ - 0.81, - 0.31, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "咬唇" - } - ] - }, - { - "name": "腮红", - "sgArr": [ - { - "makeType": 2, - "iconStr": "makeup_noitem", - "namaValueType": 2, - "value": 0.0 - }, - { - "makeType": 2, - "iconStr": "demo_style_blush_01", - "namaBundleType": 2, - "namaValueType": 2, - "namaBundle": "mu_style_blush_01", - "value": 1.0, - "colorStr": "makeup_blusher_color", - "colors": [ - [ - 0.96, - 0.44, - 0.42, - 1.0 - ], - [ - 0.93, - 0.35, - 0.43, - 1.0 - ], - [ - 0.89, - 0.26, - 0.28, - 1.0 - ], - [ - 0.89, - 0.26, - 0.40, - 1.0 - ], - [ - 1.0, - 0.39, - 0.32, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "苹果肌" - }, - { - "makeType": 2, - "iconStr": "demo_style_blush_02", - "namaBundleType": 2, - "namaValueType": 2, - "namaBundle": "mu_style_blush_02", - "value": 1.0, - "colorStr": "makeup_blusher_color", - "colors": [ - [ - 0.96, - 0.44, - 0.42, - 1.0 - ], - [ - 0.93, - 0.35, - 0.43, - 1.0 - ], - [ - 0.89, - 0.26, - 0.28, - 1.0 - ], - [ - 0.89, - 0.26, - 0.40, - 1.0 - ], - [ - 1.0, - 0.39, - 0.32, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "扇形" - }, - { - "makeType": 2, - "iconStr": "demo_style_blush_03", - "namaBundleType": 2, - "namaValueType": 2, - "namaBundle": "mu_style_blush_03", - "value": 1.0, - "colorStr": "makeup_blusher_color", - "colors": [ - [ - 0.96, - 0.44, - 0.42, - 1.0 - ], - [ - 0.93, - 0.35, - 0.43, - 1.0 - ], - [ - 0.89, - 0.26, - 0.28, - 1.0 - ], - [ - 0.89, - 0.26, - 0.40, - 1.0 - ], - [ - 1.0, - 0.39, - 0.32, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "眼角" - }, - { - "makeType": 2, - "iconStr": "demo_style_blush_04", - "namaBundleType": 2, - "namaValueType": 2, - "namaBundle": "mu_style_blush_04", - "value": 1.0, - "colorStr": "makeup_blusher_color", - "colors": [ - [ - 0.96, - 0.44, - 0.42, - 1.0 - ], - [ - 0.93, - 0.35, - 0.43, - 1.0 - ], - [ - 0.89, - 0.26, - 0.28, - 1.0 - ], - [ - 0.89, - 0.26, - 0.40, - 1.0 - ], - [ - 1.0, - 0.39, - 0.32, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "微醺" - } - ] - }, - { - "name": "眉毛", - "sgArr": [ - { - "makeType": 3, - "iconStr": "makeup_noitem", - "namaValueType": 3, - "brow_warp": 0, - "value": 0.0 - }, - { - "makeType": 3, - "iconStr": "demo_style_eyebrow_01", - "namaBundleType": 3, - "namaValueType": 3, - "namaBundle": "mu_style_eyebrow_01", - "brow_warp": 0, - "brow_warp_type": 0, - "value": 1.0, - "colorStr": "makeup_eyeBrow_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "柳叶眉" - }, - { - "makeType": 3, - "iconStr": "demo_style_eyebrow_08", - "namaBundleType": 3, - "namaValueType": 3, - "namaBundle": "mu_style_eyebrow_02", - "brow_warp": 0, - "brow_warp_type": 1, - "value": 1.0, - "colorStr": "makeup_eyeBrow_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "野生眉" - }, - { - "makeType": 3, - "iconStr": "demo_style_eyebrow_09", - "namaBundleType": 3, - "namaValueType": 3, - "namaBundle": "mu_style_eyebrow_03", - "brow_warp": 0, - "brow_warp_type": 2, - "value": 1.0, - "colorStr": "makeup_eyeBrow_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "古典眉" - }, - { - "makeType": 3, - "iconStr": "demo_style_eyebrow_02", - "namaBundleType": 3, - "namaValueType": 3, - "namaBundle": "mu_style_eyebrow_04", - "brow_warp": 0, - "brow_warp_type": 3, - "value": 1.0, - "colorStr": "makeup_eyeBrow_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "标准眉" - } - ] - }, - { - "name": "眼影", - "sgArr": [ - { - "makeType": 4, - "iconStr": "makeup_noitem", - "namaValueType": 4, - "value": 0.0 - }, - { - "makeType": 4, - "iconStr": "demo_style_eyeshadow_01", - "namaBundleType": 4, - "namaValueType": 4, - "namaBundle": "mu_style_eyeshadow_01", - "value": 1.0, - "colorStr": "makeup_eye_color", - "colors": [ - [ - 1.0, - 0.43, - 0.44, - 1.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.88, - 0.32, - 0.32, - 1.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.90, - 0.55, - 0.36, - 1.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.78, - 0.24, - 0.37, - 1.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 1.0, - 0.42, - 0.49, - 1.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0 - ] - ], - "defaultColorIndex": 0, - "title": "单色眼影" - }, - { - "makeType": 4, - "iconStr": "demo_style_eyeshadow_02", - "namaBundleType": 4, - "namaValueType": 4, - "namaBundle": "mu_style_eyeshadow_02", - "value": 1.0, - "colorStr": "makeup_eye_color", - "colors": [ - [ - 1.0, - 0.72, - 0.36, - 1.0, - 0.93, - 0.45, - 0.25, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.89, - 0.61, - 0.41, - 1.0, - 0.86, - 0.26, - 0.07, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.98, - 0.75, - 0.52, - 1.0, - 0.66, - 0.28, - 0.23, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 1.0, - 0.58, - 0.40, - 1.0, - 0.72, - 0.38, - 0.14, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 1.0, - 0.62, - 0.55, - 1.0, - 0.56, - 0.17, - 0.17, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ] - ], - "defaultColorIndex": 0, - "title": "双色眼影Ⅰ" - }, - { - "makeType": 4, - "iconStr": "demo_style_eyeshadow_03", - "namaBundleType": 4, - "namaValueType": 4, - "namaBundle": "mu_style_eyeshadow_03", - "value": 1.0, - "colorStr": "makeup_eye_color", - "colors": [ - [ - 1.0, - 0.72, - 0.36, - 1.0, - 0.93, - 0.45, - 0.25, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.89, - 0.61, - 0.41, - 1.0, - 0.86, - 0.26, - 0.07, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.98, - 0.75, - 0.52, - 1.0, - 0.66, - 0.28, - 0.23, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 1.0, - 0.58, - 0.40, - 1.0, - 0.72, - 0.38, - 0.14, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 1.0, - 0.62, - 0.55, - 1.0, - 0.56, - 0.17, - 0.17, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ] - ], - "defaultColorIndex": 0, - "title": "双色眼影Ⅱ" - }, - { - "makeType": 4, - "iconStr": "demo_style_eyeshadow_04", - "namaBundleType": 4, - "namaValueType": 4, - "namaBundle": "mu_style_eyeshadow_04", - "value": 1.0, - "colorStr": "makeup_eye_color", - "colors": [ - [ - 0.82, - 0.15, - 0.24, - 1.0, - 1.0, - 0.92, - 0.74, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.88, - 0.32, - 0.32, - 1.0, - 0.97, - 0.86, - 0.78, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.90, - 0.55, - 0.36, - 1.0, - 0.98, - 0.8, - 0.76, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 0.78, - 0.24, - 0.37, - 1.0, - 0.92, - 0.91, - 0.84, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ], - [ - 1.0, - 0.43, - 0.44, - 1.0, - 0.99, - 0.78, - 0.84, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0 - ] - ], - "defaultColorIndex": 0, - "title": "双色眼影Ⅲ" - }, - { - "makeType": 4, - "iconStr": "demo_style_eyeshadow_05", - "namaBundleType": 4, - "namaValueType": 4, - "namaBundle": "mu_style_eyeshadow_05", - "value": 1.0, - "colorStr": "makeup_eye_color", - "colors": [ - [ - 1.0, - 0.72, - 0.36, - 1.0, - 1.0, - 0.43, - 0.44, - 1.0, - 0.72, - 0.38, - 0.15, - 1.0 - ], - [ - 0.89, - 0.61, - 0.41, - 1.0, - 0.78, - 0.24, - 0.37, - 1.0, - 0.56, - 0.17, - 0.17, - 1.0 - ], - [ - 0.98, - 0.75, - 0.52, - 1.0, - 0.90, - 0.55, - 0.36, - 1.0, - 0.93, - 0.45, - 0.25, - 1.0 - ], - [ - 1.0, - 0.58, - 0.40, - 1.0, - 0.88, - 0.32, - 0.32, - 1.0, - 0.66, - 0.28, - 0.23, - 1.0 - ], - [ - 1.0, - 0.62, - 0.55, - 1.0, - 1.0, - 0.42, - 0.49, - 1.0, - 0.86, - 0.26, - 0.07, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "三色眼影Ⅰ" - }, - { - "makeType": 4, - "iconStr": "demo_style_eyeshadow_06", - "namaBundleType": 4, - "namaValueType": 4, - "namaBundle": "mu_style_eyeshadow_06", - "value": 1.0, - "colorStr": "makeup_eye_color", - "colors": [ - [ - 1.0, - 0.43, - 0.44, - 1.0, - 0.66, - 0.28, - 0.23, - 1.0, - 1.0, - 0.92, - 0.74, - 1.0 - ], - [ - 0.88, - 0.32, - 0.32, - 1.0, - 0.69, - 0.25, - 0.25, - 1.0, - 0.98, - 0.8, - 0.76, - 1.0 - ], - [ - 0.90, - 0.55, - 0.36, - 1.0, - 0.72, - 0.38, - 0.15, - 1.0, - 0.97, - 0.86, - 0.78, - 1.0 - ], - [ - 1.0, - 0.58, - 0.40, - 1.0, - 0.56, - 0.17, - 0.17, - 1.0, - 0.99, - 0.78, - 0.84, - 1.0 - ], - [ - 1.0, - 0.62, - 0.55, - 1.0, - 0.86, - 0.26, - 0.07, - 1.0, - 0.92, - 0.91, - 0.84, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "三色眼影Ⅱ" - } - ] - }, - { - "name": "眼线", - "sgArr": [ - { - "makeType": 5, - "iconStr": "makeup_noitem", - "namaValueType": 5, - "value": 0.0 - }, - { - "makeType": 5, - "iconStr": "demo_style_eyeliner_01", - "namaBundleType": 5, - "namaValueType": 5, - "namaBundle": "mu_style_eyeliner_01", - "value": 1.0, - "colorStr": "makeup_eyeLiner_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "猫眼" - }, - { - "makeType": 5, - "iconStr": "demo_style_eyeliner_02", - "namaBundleType": 5, - "namaValueType": 5, - "namaBundle": "mu_style_eyeliner_02", - "value": 1.0, - "colorStr": "makeup_eyeLiner_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "下垂眼" - }, - { - "makeType": 5, - "iconStr": "demo_style_eyeliner_03", - "namaBundleType": 5, - "namaValueType": 5, - "namaBundle": "mu_style_eyeliner_03", - "value": 1.0, - "colorStr": "makeup_eyeLiner_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "拉开眼距" - }, - { - "makeType": 5, - "iconStr": "demo_style_eyeliner_04", - "namaBundleType": 5, - "namaValueType": 5, - "namaBundle": "mu_style_eyeliner_04", - "value": 1.0, - "colorStr": "makeup_eyeLiner_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "拉近眼距" - }, - { - "makeType": 5, - "iconStr": "demo_style_eyeliner_05", - "namaBundleType": 5, - "namaValueType": 5, - "namaBundle": "mu_style_eyeliner_05", - "value": 1.0, - "colorStr": "makeup_eyeLiner_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "长眼" - }, - { - "makeType": 5, - "iconStr": "demo_style_eyeliner_06", - "namaBundleType": 5, - "namaValueType": 5, - "namaBundle": "mu_style_eyeliner_06", - "value": 1.0, - "colorStr": "makeup_eyeLiner_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "圆眼" - } - ] - }, - { - "name": "睫毛", - "sgArr": [ - { - "makeType": 6, - "iconStr": "makeup_noitem", - "namaValueType": 6, - "value": 0.0 - }, - { - "makeType": 6, - "iconStr": "demo_style_eyelash_01", - "namaBundleType": 6, - "namaValueType": 6, - "namaBundle": "mu_style_eyelash_01", - "value": 1.0, - "colorStr": "makeup_eyelash_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "自然型Ⅰ" - }, - { - "makeType": 6, - "iconStr": "demo_style_eyelash_02", - "namaBundleType": 6, - "namaValueType": 6, - "namaBundle": "mu_style_eyelash_02", - "value": 1.0, - "colorStr": "makeup_eyelash_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "自然型Ⅱ" - }, - { - "makeType": 6, - "iconStr": "demo_style_eyelash_03", - "namaBundleType": 6, - "namaValueType": 6, - "namaBundle": "mu_style_eyelash_03", - "value": 1.0, - "colorStr": "makeup_eyelash_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "浓密型Ⅰ" - }, - { - "makeType": 6, - "iconStr": "demo_style_eyelash_04", - "namaBundleType": 6, - "namaValueType": 6, - "namaBundle": "mu_style_eyelash_04", - "value": 1.0, - "colorStr": "makeup_eyelash_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "浓密型Ⅱ" - }, - { - "makeType": 6, - "iconStr": "demo_style_eyelash_05", - "namaBundleType": 6, - "namaValueType": 6, - "namaBundle": "mu_style_eyelash_05", - "value": 1.0, - "colorStr": "makeup_eyelash_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "夸张型Ⅰ" - }, - { - "makeType": 6, - "iconStr": "demo_style_eyelash_06", - "namaBundleType": 6, - "namaValueType": 6, - "namaBundle": "mu_style_eyelash_06", - "value": 1.0, - "colorStr": "makeup_eyelash_color", - "colors": [ - [ - 0.36, - 0.10, - 0.10, - 1.0 - ], - [ - 0.33, - 0.09, - 0.18, - 1.0 - ], - [ - 0.28, - 0.16, - 0.08, - 1.0 - ], - [ - 0.21, - 0.05, - 0.02, - 1.0 - ], - [ - 0.31, - 0.17, - 0.22, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "夸张型Ⅱ" - } - ] - }, - { - "name": "高光", - "sgArr": [ - { - "makeType": 7, - "namaValueType": 7, - "iconStr": "makeup_noitem", - "value": 0.0 - }, - { - "makeType": 7, - "iconStr": "demo_style_highlight_01", - "namaBundleType": 7, - "namaValueType": 7, - "namaBundle": "mu_style_highlight_01", - "value": 1.0, - "colorStr": "makeup_highlight_color", - "colors": [ - [ - 0.98, - 0.95, - 0.94, - 1.0 - ], - [ - 1.0, - 0.97, - 0.93, - 1.0 - ], - [ - 1.0, - 0.96, - 0.93, - 1.0 - ], - [ - 0.97, - 0.95, - 0.95, - 1.0 - ], - [ - 0.99, - 0.98, - 0.95, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "Ⅰ号" - }, - { - "makeType": 7, - "iconStr": "demo_style_highlight_02", - "namaBundleType": 7, - "namaValueType": 7, - "namaBundle": "mu_style_highlight_02", - "value": 1.0, - "colorStr": "makeup_highlight_color", - "colors": [ - [ - 0.98, - 0.95, - 0.94, - 1.0 - ], - [ - 1.0, - 0.97, - 0.93, - 1.0 - ], - [ - 1.0, - 0.96, - 0.93, - 1.0 - ], - [ - 0.97, - 0.95, - 0.95, - 1.0 - ], - [ - 0.99, - 0.98, - 0.95, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "Ⅱ号" - } - ] - }, - { - "name": "阴影", - "sgArr": [ - { - "makeType": 8, - "iconStr": "makeup_noitem", - "namaValueType": 8, - "value": 0.0 - }, - { - "makeType": 8, - "iconStr": "demo_style_contour_01", - "namaBundleType": 8, - "namaValueType": 8, - "namaBundle": "mu_style_contour_01", - "value": 1.0, - "colorStr": "makeup_shadow_color", - "colors": [ - [ - 0.33, - 0.16, - 0.09, - 1.0 - ], - [ - 0.41, - 0.22, - 0.15, - 1.0 - ], - [ - 0.34, - 0.1, - 0.1, - 1.0 - ], - [ - 0.4, - 0.12, - 0.18, - 1.0 - ], - [ - 0.32, - 0.23, - 0.16, - 1.0 - ] - ], - "defaultColorIndex": 0 - } - ] - }, - { - "name": "美瞳", - "sgArr": [ - { - "makeType": 9, - "iconStr": "makeup_noitem", - "namaValueType": 9, - "value": 0.0 - }, - { - "makeType": 9, - "iconStr": "demo_style_eyepupil_01", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_01", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [ - [ - 0.33, - 0.13, - 0.06, - 1.0 - ], - [ - 0.61, - 0.18, - 0.25, - 1.0 - ], - [ - 0.73, - 0.51, - 0.11, - 1.0 - ], - [ - 0.13, - 0.72, - 0.72, - 1.0 - ], - [ - 0.39, - 0.64, - 0.43, - 1.0 - ] - ], - "defaultColorIndex": 0, - "title": "蜜糖" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_03", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_03", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "奶茶" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_04", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_04", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "水波" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_05", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_05", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "鎏金" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_06", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_06", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "孔雀" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_07", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_07", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "星河" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_08", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_08", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "落目" - },{ - "makeType": 9, - "iconStr": "demo_style_eyepupil_09", - "namaBundleType": 9, - "namaValueType": 9, - "namaBundle": "mu_style_eyepupil_09", - "value": 1.0, - "colorStr": "makeup_pupil_color", - "colors": [], - "defaultColorIndex": 0, - "title": "极光" - } - ] - } - ] -} diff --git a/FULiveDemo/Config/makeup_whole.json b/FULiveDemo/Config/makeup_whole.json deleted file mode 100644 index 28f381dd..00000000 --- a/FULiveDemo/Config/makeup_whole.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "data": [ - { - "name": "卸妆", - "imageStr": "makeup_noitem", - "isSel": true, - "value": 0.0, - "makeupBundle": "xiezhuan", - "isAllowedEdit" : true - }, - { - "name": "嗲嗲兔", - "imageStr": "demo_combination_rabbit", - "value": 0.7, - "isSel": false, - "makeupBundle": "diadiatu", - "isCombined" : true, - "selectedFilterLevel" : 0.68 - }, - { - "name": "冻龄", - "imageStr": "demo_combination_freezing_age", - "value": 0.7, - "isSel": false, - "makeupBundle": "dongling", - "isCombined" : true, - "selectedFilterLevel" : 0.68 - }, - { - "name": "国风", - "imageStr": "demo_combination_guo_feng", - "value": 0.7, - "isSel": false, - "makeupBundle": "guofeng", - "isCombined" : true, - "selectedFilterLevel" : 0.6 - }, - { - "name": "混血", - "imageStr": "demo_combination_mixed_race", - "value": 0.7, - "isSel": false, - "makeupBundle": "hunxie", - "isCombined" : true, - "selectedFilterLevel" : 0.6 - }, - { - "name": "减龄", - "imageStr": "demo_combination_age", - "value": 0.7, - "isSel": false, - "makeupBundle": "jianling", - "selectedFilter":"zhiganhui1" - }, - { - "name": "暖冬", - "imageStr": "demo_combination_warm_winter", - "value": 0.7, - "isSel": false, - "makeupBundle": "nuandong", - "selectedFilter":"zhiganhui2" - }, - { - "name": "红枫", - "imageStr": "demo_combination_red_maple", - "value": 0.7, - "isSel": false, - "makeupBundle": "hongfeng", - "selectedFilter":"zhiganhui3" - }, - { - "name": "Rose", - "imageStr": "demo_combination_rose", - "value": 0.7, - "isSel": false, - "makeupBundle": "Rose", - "selectedFilter":"zhiganhui2" - }, - { - "name": "少女", - "imageStr": "demo_combination_girl", - "value": 0.7, - "isSel": false, - "makeupBundle": "shaonv", - "selectedFilter":"zhiganhui4" - }, - { - "name": "紫韵", - "imageStr": "demo_combination_purple_rhyme", - "value": 0.7, - "isSel": false, - "makeupBundle": "ziyun", - "selectedFilter":"zhiganhui1" - }, - { - "name": "厌世猫", - "imageStr": "demo_combination_bored_cat", - "value": 0.7, - "isSel": false, - "makeupBundle": "yanshimao", - "selectedFilter":"zhiganhui5" - }, - { - "name": "人鱼", - "imageStr": "demo_combination_mermaid", - "value": 0.7, - "isSel": false, - "makeupBundle": "renyu", - "selectedFilter":"zhiganhui1" - }, - { - "name": "初秋", - "imageStr": "demo_combination_early_autumn", - "value": 0.7, - "isSel": false, - "makeupBundle": "chuqiu", - "selectedFilter":"zhiganhui6" - }, - { - "name": "千纸鹤", - "imageStr": "demo_combination_paper_cranes", - "value": 0.7, - "isSel": false, - "makeupBundle": "qianzhihe", - "selectedFilter":"zhiganhui2" - }, - { - "name": "超模", - "imageStr": "demo_combination_supermodel", - "value": 0.7, - "isSel": false, - "makeupBundle": "chaomo", - "selectedFilter":"zhiganhui7" - }, - { - "name": "雏菊", - "imageStr": "demo_combination_daisy", - "value": 0.7, - "isSel": false, - "makeupBundle": "chuju", - "selectedFilter":"zhiganhui8" - }, - { - "name": "港风", - "imageStr": "demo_combination_harbour_wind", - "value": 0.7, - "isSel": false, - "makeupBundle": "gangfeng", - "selectedFilter":"ziran8" - }, - { - "name": "性感", - "imageStr": "demo_combination_sexy", - "value": 0.7, - "isSel": false, - "makeupBundle": "xinggan", - "selectedFilter":"ziran4", - "isAllowedEdit" : true - }, - { - "name": "甜美", - "imageStr": "demo_combination_sweet", - "value": 0.7, - "isSel": false, - "makeupBundle": "tianmei", - "selectedFilter":"ziran4", - "isAllowedEdit" : true - }, - { - "name": "邻家", - "imageStr": "demo_combination_neighbor_girl", - "value": 0.7, - "isSel": false, - "makeupBundle": "linjia", - "selectedFilter":"ziran4", - "isAllowedEdit" : true - }, - { - "name": "欧美", - "imageStr": "demo_combination_occident", - "value": 0.7, - "isSel": false, - "makeupBundle": "oumei", - "selectedFilter":"ziran4", - "isAllowedEdit" : true - }, - { - "name": "妩媚", - "imageStr": "demo_combination_charming", - "value": 0.7, - "isSel": false, - "makeupBundle": "wumei", - "selectedFilter":"ziran4", - "isAllowedEdit" : true - } - - ] -} diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/FURenderKit b/FULiveDemo/FURenderKit/FURenderKit.framework/FURenderKit new file mode 100755 index 00000000..73bc1d75 Binary files /dev/null and b/FULiveDemo/FURenderKit/FURenderKit.framework/FURenderKit differ diff --git "a/docs/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md" "b/FULiveDemo/FURenderKit/FURenderKit.framework/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md" similarity index 100% rename from "docs/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md" rename to "FULiveDemo/FURenderKit/FURenderKit.framework/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md" diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/CNamaSDK.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/CNamaSDK.h similarity index 93% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/CNamaSDK.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/CNamaSDK.h index 13d695ca..c928e9a6 100644 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/CNamaSDK.h +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/CNamaSDK.h @@ -43,38 +43,40 @@ typedef enum FUAITYPE { FUAITYPE_BACKGROUNDSEGMENTATION = 1 << 1, FUAITYPE_HAIRSEGMENTATION = 1 << 2, FUAITYPE_HANDGESTURE = 1 << 3, - FUAITYPE_HANDPROCESSOR = 1 << 3, - FUAITYPE_TONGUETRACKING = 1 << 4, - FUAITYPE_FACELANDMARKS75 = 1 << 5, - FUAITYPE_FACELANDMARKS209 = 1 << 6, - FUAITYPE_FACELANDMARKS239 = 1 << 7, - FUAITYPE_HUMANPOSE2D = 1 << 8, - FUAITYPE_BACKGROUNDSEGMENTATION_GREEN = 1 << 9, - FUAITYPE_FACEPROCESSOR = 1 << 10, - FUAITYPE_FACEPROCESSOR_FACECAPTURE = 1 << 11, - FUAITYPE_FACEPROCESSOR_FACECAPTURE_TONGUETRACKING = 1 << 12, - FUAITYPE_FACEPROCESSOR_HAIRSEGMENTATION = 1 << 13, - FUAITYPE_FACEPROCESSOR_HEADSEGMENTATION = 1 << 14, - FUAITYPE_FACEPROCESSOR_EXPRESSION_RECOGNIZER = 1 << 15, - FUAITYPE_FACEPROCESSOR_EMOTION_RECOGNIZER = 1 << 16, - FUAITYPE_FACEPROCESSOR_DISNEYGAN = 1 << 17, - FUAITYPE_FACEPROCESSOR_FACEID = 1 << 18, - FUAITYPE_HUMAN_PROCESSOR = 1 << 19, - FUAITYPE_HUMAN_PROCESSOR_DETECT = 1 << 20, - FUAITYPE_HUMAN_PROCESSOR_2D_SELFIE = 1 << 21, - FUAITYPE_HUMAN_PROCESSOR_2D_DANCE = 1 << 22, - FUAITYPE_HUMAN_PROCESSOR_2D_SLIM = 1 << 23, - FUAITYPE_HUMAN_PROCESSOR_3D_SELFIE = 1 << 24, - FUAITYPE_HUMAN_PROCESSOR_3D_DANCE = 1 << 25, - FUAITYPE_HUMAN_PROCESSOR_SEGMENTATION = 1 << 26, - FUAITYPE_FACE_RECOGNIZER = 1 << 27, - FUAITYPE_IMAGE_BEAUTY = 1 << 28, - FUAITYPE_HUMAN_PROCESSOR_2D_IMGSLIM = 1 << 29, - FUAITYPE_FACE_ATTRIBUTE_PROCESSOR = 1 << 30, - FUAITYPE_IMAGE_BEAUTY_UNKNOW = 1 << 31 + FUAITYPE_HANDPROCESSOR = 1 << 4, + FUAITYPE_TONGUETRACKING = 1 << 5, + FUAITYPE_HUMANPOSE2D = 1 << 6, + FUAITYPE_BACKGROUNDSEGMENTATION_GREEN = 1 << 7, + FUAITYPE_FACEPROCESSOR = 1 << 8, + FUAITYPE_HUMAN_PROCESSOR = 1 << 9, + FUAITYPE_FACE_RECOGNIZER = 1 << 10, + FUAITYPE_IMAGE_BEAUTY = 1 << 11, + FUAITYPE_FACE_ATTRIBUTE_PROCESSOR = 1 << 12, + FUAITYPE_FACELANDMARKS75 = 1 << 13, + FUAITYPE_FACELANDMARKS209 = 1 << 14, + FUAITYPE_FACELANDMARKS239 = 1 << 15 } FUAITYPE; +#define FUAITYPE_FACEPROCESSOR_FACECAPTURE 1048576 // 1<<20 +#define FUAITYPE_FACEPROCESSOR_FACECAPTURE_TONGUETRACKING 2097152 // 1<<21 +#define FUAITYPE_FACEPROCESSOR_HAIRSEGMENTATION 4194304 // 1<<22 +#define FUAITYPE_FACEPROCESSOR_HEADSEGMENTATION 8388608 // 1<<23 +#define FUAITYPE_FACEPROCESSOR_EXPRESSION_RECOGNIZER 16777216 // 1<<24 +#define FUAITYPE_FACEPROCESSOR_EMOTION_RECOGNIZER 33554432 // 1<<25 +#define FUAITYPE_FACEPROCESSOR_DISNEYGAN 67108864 // 1<<26 +#define FUAITYPE_FACEPROCESSOR_FACEID 134217728 // 1<<27 +#define FUAITYPE_HUMAN_PROCESSOR_DETECT 268435456 // 1<<28 +#define FUAITYPE_HUMAN_PROCESSOR_SEGMENTATION 536870912 // 1<<29 +#define FUAITYPE_HUMAN_PROCESSOR_2D_SELFIE 1073741824 // 1<<30 +#define FUAITYPE_HUMAN_PROCESSOR_2D_DANCE 2147483648 // 1<<31 +#define FUAITYPE_HUMAN_PROCESSOR_2D_SLIM 4294967296 // 1<<32 +#define FUAITYPE_HUMAN_PROCESSOR_3D_SELFIE 8589934592 // 1<<33 +#define FUAITYPE_HUMAN_PROCESSOR_3D_DANCE 17179869184 // 1<<34 +#define FUAITYPE_HUMAN_PROCESSOR_2D_IMGSLIM 34359738368 // 1<<35 +#define FUAITYPE_IMAGE_BEAUTY_UNKNOW 68719476736 // 1<<36 +#define FUAITYPE_FACEPROCESSOR_LIPSOCCUSEGMENT 137438953472 // 1<<37 + typedef enum FUAIGESTURETYPE { FUAIGESTURE_NO_HAND = -1, FUAIGESTURE_UNKNOWN = 0, @@ -194,6 +196,11 @@ typedef enum FUAIHUMANROTTYPE { FUAIHUMAN_ROT_270 = 3 } FUAIHUMANROTTYPE; +typedef enum FUAIHUMANSEGSCENETYPE { + FUAIHUMAN_SEG_MEETING = 0, + FUAIHUMAN_SEG_COMMON = 1 +} FUAIHUMANSEGSCENETYPE; + typedef enum TRANSFORM_MATRIX { /* * 8 base orientation cases, first do counter-clockwise rotation in degree, @@ -1130,9 +1137,9 @@ FUNAMA_API void fuSetQualityTradeoff(float quality); /** \brief Set AI type for fuTrackFace and fuTrackFaceWithTongue interface - \param ai_type, is a bit combination of FUAITYPE; + \param ai_type, is a bit combination of FUAITYPE and subtypes; */ -FUNAMA_API void fuSetTrackFaceAIType(int ai_type); +FUNAMA_API void fuSetTrackFaceAIType(unsigned long long ai_type); /** \brief Generalized interface for tracking face. @@ -1818,6 +1825,14 @@ FUNAMA_API void fuImageBeautyResetPic(void* in_ptr, int w, int h, int format, FUNAMA_API void fuImageBeautyNewPic(); +FUNAMA_API void fuSetFaceDelayLeaveFrameNum(int frame_num); + +FUNAMA_API void fuSetFaceDelayLeaveEnable(bool use); + +FUNAMA_API void fuSetHumanSegScene(FUAIHUMANSEGSCENETYPE seg_scene); + +FUNAMA_API void fuSetHandDetectEveryNFramesWhenNoHand(int frame_num); + #ifdef __cplusplus } #endif diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAIConfig.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAIConfig.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAIConfig.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAIConfig.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAIKit.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAIKit.h similarity index 84% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAIKit.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAIKit.h index a48e001b..21eafaa6 100644 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAIKit.h +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAIKit.h @@ -13,22 +13,31 @@ NS_ASSUME_NONNULL_BEGIN +/// 人脸检测模式 typedef enum : NSUInteger { FUFaceProcessorDetectModeImage, FUFaceProcessorDetectModeVideo, } FUFaceProcessorDetectMode; +/// 人体检测模式 typedef enum : NSUInteger { FUHumanProcessorDetectModeImage, FUHumanProcessorDetectModeVideo } FUHumanProcessorDetectMode; +/// 人脸点位算法性能 typedef enum : NSUInteger { FUFaceProcessorFaceLandmarkQualityLow, FUFaceProcessorFaceLandmarkQualityMedium, FUFaceProcessorFaceLandmarkQualityHigh } FUFaceProcessorFaceLandmarkQuality; +/// 人体分割场景 +typedef enum : NSUInteger { + FUHumanSegmentationSceneTypeMeeting = 0, // 视频会议 + FUHumanSegmentationSceneTypeCommon // 通用 +} FUHumanSegmentationSceneType; + @interface FUAIKit : NSObject @property (nonatomic, assign) int maxTrackFaces; // 设置最大的人脸跟踪个数 default is 1 @@ -54,47 +63,35 @@ typedef enum : NSUInteger { /// @param dataPath 模型路径 + (void)loadAIModeWithAIType:(FUAITYPE)type dataPath:(NSString *)dataPath; +/// 卸载AI模型 +/// @param type AI 类型 + (void)unloadAIModeForAIType:(FUAITYPE)type; +/// 卸载所有的AI模型 + (void)unloadAllAIMode; +/// 判断某 AI 模型是否加载 +/// @param type AI 类型 + (BOOL)loadedAIType:(FUAITYPE)type; +/// 加载舌头模型 +/// @param modePath 舌头模型地址 + (void)loadTongueMode:(NSString *)modePath; +/// 设置 AI 识别类型 +/// @param type AI 识别类型 + (void)setTrackFaceAIType:(FUAITYPE)type; -/// 设置跟踪到人脸时每次检测的间隔帧数 -/// @param frames 帧数 -/// @note 底层默认间隔帧数为7 -+ (void)setFaceProcessorDetectEveryFramesWhenFace:(int)frames; - -/// 设置未跟踪到人脸时每次检测的间隔帧数 -/// @param frames 帧数 -/// @note 底层默认间隔帧数为7 -+ (void)setFaceProcessorDetectEveryFramesWhenNoFace:(int)frames; - +/// 对输入的图像进行 AI 识别,支持人脸、身体、手指能类型的识别 + (int)trackFaceWithInput:(FUTrackFaceInput *)trackFaceInput; -+ (void)resetHumanProcessor; - -+ (int)aiHumanProcessorNums; +/// 图像明显发生改变时调用该接口重置内部检测结果 ++ (void)resetTrackedResult; +/// 跟踪到的人脸数量 + (int)aiFaceProcessorNums; -//人脸检测置信度 -+ (float)fuFaceProcessorGetConfidenceScore:(int)index; - -//ai手势识别 -+ (int)aiHandDistinguishNums; - -//handIndex 检测到手的索引 -+ (FUAIGESTURETYPE)fuHandDetectorGetResultGestureType:(int)handIndex; - -//动作识别: actionId index of fuHumanProcessorGetNumResults -+ (int)fuHumanProcessorGetResultActionType:(int)actionId; - -//设置面部参数 +/// 设置面部参数 + (void)setFaceTrackParam:(NSString *)param value:(int)value; /** @@ -156,8 +153,46 @@ typedef enum : NSUInteger { pret:(float *)pret number:(int)number; -/// 图像明显发生改变时调用该接口重置内部检测结果 -+ (void)resetTrackedResult; +/// 人脸检测置信度 ++ (float)fuFaceProcessorGetConfidenceScore:(int)index; + +/// 设置跟踪到人脸时每次检测的间隔帧数 +/// @param frames 帧数 +/// @note 底层默认间隔帧数为7 ++ (void)setFaceProcessorDetectEveryFramesWhenFace:(int)frames; + +/// 设置未跟踪到人脸时每次检测的间隔帧数 +/// @param frames 帧数 +/// @note 底层默认间隔帧数为7 ++ (void)setFaceProcessorDetectEveryFramesWhenNoFace:(int)frames; + +/// 设置人脸离开延迟打开或关闭 +/// @param enable YES为打开 NO为关闭 ++ (void)setFaceDelayLeaveEnable:(BOOL)enable; + +/// 跟踪到的人体数量 ++ (int)aiHumanProcessorNums; + +/// 重置身体识别 ++ (void)resetHumanProcessor; + +/// 设置人体分割场景类型 ++ (void)setHumanSegmentationSceneType:(FUHumanSegmentationSceneType)type; + +/// 跟踪到的手势数量 ++ (int)aiHandDistinguishNums; + +/// 获取手势类型 +/// @param handIndex aiHandDistinguishNums返回手的索引 ++ (FUAIGESTURETYPE)fuHandDetectorGetResultGestureType:(int)handIndex; + +/// 设置未跟踪到手势时每次检测的间隔帧数 +/// @param frames 帧数 ++ (void)setHandDetectEveryFramesWhenNoHand:(int)frames; + +/// 动作识别: actionId index of fuHumanProcessorGetNumResults ++ (int)fuHumanProcessorGetResultActionType:(int)actionId; + @end @@ -203,6 +238,7 @@ typedef enum : NSUInteger { /// 设置 trackFace 相关的输入配置,详细参数请查看 FUTrackFaceConfig 类的接口注释。 @property (nonatomic, strong) FUTrackFaceConfig *trackFaceConfig; + @end diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAISegment.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAISegment.h similarity index 92% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAISegment.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAISegment.h index d8d9c7e5..92a0ec58 100644 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAISegment.h +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAISegment.h @@ -31,9 +31,6 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)stopVideoDecode; -//视频解析获取第一帧图片 -- (UIImage *)readFirstFrame; - @property (nonatomic, strong) UIImage *backgroundImage; // 背景图片 //NSURL or NSString diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUActionRecognition.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUActionRecognition.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUActionRecognition.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUActionRecognition.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAnimation.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAnimation.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAnimation.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAnimation.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAnimoji.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAnimoji.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAnimoji.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAnimoji.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatar.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatar.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatar.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatar.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatarCheck.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatarCheck.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatarCheck.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatarCheck.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatarColorKeys.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatarColorKeys.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatarColorKeys.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatarColorKeys.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatarMakeup.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatarMakeup.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUAvatarMakeup.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUAvatarMakeup.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBackground.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBackground.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUBackground.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBackground.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeauty-Deprecated.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeauty-Deprecated.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeauty-Deprecated.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeauty-Deprecated.h diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeauty.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeauty.h new file mode 100644 index 00000000..f3748f52 --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeauty.h @@ -0,0 +1,113 @@ +// +// FUBeautiItem.h +// FURenderKit +// +// Created by Chen on 2021/1/4. +// + +#import "FUItem.h" +#import "FUFilterDefineKey.h" +#import "FUBeautyPropertyModeDefine.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeauty : FUItem + +@property (nonatomic, assign) BOOL blurUseMask;//blur是否使用mask +@property (nonatomic, assign) int heavyBlur;//朦胧磨皮开关, 0为清晰磨皮, 1为朦胧磨皮 +@property (nonatomic, assign) int blurType;//此参数优先级比heavyBlur低, 在使用时要将heavy_blur设为0, 0清晰磨皮 1朦胧磨皮 2精细磨皮 3均匀磨皮 + +/// 将参数恢复到默认值 +- (void)resetToDefault; + +@end + + +@interface FUBeauty (Skin) +@property (nonatomic, assign) int skinDetect;//肤色检测开关, 0为关, 1为开 默认值0.0 +@property (nonatomic, assign) int nonskinBlurScale;//肤色检测之后非肤色区域的融合程度, 取值范围0.0-1.0, 默认值0.0 +@property (nonatomic, assign) double blurLevel;//精细磨皮 取值范围0.0-6.0, 默认6.0 +@property (nonatomic, assign) double colorLevel;//美白 取值范围 0.0-1.0,0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double redLevel;//红润 取值范围 0.0-1.0,0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double sharpen;//锐化 取值范围0.0-1.0, 默认0.0 +@property (nonatomic, assign) double faceThreed;//五官立体 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double eyeBright;//亮眼 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double toothWhiten;//美牙 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double removePouchStrength;//去黑眼圈 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double removeNasolabialFoldsStrength;//去法令纹 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@end + +@interface FUBeauty (Shap) +@property (nonatomic, assign) int faceShape;//变形取值 0:女神变形 1:网红变形 2:自然变形 3:默认变形 4:精细变形 +@property (nonatomic, assign) int changeFrames; //0为关闭 , 大于0开启渐变, 值为渐变所需要的帧数 +@property (nonatomic, assign) double faceShapeLevel; //变形程度 取值范围 0.0-1.0,0.0为无效果, 1.0为最大效果, 默认值1.0 + +/// 脸型相关属性, 程度范围0.0-1.0 默认0.0 +@property (nonatomic, assign) double cheekV;//v脸 +@property (nonatomic, assign) double cheekThinning;//瘦脸 +@property (nonatomic, assign) double cheekLong;//长脸 +@property (nonatomic, assign) double cheekCircle;//圆脸 + +/// 其他普通属性 +@property (nonatomic, assign) double cheekNarrow;//窄脸 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double cheekSmall;//小脸 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double cheekShort;//短脸 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityCheekbones;//瘦颧骨 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityLowerJaw;//瘦下颌骨 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double eyeEnlarging;//大眼 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityChin;//下巴 取值范围 0.0-1.0, 0.5-0是变小, 0.5-1是变大, 默认值0.5 +@property (nonatomic, assign) double intensityForehead;//额头 取值范围 0.0-1.0, 0.5-0是变小, 0.5-1是变大, 默认值0.5 +@property (nonatomic, assign) double intensityNose;//瘦鼻 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityMouth;//嘴型 取值范围 0.0-1.0, 0.5-0.0是变大, 0.5-1.0是变小, 默认值0.5 +@property (nonatomic, assign) double intensityLipThick;//嘴唇厚度 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变薄, 0.5-1是变厚, 默认值0.5 +@property (nonatomic, assign) double intensityEyeHeight;//眼睛位置 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变低, 0.5-1是变高, 默认值0.5 +@property (nonatomic, assign) double intensityCanthus;//开眼角 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityEyeLid;//眼睑下至 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityEyeSpace;//眼距 取值范围 0.0-1.0, 0.5-0.0是变大, 0.5-1.0是变小, 默认值0.5 +@property (nonatomic, assign) double intensityEyeRotate;//眼睛角度 取值范围 0.0-1.0, 0.5-0.0逆时针旋转, 0.5-1.0顺时针旋转, 默认值0.5 +@property (nonatomic, assign) double intensityLongNose;//长鼻 取值范围 0.0-1.0, 0.5-0.0是变长, 0.5-1.0是变短, 默认值0.5 +@property (nonatomic, assign) double intensityPhiltrum;//缩人中 取值范围 0.0-1.0, 0.5-0.0是变短, 0.5-1.0是变长, 默认值0.5 +@property (nonatomic, assign) double intensitySmile;//微笑嘴角 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityEyeCircle;//圆眼 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 +@property (nonatomic, assign) double intensityBrowHeight;//眉毛上下 取值范围 0.0-1.0, 0.5-0是向上, 0.5-1是向下, 默认值0.5 +@property (nonatomic, assign) double intensityBrowSpace;//眉间距 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变小, 0.5-1是变大, 默认值0.5 +@property (nonatomic, assign) double intensityBrowThick;//眉毛粗细 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变细, 0.5-1是变粗, 默认值0.5 + +@end + +@interface FUBeauty (Filter) + +@property (nonatomic, strong) FUFilter filterName;//取值为一个字符串, 默认值为 “origin” , origin即为使用原图效果 +@property (nonatomic, assign) double filterLevel; //取值范围 0.0-1.0,0.0为无效果, 1.0为最大效果, 默认值1.0 + +- (double)filterValueForKey:(NSString *)filterForKey; + +- (NSArray *)allFilterKeys; + +@end + +@interface FUBeauty (Mode) + +/** + * 设置部分美颜属性的mode, 不同mode会有主观上会有不同效果 + * 必须在设置美颜各个属性值之前调用该接口 + * key和mode说明 + | key | 属性 | 支持的mode | + | ------------- | -------- | ------------------------------------------------------------ | + | color_level | 美白 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.2.0) | + | remove_pouch_strength | 去黑眼圈 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.2.0, 高性能设备推荐) | + | remove_nasolabial_folds_strength | 去法令纹 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.2.0, 高性能设备推荐) | + | cheek_thinning | 瘦脸 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.3.0) | + | cheek_narrow | 窄脸 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | + | cheek_small | 小脸 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | + | eye_enlarging | 大眼 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0), FUBeautyPropertyMode3(v8.2.0, 高性能设备推荐) | + | intensity_chin | 下巴 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.4.0) | + | intensity_forehead | 额头 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | + | intensity_nose | 瘦鼻 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | + | intensity_mouth | 嘴型 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0), FUBeautyPropertyMode3(v8.2.0, 高性能设备推荐) | +**/ +- (void)addPropertyMode:(FUBeautyPropertyMode)mode forKey:(FUModeKey)key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeautyPropertyModeDefine.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeautyPropertyModeDefine.h similarity index 94% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeautyPropertyModeDefine.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeautyPropertyModeDefine.h index f551874b..d898f08f 100644 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeautyPropertyModeDefine.h +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBeautyPropertyModeDefine.h @@ -24,6 +24,7 @@ FUParamsKeysDefine(FUModeKey, FUModeKeyCheekNarrow = @"cheek_narrow", FUModeKeyCheekSmall = @"cheek_small", FUModeKeyEyeEnlarging = @"eye_enlarging", + FUModeKeyIntensityChin = @"intensity_chin", FUModeKeyIntensityForehead = @"intensity_forehead", FUModeKeyIntensityNose = @"intensity_nose", FUModeKeyIntensityMouth = @"intensity_mouth" diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBodyBeauty.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBodyBeauty.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUBodyBeauty.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBodyBeauty.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBodyBeautyDefineKeys.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBodyBeautyDefineKeys.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUBodyBeautyDefineKeys.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUBodyBeautyDefineKeys.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUCLIColor.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCLIColor.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUCLIColor.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCLIColor.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUCameraAnimation.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCameraAnimation.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUCameraAnimation.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCameraAnimation.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUCaptureCamera.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCaptureCamera.h similarity index 92% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUCaptureCamera.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCaptureCamera.h index 6e594a16..e688e2b5 100755 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUCaptureCamera.h +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCaptureCamera.h @@ -20,8 +20,7 @@ @protocol FUCaptureCameraDelegate --(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer; - +-(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer captureDevicePosition:(AVCaptureDevicePosition)position; @end @@ -31,11 +30,11 @@ @end -typedef NS_ENUM( NSInteger, FUCaptureCameraFocusModel) { +typedef NS_ENUM( NSInteger, FUCaptureCameraFocusMode) { /* 先找人脸对焦模式 */ - FUCaptureCameraFocusModelAutoFace, + FUCaptureCameraFocusModeAutoFace, /* 固定点对焦模式 */ - FUCaptureCameraFocusModelChangeless + FUCaptureCameraFocusModeChangeless }; @interface FUCaptureCamera : NSObject @@ -130,8 +129,8 @@ typedef NS_ENUM( NSInteger, FUCaptureCameraFocusModel) { /// 修改对焦模式 -/// @param modle 对焦模式 -- (void)cameraChangeModle:(FUCaptureCameraFocusModel)modle; +/// @param mode 对焦模式 +- (void)cameraChangeMode:(FUCaptureCameraFocusMode)mode; // 缩放 // 可用于模拟对焦 diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUComicFilter.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUComicFilter.h new file mode 100644 index 00000000..e932176b --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUComicFilter.h @@ -0,0 +1,33 @@ +// +// FUAnimationFIlterItem.h +// FURenderKit +// +// Created by Chen on 2021/1/13. +// + +#import "FUItem.h" + +NS_ASSUME_NONNULL_BEGIN + +/// 动漫滤镜风格 +typedef NS_ENUM(NSInteger, FUComicFilterStyle) { + FUComicFilterStyleNone = -1, // 无 + FUComicFilterStyleCartoon = 0, // 动漫 + FUComicFilterStyleSketch = 1, // 素描 + FUComicFilterStylePortrait = 2, // 人像 + FUComicFilterStylePainting = 3, // 油画 + FUComicFilterStyleSandPainting = 4, // 沙画 + FUComicFilterStylePenDrawing = 5, // 钢笔画 + FUComicFilterStylePencilDrawing = 6,// 铅笔画 + FUComicFilterStyleGraffiti = 7 // 涂鸦 +}; + +@interface FUComicFilter : FUItem + +/// 动漫滤镜风格 +/// @see FUComicFilterStyle +@property (nonatomic, assign) FUComicFilterStyle style; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUConfig.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUConfig.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUConfig.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUConfig.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUCustomBackground.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCustomBackground.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUCustomBackground.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUCustomBackground.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUDeformationKeys.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUDeformationKeys.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUDeformationKeys.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUDeformationKeys.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUEnum.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUEnum.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUEnum.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUEnum.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUFaceRectInfo.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFaceRectInfo.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUFaceRectInfo.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFaceRectInfo.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUFacepupKeys.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFacepupKeys.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUFacepupKeys.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFacepupKeys.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUFacialFeatures.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFacialFeatures.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUFacialFeatures.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFacialFeatures.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUFilterDefineKey.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFilterDefineKey.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUFilterDefineKey.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUFilterDefineKey.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGLContext.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGLContext.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUGLContext.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGLContext.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGLDisplayView.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGLDisplayView.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUGLDisplayView.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGLDisplayView.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGesture.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGesture.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUGesture.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGesture.h diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGreenScreen.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGreenScreen.h new file mode 100644 index 00000000..c3f1889a --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGreenScreen.h @@ -0,0 +1,63 @@ +// +// FUGreenTent.h +// FURenderKit +// +// Created by Chen on 2021/1/15. +// + +#import "FUItem.h" +#import "FUStruct.h" +NS_ASSUME_NONNULL_BEGIN +@interface FUGreenScreen : FUItem + +/// 背景图片 +@property (nonatomic, strong) UIImage *backgroundImage; + +/// 背景视频URLString +/// @note 设置之后自动开始播放,若设置为nil,自动停止 +@property (nonatomic, copy, nullable) NSString *videoPath; + +/// 安全区域图片 +@property (nonatomic, strong, nullable) UIImage *safeAreaImage; + +/// 关键颜色 +/// 默认值为[0,255,0],取值范围[0-255,0-255,0-255] +@property (nonatomic, assign) FUColor keyColor; + +/// 相似度:色度最大容差 +/// 取值范围0.0-1.0,色度最大,容差值越大,更多幕景被抠除 +/// @note 值跟随关键颜色变化 +@property (nonatomic, assign) double chromaThres; + +/// 平滑度:色度最小限差, +/// 取值范围0.0-1.0,值越大,更多幕景被扣除 +/// @note 值跟随关键颜色变化 +@property (nonatomic, assign) double chromaThrest; + +/// 祛色度:图像前后景祛色度过度 +/// 取值范围0.0-1.0,值越大,两者边缘处透明过度更平滑 +/// @note 值跟随关键颜色变化 +@property (nonatomic, assign) double alphal; + +/// 中心点 +@property (nonatomic, assign) CGPoint center; + +/// 缩放比例 +@property (nonatomic, assign) float scale; + +/// 当前是否正在进行抠图,抠图就停止绿慕渲染 +@property (nonatomic, assign) BOOL cutouting; + +/// 背景视频播放是否暂停 +@property (nonatomic, assign) BOOL pause; + +/// 开始播放背景视频 +- (void)startVideoDecode; + +/// 取消播放背景视频 +- (void)stopVideoDecode; + +@end + + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGroupAnimation.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGroupAnimation.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUGroupAnimation.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUGroupAnimation.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUHairBeauty.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUHairBeauty.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUHairBeauty.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUHairBeauty.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUHairDefineKey.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUHairDefineKey.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUHairDefineKey.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUHairDefineKey.h diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUImageHelper.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUImageHelper.h new file mode 100644 index 00000000..8fe96f85 --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUImageHelper.h @@ -0,0 +1,55 @@ +// +// FUImageHelper.h +// FULiveDemo +// +// Created by L on 2018/8/3. +// Copyright © 2018年 L. All rights reserved. +// + +#import +#import + +@interface FUImageHelper : NSObject + ++ (void)convertUIImageToBitmapRGBA8:(UIImage *)image completionHandler:(void (^)(int32_t size, unsigned char * bits))completionHandler; + ++ (UIImage *)convertBitmapRGBA8ToUIImage:(unsigned char *)buffer + withWidth:(int)width + withHeight:(int)height; + +/// 根据UIImage返回CVPixelBufferRef +/// @param image UIImage实例对象 +/// 注意:CVPixelBufferRef需要手动release ++ (CVPixelBufferRef)pixelBufferFromImage:(UIImage *)image; + +/// 根据CVPixelBufferRef返回UIImage +/// @param pixelBufferRef buffer +/// 注意:如果后续业务有使用到image.CGImage,则需要及时释放掉 image.CGImage ++ (UIImage *)imageFromPixelBuffer:(CVPixelBufferRef)pixelBufferRef; + ++ (unsigned char *)getRGBAWithImage:(UIImage *)image; + ++ (unsigned char *)getRGBAWithImageName:(NSString *)imageName width:(int *)width height:(int *)height; + +/// 截屏处理取色 ++ (UIColor*)getPixelColorScreenWindowAtLocation:(CGPoint)point; + +/// 针对静态图片处理取色 ++ (UIColor *)getPixelColorWithImage:(UIImage *)image point:(CGPoint)point DEPRECATED_MSG_ATTRIBUTE("use colorInPoint: in FUGLDisplayView instead"); + +/// 针对每一帧处理取色 ++ (UIColor *)getPixelColorWithPixelBuff:(CVPixelBufferRef)pixelBuffer point:(CGPoint)point DEPRECATED_MSG_ATTRIBUTE("use colorInPoint: in FUGLDisplayView instead"); + ++ (UIImage *)rotateImageWithAngle:(UIImage*)vImg Angle:(NSInteger)vAngle IsExpand:(BOOL)vIsExpand; + +/// 获取图像数据 +/// @param pixelBuffer buffer +/// @param transform 图像方向(0: up 1: right 2: down 3: left) +/// @return Byte ++ (Byte *)getBytesFromPixelBuffer:(CVPixelBufferRef)pixelBuffer transform:(int)transform; + +/// 获取视频第一帧图片 +/// @param videoURL 视频URL ++ (UIImage *)getPreviewImageWithVideoURL:(NSURL *)videoURL; + +@end diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUInternalCameraSetting.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUInternalCameraSetting.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUInternalCameraSetting.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUInternalCameraSetting.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUItem+createTexture.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUItem+createTexture.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUItem+createTexture.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUItem+createTexture.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUItem.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUItem.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUItem.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUItem.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUKeysDefine.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUKeysDefine.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUKeysDefine.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUKeysDefine.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FULight.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FULight.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FULight.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FULight.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FULightMakeUpTextureKeyDefineKey.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FULightMakeUpTextureKeyDefineKey.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FULightMakeUpTextureKeyDefineKey.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FULightMakeUpTextureKeyDefineKey.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FULightMakeup.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FULightMakeup.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FULightMakeup.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FULightMakeup.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeUpChildStrengthDefineKey.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeUpChildStrengthDefineKey.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeUpChildStrengthDefineKey.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeUpChildStrengthDefineKey.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeUpColorsKey.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeUpColorsKey.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeUpColorsKey.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeUpColorsKey.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeUpTextureKey.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeUpTextureKey.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeUpTextureKey.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeUpTextureKey.h diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeup.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeup.h new file mode 100644 index 00000000..3db229d5 --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeup.h @@ -0,0 +1,193 @@ +// +// FUMakeup.h +// FURenderKit +// +// Created by Chen on 2021/1/6. +// + +#import "FUItem.h" +#import +#import "FUStruct.h" +#import "FUMakeupValueDefine.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeup : FUItem + +/// 美妆开关,默认为YES +@property (nonatomic, assign) BOOL isMakeupOn; + +/// 在解绑妆容时是否清空除口红以外的妆容,NO表示不清空,YES表示清空,口红可由强度进行设置 +@property (nonatomic, assign) BOOL isClearMakeup; + +/// 美妆分割,YES为开,NO为关,默认NO +@property (nonatomic, assign) BOOL makeupSegmentation; + +/// 口红类型 +/// @see FUMakeupLipType +@property (nonatomic, assign) FUMakeupLipType lipType; + +/// 是否开启口红高光,YES为开,NO为关 +@property (nonatomic, assign) BOOL isLipHighlightOn; + +/// 口红双色开关,NO为关闭,YES为开启 +/// @note 如果想使用咬唇,需要开启双色开关,并且将makeup_lip_color2的值都设置为0 +@property (nonatomic, assign) BOOL isTwoColor; + +/// 眉毛变形类型 +/// @see FUMakeupBrowWarpType +/// @note 如果browWarp为NO,眉毛变形自动失效 +@property (nonatomic, assign) FUMakeupBrowWarpType browWarpType; + +/// 是否使用眉毛变形 YES为开 NO为关 +@property (nonatomic, assign) BOOL browWarp; + +@end + +#pragma mark - 主题妆 + +@interface FUMakeup (Subject) + +/// 更新组合装 +/// @param makeupPackage 子妆 +/// @param needCleanSubItem 是否清除老子妆 +- (void)updateMakeupPackage:(FUItem * __nullable)makeupPackage needCleanSubItem:(BOOL)needCleanSubItem; + +/// 整体妆容程度值 +@property (nonatomic, assign) double intensity; + +/// 整体妆容滤镜程度值 +@property (nonatomic, assign) double filterIntensity; + +/// 局部妆容对象,属于组合装内部的具体部位(眉毛、眼镜、鼻子等)自定义设置 +@property (nonatomic, strong, nullable) FUItem *subEyebrow; +@property (nonatomic, strong, nullable) FUItem *subEyeshadow; +@property (nonatomic, strong, nullable) FUItem *subPupil; +@property (nonatomic, strong, nullable) FUItem *subEyelash; +@property (nonatomic, strong, nullable) FUItem *subEyeliner; +@property (nonatomic, strong, nullable) FUItem *subBlusher; +@property (nonatomic, strong, nullable) FUItem *subFoundation; +@property (nonatomic, strong, nullable) FUItem *subHighlight; +@property (nonatomic, strong, nullable) FUItem *subShadow; +@property (nonatomic, strong, nullable) FUItem *subLip; + +@end + +#pragma mark - 图层混合模式 + +@interface FUMakeup (blend) + +@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow1; +@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow2; +@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow3; +@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow4; +@property (nonatomic, assign) FUMakeupBlendType blendTypeEyelash; +@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeliner; +@property (nonatomic, assign) FUMakeupBlendType blendTypeBlusher1; +@property (nonatomic, assign) FUMakeupBlendType blendTypeBlusher2; +@property (nonatomic, assign) FUMakeupBlendType blendTypePupil; + +@end + +#pragma mark - 子妆程度值 + +@interface FUMakeup (intensity) + +/// 粉底程度值 +@property (nonatomic, assign) double intensityFoundation; + +/// 口红程度值 +@property (nonatomic, assign) double intensityLip; + +/// 口红高光程度值 +/// @note 暂时只用于lipType=FUMakeupLipTypeMoisturizing的情况 +@property (nonatomic, assign) double intensityLipHighlight; + +/// 腮红程度值 +@property (nonatomic, assign) double intensityBlusher; + +/// 眉毛程度值 +@property (nonatomic, assign) double intensityEyebrow; + +/// 眼影程度值 +@property (nonatomic, assign) double intensityEyeshadow; + +/// 眼线程度值 +@property (nonatomic, assign) double intensityEyeliner; + +/// 睫毛程度值 +@property (nonatomic, assign) double intensityEyelash; + +/// 高光程度值 +@property (nonatomic, assign) double intensityHighlight; + +/// 阴影程度值 +@property (nonatomic, assign) double intensityShadow; + +/// 美瞳程度值 +@property (nonatomic, assign) double intensityPupil; + +@end + +#pragma mark - 子妆颜色 + +@interface FUMakeup (Color) + +/// 粉底颜色 +@property (nonatomic, assign) FUColor foundationColor; + +/// 口红颜色 +@property (nonatomic, assign) FUColor lipColor; + +/// 口红颜色2 +@property (nonatomic, assign) FUColor lipColor2; + +/// 腮红颜色 +@property (nonatomic, assign) FUColor blusherColor; + +/// 眉毛颜色 +@property (nonatomic, assign) FUColor eyebrowColor; + +/// 眼线颜色 +@property (nonatomic, assign) FUColor eyelinerColor; + +/// 睫毛颜色 +@property (nonatomic, assign) FUColor eyelashColor; + +/// 高光颜色 +@property (nonatomic, assign) FUColor highlightColor; + +/// 阴影颜色 +@property (nonatomic, assign) FUColor shadowColor; + +/// 美瞳颜色 +@property (nonatomic, assign) FUColor pupilColor; + +/** + * 眼影特殊处理 + * //如果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; + +@end + +@interface FUMakeup (landMark) + +/// 这个参数控制是否使用修改过得landmark点,1为使用,0为不使用 +@property (nonatomic, assign) int isUserFix; + +/// 这个参数为一个数组,需要客户端传递一个数组进去 +/// @note 传递的数组的长度为 150*人脸数,也就是将所有的点位信息存储的数组中传递进来 +@property (nonatomic, assign) FULandMark fixMakeUpData; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeupValueDefine.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeupValueDefine.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeupValueDefine.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMakeupValueDefine.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMusicFilter.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMusicFilter.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUMusicFilter.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUMusicFilter.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUNormalConfig.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUNormalConfig.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUNormalConfig.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUNormalConfig.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUOvonicMap.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUOvonicMap.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUOvonicMap.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUOvonicMap.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUParam.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUParam.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUParam.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUParam.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUPoster.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUPoster.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUPoster.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUPoster.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUQualitySticker.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUQualitySticker.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUQualitySticker.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUQualitySticker.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderIO.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderIO.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderIO.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderIO.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderKit-umbrella.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderKit-umbrella.h similarity index 97% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderKit-umbrella.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderKit-umbrella.h index 9a3b46be..b22205ac 100644 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderKit-umbrella.h +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderKit-umbrella.h @@ -4,7 +4,6 @@ // // Created by 项林平 on 2022/2/21. // -// #import #import "FURenderKit.h" #import "FUAIKit.h" @@ -74,7 +73,6 @@ #import "metamacros.h" #import "FUImageHelper.h" -#import "FURecordEncoder.h" #import "FUOvonicMap.h" #import "FUCLIColor.h" #import "FUAvatarCheck.h" diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderKit.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderKit.h new file mode 100644 index 00000000..7f20de23 --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderKit.h @@ -0,0 +1,268 @@ +// +// FURenderKit.h +// FURenderKit +// +// Created by ly-Mac on 2020/12/2. +// + +#import +#import "FUScene.h" +#import "FUAvatarCheck.h" +#import "FUGroupAnimation.h" +#import "FUCaptureCamera.h" +#import "FUInternalCameraSetting.h" +#import "FUGLDisplayView.h" +#import "FUSetupConfig.h" +#import "FURenderIO.h" + +#import "FUBeauty.h" +#import "FUMakeup.h" + +#import "FUStickerContainer.h" +#import "FULightMakeup.h" +#import "FUComicFilter.h" +#import "FUHairBeauty.h" +#import "FUGreenScreen.h" +#import "FUBodyBeauty.h" +#import "FUActionRecognition.h" +#import "FUPoster.h" +#import "FUMusicFilter.h" +#import "FUAnimoji.h" + +#import "FUGesture.h" +#import "FUFaceRectInfo.h" +#import "FUAISegment.h" +#import "UIImage+FURenderKit.h" +#import "FUImageHelper.h" +#import "UIDevice+FURenderKit.h" + +#import "FUAIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@class FURenderKit; + +#pragma mark - 内部相机render相关协议 + +@protocol FURenderKitDelegate + +@optional +/// 使用内部相机时,即将处理图像时输入回调 +- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput; + +/// 使用内部相机时,处理图像后的输出回调 +- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput; + +/// 使用内部相机时,内部是否进行render处理,返回NO,将直接输出原图。 +- (BOOL)renderKitShouldDoRender; + +@end + +@interface FURenderKit : NSObject + +/// 3D场景实例,设置前需要先将 scene 通过 addScene 接口添加到 renderKit +@property (nonatomic, strong, nullable) FUScene *currentScene; + +/// 通过 addScene 接口添加到renderKit的3D场景数组 +@property (nonatomic, strong, readonly) NSArray *scenes; + +/// 美颜 +@property (nonatomic, strong, nullable) FUBeauty *beauty; + +/// 美妆 +@property (nonatomic, strong, nullable) FUMakeup *makeup; + +/// 道具贴纸、AR面具、搞笑大头、哈哈镜等道具的容器对象 +@property (nonatomic, strong, readonly) FUStickerContainer *stickerContainer; + +/// 轻美妆 +@property (nonatomic, strong, nullable) FULightMakeup *lightMakeup; + +/// 动漫滤镜 +@property (nonatomic, strong, nullable) FUComicFilter *comicFilter; + +/// 美发 +@property (nonatomic, strong, nullable) FUHairBeauty *hairBeauty; + +/// 绿慕 +@property (nonatomic, strong, nullable) FUGreenScreen *greenScreen; + +/// 音乐滤镜 +@property (nonatomic, strong, nullable) FUMusicFilter *musicFilter; + +/// 美体 +@property (nonatomic, strong, nullable) FUBodyBeauty *bodyBeauty; + +/// 动作识别 +@property (nonatomic, strong, nullable) FUActionRecognition *actionRecognition; + +/// 人像分割 +@property (nonatomic, strong, nullable) FUAISegment *segmentation; + +/// 抗锯齿道具 +@property (nonatomic, strong, nullable) FUItem *antiAliasing; + +/// 多重采样等级,默认为0 +@property (nonatomic, assign) int msaaLevel; + +/// 内部渲染视图 +/// @note 如果使用 glDisplayView 渲染,需要由用户自己创建并赋值给该属性,当内部或外部调用 renderWithInput 时,会自动显示在该 View 中。 +@property (nonatomic, strong, nullable) FUGLDisplayView *glDisplayView; + +#pragma mark - 内部相机与回调 + +/// internalCameraSetting 有默认值,用户按需修改对应配置即可。 +/// @see FUInternalCameraSetting +@property (nonatomic, strong, readonly) FUInternalCameraSetting *internalCameraSetting; + +/// 暂停内部渲染循环,不会影响外部对renderWithInput的调用。 +@property (nonatomic, assign) BOOL pause; + +/// 内部相机,当 使用内部相机,并且 internalCameraSetting 中 useVirtualCamera == NO 时,才会开启内部真实相机。 +@property (nonatomic, strong, readonly, nullable) FUCaptureCamera *captureCamera; + +/// 内部渲染回调,只有使用内部相机时对应的代理方法才会执行 +/// @see FURenderKitDelegate +@property (nonatomic, weak, nullable) id delegate; + +#pragma mark - setup and destroy + +/// FURenderKit 单例 ++ (instancetype)shareRenderKit; + +/// SDK 初始化 +/// @param setupConfig 初始化配置 +/// @see FUSetupConfig ++ (BOOL)setupWithSetupConfig:(FUSetupConfig *)setupConfig; + +/// setupconfig 里面需要填入offLinePath 离线鉴权包地址 +/// @return 第一次鉴权成功后的文件 ++ (NSData *)setupLocalWithSetupConfig:(FUSetupConfig *)setupConfig; + +/// 内部调用fuSetupInternalCheck 初始化鉴权 +/// @return NO 失败, YES成功 ++ (BOOL)setupInternalCheckWithSetupConfig:(FUSetupConfig *)setupConfig; + +/// 内部调用fuSetupInternalCheckPackageBind 初始化鉴权 +/// @param setupConfig 初始化配置 +/// @return NO 失败, YES成功 ++ (BOOL)setupInternalCheckPackageBindWithSetupConfig:(FUSetupConfig *)setupConfig; + +/// 销毁 FURenderKit,释放内存,同时会清空所有的特效模型。 ++ (void)destroy; + +/// 清空所有的特效模型:美颜、美型、美妆、3D场景与形象等。 ++ (void)clear; + +#pragma mark - version +/// 获取版本信息 +/// @return 版本信息 ++ (NSString *)getVersion; + +/// 设置 log 等级 +/// @param logLevel log 等级 ++ (void)setLogLevel:(FULOGLEVEL)logLevel; + +/// 设置 log 保存路径 +/// @param filePath log 保存路径 ++ (void)setLogFilePath:(NSString *)filePath; + +#pragma mark - scene + +/// 异步添加场景,添加完成后需要将场景设置为 currentScene 才可以生效 +/// @param scene 被添加的场景 +/// @param completion 添加完成的回调 +- (void)addScene:(FUScene *)scene completion:(nullable void(^)(BOOL success))completion; + +/// 移除场景,如果被移除的场景为当前场景,当前渲染效果也会失效。 +/// @param scene 需要被移除的场景 +/// @param completion 移除完成的回调 +- (void)removeScene:(FUScene *)scene completion:(nullable void(^)(BOOL success))completion; + +/// 替换场景,如果需要让新的场景生效,需要将其设置为 currentScene +/// @param scene 被替换的场景,为空时直接添加新的场景 +/// @param newScene 新的场景,为空时直接移除被替换的场景 +/// @param completion 替换成功的回调 +- (void)replaceScene:(nullable FUScene *)scene withNewScene:(nullable FUScene *)newScene completion:(nullable void(^)(BOOL success))completion; + +#pragma mark - internalCamera + +/// 开启内部相机,相机配置请修改 internalCameraSetting 相关属性 +/// @see FUInternalCameraSetting +- (void)startInternalCamera; + +/// 关闭内部相机 +- (void)stopInternalCamera; + +#pragma mark - Record && capture + +/// 开始录像 +/// @param filePath 录像保存地址 ++ (void)startRecordVideoWithFilePath:(NSString *)filePath; + +/// 结束录像 +/// @param complention 录制结束回调 ++ (void)stopRecordVideoComplention:(void(^)(NSString *filePath))complention; + +/// 获取单帧图像 ++ (UIImage *)captureImage; + +#pragma mark - renderWithInput + +/// 核心渲染接口 +/// @discussion 当贴纸、美颜、美型、美妆、3D场景与形象配置到 RenderKit之后,调用该接口会把效果作用于输出的结果中。支持输入单纹理、纹理+imageBuffer、纹理+pixelBuffer、单imageBuffer、单pixelBuffer,输出与输入相对应,也可以支持只输出纹理、或渲染到当前FBO。 +/// @param input 输入图像,类型为 FURenderInput +/// @return 输出图像结果,类型为 FURenderOutput +- (FURenderOutput *)renderWithInput:(FURenderInput *)input; + +#pragma mark - Other API + +/// 获取证书里面的模块权限 +/// @return code get i-th code, currently available for 0 and 1 ++ (int)getModuleCode:(int)code; + +/// 获取错误码 +/// @return 错误码 ++ (int)getSystemError; + +/// 获取错误信息 +/// @return 错误信息 ++(NSString *)getSystemErrorString; + ++ (int)profileGetNumTimers; + ++ (long long)profileGetTimerAverage:(int)index; + +/// 设置缓存目录,提升加载模型速度 +/// @param directory 可读写目录路径 ++ (void)setCacheDirectory:(NSString *)directory; + +/// 设备性能分级 ++ (FUDevicePerformanceLevel)devicePerformanceLevel; + + +#pragma mark - frame time profile + +/// 开启/关闭算法耗时统计功能,默认关闭 +/// @param enable YES开启 NO关闭 ++ (void)setFrameTimeProfileEnable:(BOOL)enable; + +/// 设置算法耗时输出到控制台 ++ (void)setFrameTimeProfileAutoReportToConsole; + +/// 设置算法耗时输出到文件 +/// @param filePath 文件路径 ++ (void)setFrameTimeProfileAutoReportToFile:(NSString *_Nonnull)filePath; + +/// 设置算法耗时打印间隔,默认为300 +/// @param interval 时间间隔 ++ (void)setFrameTimeProfileReportInterval:(int)interval; + +/// 开启/关闭算法耗时统计详细信息,默认关闭 +/// @param enable YES开启 NO关闭 ++ (void)setFrameTimeProfileReportDetailsEnable:(BOOL)enable; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderableObject.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderableObject.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderableObject.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderableObject.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderer.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderer.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderer.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FURenderer.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUScene.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUScene.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUScene.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUScene.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUSceneCamera.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUSceneCamera.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUSceneCamera.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUSceneCamera.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUSetupConfig.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUSetupConfig.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUSetupConfig.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUSetupConfig.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUSticker.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUSticker.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUSticker.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUSticker.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUStickerContainer.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUStickerContainer.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUStickerContainer.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUStickerContainer.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUStruct.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUStruct.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/FUStruct.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/FUStruct.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/UIDevice+FURenderKit.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/UIDevice+FURenderKit.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/UIDevice+FURenderKit.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/UIDevice+FURenderKit.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/UIImage+FURenderKit.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/UIImage+FURenderKit.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/UIImage+FURenderKit.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/UIImage+FURenderKit.h diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/metamacros.h b/FULiveDemo/FURenderKit/FURenderKit.framework/Headers/metamacros.h similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Headers/metamacros.h rename to FULiveDemo/FURenderKit/FURenderKit.framework/Headers/metamacros.h diff --git a/FULiveDemo/FURenderKit/FURenderKit.framework/Info.plist b/FULiveDemo/FURenderKit/FURenderKit.framework/Info.plist new file mode 100644 index 00000000..0639a190 Binary files /dev/null and b/FULiveDemo/FURenderKit/FURenderKit.framework/Info.plist differ diff --git a/FULiveDemo/Lib/FURenderKit.framework/Modules/module.modulemap b/FULiveDemo/FURenderKit/FURenderKit.framework/Modules/module.modulemap similarity index 100% rename from FULiveDemo/Lib/FURenderKit.framework/Modules/module.modulemap rename to FULiveDemo/FURenderKit/FURenderKit.framework/Modules/module.modulemap diff --git a/FULiveDemo/FURenderKit/FURenderKitManager.h b/FULiveDemo/FURenderKit/FURenderKitManager.h new file mode 100644 index 00000000..328a0ac7 --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKitManager.h @@ -0,0 +1,79 @@ +// +// FURenderKitManager.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/22. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FURenderKitManager : NSObject + +/// 当前设备性能等级 +@property (nonatomic, assign, readonly) FUDevicePerformanceLevel devicePerformanceLevel; +/// 测试配置 +@property (nonatomic, copy, readonly) NSDictionary *configurations; +/// 是否需要点位开关 +@property (nonatomic, assign, readonly) BOOL showsLandmarks; + ++ (instancetype)sharedManager; + +/// 初始化FURenderKit +- (void)setupRenderKit; + +/// 销毁FURenderKit +- (void)destoryRenderKit; + +/// 设置设备性能相关细项 +- (void)setDevicePerformanceDetails; + +/// 开始FURenderKit内部渲染 ++ (void)start; + +/// 暂停FURenderKit内部渲染 ++ (void)pause; + +/// 加载人脸AI模型 ++ (void)loadFaceAIModel; + +/// 加载人体AI模型 ++ (void)loadHumanAIModel; + +/// 加载手势AI模型 ++ (void)loadHandAIModel; + +/// 检测是否有人脸 ++ (BOOL)faceTracked; + +/// 检测是否有人体 ++ (BOOL)humanTracked; + +/// 检测是否有手势 ++ (BOOL)handTracked; + +/// 设置最大人脸数量 ++ (void)setMaxFaceNumber:(NSInteger)number; + +/// 设置最大人体数量 ++ (void)setMaxHumanNumber:(NSInteger)number; + +/// 更新美颜磨皮效果(根据人脸检测置信度设置不同磨皮效果) ++ (void)updateBeautyBlurEffect; + +/// 重置面部跟踪结果 ++ (void)resetTrackedResult; + +/// 设置人脸检测模式 ++ (void)setFaceProcessorDetectMode:(FUFaceProcessorDetectMode)mode; + +/// 设置人体检测模式 ++ (void)setHumanProcessorDetectMode:(FUHumanProcessorDetectMode)mode; + +/// 清除所有资源 ++ (void)clearItems; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/FURenderKit/FURenderKitManager.m b/FULiveDemo/FURenderKit/FURenderKitManager.m new file mode 100644 index 00000000..73b2b47e --- /dev/null +++ b/FULiveDemo/FURenderKit/FURenderKitManager.m @@ -0,0 +1,166 @@ +// +// FURenderKitManager.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/22. +// + +#import "FURenderKitManager.h" +#import "authpack.h" + +@interface FURenderKitManager () + +@property (nonatomic, assign) FUDevicePerformanceLevel devicePerformanceLevel; + +@property (nonatomic, copy) NSDictionary *configurations; + +@end + +@implementation FURenderKitManager + ++ (instancetype)sharedManager { + static FURenderKitManager *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[FURenderKitManager alloc] init]; + }); + return instance; +} + +- (void)setupRenderKit { + FUSetupConfig *setupConfig = [[FUSetupConfig alloc] init]; + setupConfig.authPack = FUAuthPackMake(g_auth_package, sizeof(g_auth_package)); + NSString *controllerPath = [[NSBundle mainBundle] pathForResource:@"controller_cpp" ofType:@"bundle"]; + NSString *controllerConfigPath = [[NSBundle mainBundle] pathForResource:@"controller_config" ofType:@"bundle"]; + setupConfig.controllerPath = controllerPath; + setupConfig.controllerConfigPath = controllerConfigPath; + + // 初始化 FURenderKit + [FURenderKit setupWithSetupConfig:setupConfig]; + + [FURenderKit setLogLevel:FU_LOG_LEVEL_ERROR]; + + // 设置缓存目录 + [FURenderKit setCacheDirectory:FUDocumentPath]; + // 算法耗时统计 +// [FURenderKit setFrameTimeProfileEnable:YES]; +// [FURenderKit setFrameTimeProfileReportDetailsEnable:YES]; +// // 算法耗时统计输出到控制台 +// [FURenderKit setFrameTimeProfileAutoReportToConsole]; +// // 算法耗时统计输出到文件 +// [FURenderKit setFrameTimeProfileAutoReportToFile:[FUDocumentPath stringByAppendingPathComponent:[NSString stringWithFormat:@"FUFrameTime %@.txt", FUCurrentDateString()]]]; + + // 舌头 + NSString *path = [[NSBundle mainBundle] pathForResource:@"tongue" ofType:@"bundle"]; + [FUAIKit loadTongueMode:path]; + + self.devicePerformanceLevel = [FURenderKit devicePerformanceLevel]; +} + +- (void)destoryRenderKit { + [FURenderKit destroy]; +} + +- (void)setDevicePerformanceDetails { + // 设置人脸算法质量 + [FUAIKit shareKit].faceProcessorFaceLandmarkQuality = self.devicePerformanceLevel == FUDevicePerformanceLevelHigh ? FUFaceProcessorFaceLandmarkQualityHigh : FUFaceProcessorFaceLandmarkQualityMedium; + // 设置小脸检测是否打开 + [FUAIKit shareKit].faceProcessorDetectSmallFace = self.devicePerformanceLevel == FUDevicePerformanceLevelHigh; +} + ++ (void)start { + [FURenderKit shareRenderKit].pause = NO; +} + ++ (void)pause { + [FURenderKit shareRenderKit].pause = YES; +} + ++ (void)loadFaceAIModel { + NSString *faceAIPath = [[NSBundle mainBundle] pathForResource:@"ai_face_processor" ofType:@"bundle"]; + [FUAIKit loadAIModeWithAIType:FUAITYPE_FACEPROCESSOR dataPath:faceAIPath]; +} + ++ (void)loadHumanAIModel { + // 加载身体 AI 模型,注意:高性能机型加载ai_human_processor_gpu.bundle + NSString *humanBundleName = [FURenderKit devicePerformanceLevel] == FUDevicePerformanceLevelHigh ? @"ai_human_processor_gpu" : @"ai_human_processor"; + NSString *bodyAIPath = [[NSBundle mainBundle] pathForResource:humanBundleName ofType:@"bundle"]; + [FUAIKit loadAIModeWithAIType:FUAITYPE_HUMAN_PROCESSOR dataPath:bodyAIPath]; +} + ++ (void)loadHandAIModel { + NSString *handAIPath = [[NSBundle mainBundle] pathForResource:@"ai_hand_processor" ofType:@"bundle"]; + [FUAIKit loadAIModeWithAIType:FUAITYPE_HANDGESTURE dataPath:handAIPath]; +} + ++ (BOOL)faceTracked { + return [FUAIKit aiFaceProcessorNums] > 0; +} + ++ (BOOL)humanTracked { + return [FUAIKit aiHumanProcessorNums] > 0; +} + ++ (BOOL)handTracked { + return [FUAIKit aiHandDistinguishNums] > 0; +} + ++ (void)setMaxFaceNumber:(NSInteger)number { + [FUAIKit shareKit].maxTrackFaces = (int)number; +} + ++ (void)setMaxHumanNumber:(NSInteger)number { + [FUAIKit shareKit].maxTrackBodies = (int)number; +} + ++ (void)updateBeautyBlurEffect { + if (![FURenderKit shareRenderKit].beauty || ![FURenderKit shareRenderKit].beauty.enable) { + return; + } + if ([FURenderKitManager sharedManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh) { + // 根据人脸置信度设置不同磨皮效果 + CGFloat score = [FUAIKit fuFaceProcessorGetConfidenceScore:0]; + if (score > 0.95) { + [FURenderKit shareRenderKit].beauty.blurType = 3; + [FURenderKit shareRenderKit].beauty.blurUseMask = YES; + } else { + [FURenderKit shareRenderKit].beauty.blurType = 2; + [FURenderKit shareRenderKit].beauty.blurUseMask = NO; + } + } else { + // 设置精细磨皮效果 + [FURenderKit shareRenderKit].beauty.blurType = 2; + [FURenderKit shareRenderKit].beauty.blurUseMask = NO; + } +} + ++ (void)resetTrackedResult { + [FUAIKit resetTrackedResult]; +} + ++ (void)setFaceProcessorDetectMode:(FUFaceProcessorDetectMode)mode { + [FUAIKit shareKit].faceProcessorDetectMode = mode; +} + ++ (void)setHumanProcessorDetectMode:(FUHumanProcessorDetectMode)mode { + [FUAIKit shareKit].humanProcessorDetectMode = mode; +} + ++ (void)clearItems { + [FUAIKit unloadAllAIMode]; + [FURenderKit clear]; +} + +- (NSDictionary *)configurations { + if (!_configurations) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"test_configurations" ofType:@"plist"]; + _configurations = [NSDictionary dictionaryWithContentsOfFile:path]; + } + return _configurations; +} + +- (BOOL)showsLandmarks { + return [self.configurations[@"点位开关"] boolValue]; +} + +@end diff --git a/FULiveDemo/FURenderKit/Resources/graphics/body_slim.bundle b/FULiveDemo/FURenderKit/Resources/graphics/body_slim.bundle new file mode 100644 index 00000000..0b2a3a21 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/graphics/body_slim.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/graphics/controller_cpp.bundle b/FULiveDemo/FURenderKit/Resources/graphics/controller_cpp.bundle new file mode 100644 index 00000000..ec9c102a Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/graphics/controller_cpp.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/graphics/face_beautification.bundle b/FULiveDemo/FURenderKit/Resources/graphics/face_beautification.bundle new file mode 100644 index 00000000..f4373a9a Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/graphics/face_beautification.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/graphics/face_makeup.bundle b/FULiveDemo/FURenderKit/Resources/graphics/face_makeup.bundle new file mode 100644 index 00000000..33a64e22 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/graphics/face_makeup.bundle differ diff --git a/FULiveDemo/Lib/Resources/graphics/fuzzytoonfilter.bundle b/FULiveDemo/FURenderKit/Resources/graphics/fuzzytoonfilter.bundle similarity index 100% rename from FULiveDemo/Lib/Resources/graphics/fuzzytoonfilter.bundle rename to FULiveDemo/FURenderKit/Resources/graphics/fuzzytoonfilter.bundle diff --git a/FULiveDemo/FURenderKit/Resources/graphics/fxaa.bundle b/FULiveDemo/FURenderKit/Resources/graphics/fxaa.bundle new file mode 100644 index 00000000..ff2bc0b5 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/graphics/fxaa.bundle differ diff --git a/FULiveDemo/Lib/Resources/graphics/tongue.bundle b/FULiveDemo/FURenderKit/Resources/graphics/tongue.bundle similarity index 100% rename from FULiveDemo/Lib/Resources/graphics/tongue.bundle rename to FULiveDemo/FURenderKit/Resources/graphics/tongue.bundle diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_bgseg_green.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_bgseg_green.bundle new file mode 100644 index 00000000..43691586 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_bgseg_green.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_face_processor.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_face_processor.bundle new file mode 100644 index 00000000..a0c6f8ba Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_face_processor.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_face_processor_lite.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_face_processor_lite.bundle new file mode 100644 index 00000000..c7305d04 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_face_processor_lite.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_face_recognizer.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_face_recognizer.bundle new file mode 100644 index 00000000..6aaa4a51 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_face_recognizer.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_hand_processor.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_hand_processor.bundle new file mode 100644 index 00000000..c28da742 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_hand_processor.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_human_processor.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_human_processor.bundle new file mode 100644 index 00000000..6436068c Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_human_processor.bundle differ diff --git a/FULiveDemo/FURenderKit/Resources/model/ai_human_processor_gpu.bundle b/FULiveDemo/FURenderKit/Resources/model/ai_human_processor_gpu.bundle new file mode 100644 index 00000000..3ea00f66 Binary files /dev/null and b/FULiveDemo/FURenderKit/Resources/model/ai_human_processor_gpu.bundle differ diff --git a/FULiveDemo/Lib/authpack.h b/FULiveDemo/FURenderKit/authpack.h similarity index 100% rename from FULiveDemo/Lib/authpack.h rename to FULiveDemo/FURenderKit/authpack.h diff --git a/FULiveDemo/Helper/Category/SVProgressHUD+FU.h b/FULiveDemo/Helper/Category/SVProgressHUD+FU.h new file mode 100644 index 00000000..5dc9b36e --- /dev/null +++ b/FULiveDemo/Helper/Category/SVProgressHUD+FU.h @@ -0,0 +1,22 @@ +// +// SVProgressHUD+FU.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SVProgressHUD (FU) + ++ (void)showInfo:(NSString *)status; + ++ (void)showError:(NSString *)status; + ++ (void)showSuccess:(NSString *)status; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helper/Category/SVProgressHUD+FU.m b/FULiveDemo/Helper/Category/SVProgressHUD+FU.m new file mode 100644 index 00000000..8494b864 --- /dev/null +++ b/FULiveDemo/Helper/Category/SVProgressHUD+FU.m @@ -0,0 +1,27 @@ +// +// SVProgressHUD+FU.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/23. +// + +#import "SVProgressHUD+FU.h" + +@implementation SVProgressHUD (FU) + ++ (void)showInfo:(NSString *)status { + [SVProgressHUD setMinimumDismissTimeInterval:1.5]; + [SVProgressHUD showInfoWithStatus:status]; +} + ++ (void)showError:(NSString *)status { + [SVProgressHUD setMinimumDismissTimeInterval:1.5]; + [SVProgressHUD showErrorWithStatus:status]; +} + ++ (void)showSuccess:(NSString *)status { + [SVProgressHUD setMinimumDismissTimeInterval:1.5]; + [SVProgressHUD showSuccessWithStatus:status]; +} + +@end diff --git a/FULiveDemo/Helper/Category/UIButton+FU.h b/FULiveDemo/Helper/Category/UIButton+FU.h new file mode 100644 index 00000000..6d6560d3 --- /dev/null +++ b/FULiveDemo/Helper/Category/UIButton+FU.h @@ -0,0 +1,21 @@ +// +// UIButton+FU.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIButton (FU) + +/// 延迟点击方法 +/// @param delay 延迟时间 +/// @param handler 回调 +- (void)addCommonActionWithDelay:(NSTimeInterval)delay actionHandler:(void (^)(void))handler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helper/Category/UIButton+FU.m b/FULiveDemo/Helper/Category/UIButton+FU.m new file mode 100644 index 00000000..623df6f6 --- /dev/null +++ b/FULiveDemo/Helper/Category/UIButton+FU.m @@ -0,0 +1,53 @@ +// +// UIButton+FU.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "UIButton+FU.h" + +static char kFUDelayActionHandler, kFUDelayTime; + +@interface UIButton () + +@property (nonatomic, copy) void (^delayActionHandler)(void); +@property (nonatomic, assign) NSTimeInterval delayTime; + +@end + +@implementation UIButton (FU) + +- (void)addCommonActionWithDelay:(NSTimeInterval)delay actionHandler:(void (^)(void))handler { + self.delayTime = delay; + self.delayActionHandler = handler; + [self addTarget:self action:@selector(delayAction:) forControlEvents:UIControlEventTouchUpInside]; +} + +- (void)delayAction:(UIButton *)sender { + if (self.delayActionHandler) { + self.delayActionHandler(); + self.enabled = NO; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.delayTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + self.enabled = YES; + }); + } +} + +- (void)setDelayActionHandler:(void (^)(void))delayActionHandler { + objc_setAssociatedObject(self, &kFUDelayActionHandler, delayActionHandler, OBJC_ASSOCIATION_COPY_NONATOMIC); +} + +- (void (^)(void))delayActionHandler { + return objc_getAssociatedObject(self, &kFUDelayActionHandler); +} + +- (NSTimeInterval)delayTime { + return [objc_getAssociatedObject(self, &kFUDelayTime) doubleValue]; +} + +- (void)setDelayTime:(NSTimeInterval)delayTime { + objc_setAssociatedObject(self, &kFUDelayTime, @(delayTime), OBJC_ASSOCIATION_COPY_NONATOMIC); +} + +@end diff --git a/FULiveDemo/Helper/Category/UIColor+FU.h b/FULiveDemo/Helper/Category/UIColor+FU.h new file mode 100755 index 00000000..930ac3f9 --- /dev/null +++ b/FULiveDemo/Helper/Category/UIColor+FU.h @@ -0,0 +1,31 @@ +// +// UIColor+FU.h +// FULive +// +// Created by L on 2018/7/31. +// Copyright © 2018年 L. All rights reserved. +// + +#import + +@interface UIColor (FU) + +/// 十六进制颜色字符串转UIColor +/// @param hexColorString 颜色字符串 ++ (UIColor *)colorWithHexColorString:(NSString *)hexColorString; + +/// 十六进制颜色字符串转UIColor +/// @param hexColorString 颜色字符串 +/// @param alpha 透明度 ++ (UIColor *)colorWithHexColorString:(NSString *)hexColorString alpha:(CGFloat)alpha; + +/// 十六进制颜色转UIColor +/// @param hex 十六进制颜色值 ++ (UIColor *)colorWithHex:(NSUInteger)hex; + +/// 十六进制颜色转UIColor +/// @param hex 十六进制颜色值 +/// @param alpha 透明度 ++ (UIColor *)colorWithHex:(NSUInteger)hex alpha:(CGFloat)alpha; + +@end diff --git a/FULiveDemo/Helper/Category/UIColor+FU.m b/FULiveDemo/Helper/Category/UIColor+FU.m new file mode 100755 index 00000000..2ac1de7b --- /dev/null +++ b/FULiveDemo/Helper/Category/UIColor+FU.m @@ -0,0 +1,64 @@ +// +// UIColor+FU.m +// FULive +// +// Created by L on 2018/7/31. +// Copyright © 2018年 L. All rights reserved. +// + +#import "UIColor+FU.h" + +@implementation UIColor (FU) + +#pragma mark 十六进制颜色 ++ (UIColor *)colorWithHexColorString:(NSString *)hexColorString{ + return [self colorWithHexColorString:hexColorString alpha:1.0f]; +} + +#pragma mark 十六进制颜色 ++ (UIColor *)colorWithHexColorString:(NSString *)hexColorString alpha:(CGFloat)alpha{ + + //删除前缀字符 + if ([hexColorString hasPrefix:@"0X"] || [hexColorString hasPrefix:@"0x"]) { + hexColorString = [hexColorString substringFromIndex:2]; + } + if ([hexColorString hasPrefix:@"#"]) { + hexColorString = [hexColorString substringFromIndex:1]; + } + + //判断字符串是否符合长度规范 + if (hexColorString.length != 6) { + return [UIColor clearColor]; + } + + //截取色值字符 + NSRange range = NSMakeRange(0, 2); + NSString *redString = [hexColorString substringWithRange:range]; + range.location = 2; + NSString *greenString = [hexColorString substringWithRange:range]; + range.location = 4; + NSString *blueString = [hexColorString substringWithRange:range]; + + //转换成色值 + unsigned int red; + unsigned int green; + unsigned int blue; + [[NSScanner scannerWithString:redString] scanHexInt:&red]; + [[NSScanner scannerWithString:greenString] scanHexInt:&green]; + [[NSScanner scannerWithString:blueString] scanHexInt:&blue]; + UIColor *resultColor = [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:alpha]; + return resultColor; +} + ++ (UIColor *)colorWithHex:(NSUInteger)hex { + return [self colorWithHex:hex alpha:1.0]; +} + ++ (UIColor *)colorWithHex:(NSUInteger)hex alpha:(CGFloat)alpha { + int r = (hex >> 16) & 0xFF; + int g = (hex >> 8) & 0xFF; + int b = hex & 0xFF; + return [UIColor colorWithRed:r/255.f green:g/255.f blue:b/255.f alpha:alpha]; +} + +@end diff --git a/FULiveDemo/Helpers/Category/UIImage+FU.h b/FULiveDemo/Helper/Category/UIImage+FU.h similarity index 76% rename from FULiveDemo/Helpers/Category/UIImage+FU.h rename to FULiveDemo/Helper/Category/UIImage+FU.h index 74e395f0..5f83910e 100644 --- a/FULiveDemo/Helpers/Category/UIImage+FU.h +++ b/FULiveDemo/Helper/Category/UIImage+FU.h @@ -18,6 +18,12 @@ NS_ASSUME_NONNULL_BEGIN /// 图片转正 - (UIImage *)fu_resetImageOrientationToUp; +/// 图片处理 +- (UIImage *)fu_processedImage; + +/// 获取纯色图片 ++ (UIImage *)imageWithColor:(UIColor *)color; + @end NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helper/Category/UIImage+FU.m b/FULiveDemo/Helper/Category/UIImage+FU.m new file mode 100644 index 00000000..ab6ceb8e --- /dev/null +++ b/FULiveDemo/Helper/Category/UIImage+FU.m @@ -0,0 +1,56 @@ +// +// UIImage+FU.m +// FULiveDemo +// +// Created by 项林平 on 2021/6/21. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "UIImage+FU.h" + +@implementation UIImage (FU) + +- (UIImage *)fu_compress:(CGFloat)ratio { + CGSize resultSize = CGSizeMake(self.size.width * ratio, self.size.height * ratio); + UIGraphicsBeginImageContext(resultSize); + [self drawInRect:CGRectMake(0, 0, resultSize.width, resultSize.height)]; + UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return resultImage; +} + +- (UIImage *)fu_resetImageOrientationToUp { + UIGraphicsBeginImageContext(CGSizeMake(self.size.width, self.size.height)); + [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; + UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return resultImage; +} + +- (UIImage *)fu_processedImage { + CGFloat imagePixel = self.size.width * self.size.height; + UIImage *resultImage = self; + // 超过限制像素需要压缩 + if (imagePixel > FUPicturePixelMaxSize) { + CGFloat ratio = FUPicturePixelMaxSize / imagePixel * 1.0; + resultImage = [resultImage fu_compress:ratio]; + } + // 图片转正 + if (resultImage.imageOrientation != UIImageOrientationUp && resultImage.imageOrientation != UIImageOrientationUpMirrored) { + resultImage = [resultImage fu_resetImageOrientationToUp]; + } + return resultImage; +} + ++ (UIImage *)imageWithColor:(UIColor *)color { + CGRect rect = CGRectMake(0, 0, 1, 1); + UIGraphicsBeginImageContext(rect.size); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(context, color.CGColor); + CGContextFillRect(context, rect); + UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return resultImage; +} + +@end diff --git a/FULiveDemo/Helpers/FULandmarkManager.h b/FULiveDemo/Helper/FULandmarkManager.h similarity index 89% rename from FULiveDemo/Helpers/FULandmarkManager.h rename to FULiveDemo/Helper/FULandmarkManager.h index a8ec9572..aca9369a 100644 --- a/FULiveDemo/Helpers/FULandmarkManager.h +++ b/FULiveDemo/Helper/FULandmarkManager.h @@ -9,8 +9,6 @@ #import -extern BOOL const FUShowLandmark; - NS_ASSUME_NONNULL_BEGIN @interface FULandmarkManager : UISwitch diff --git a/FULiveDemo/Helpers/FULandmarkManager.m b/FULiveDemo/Helper/FULandmarkManager.m similarity index 95% rename from FULiveDemo/Helpers/FULandmarkManager.m rename to FULiveDemo/Helper/FULandmarkManager.m index 6ab31ff9..f1c3df09 100644 --- a/FULiveDemo/Helpers/FULandmarkManager.m +++ b/FULiveDemo/Helper/FULandmarkManager.m @@ -10,9 +10,6 @@ #import -/// 设置是否显示点位开关,默认为NO -BOOL const FUShowLandmark = NO; - @interface FULandmarkManager () @property (nonatomic, strong) FUFacialFeatures *landmarksItem; diff --git a/FULiveDemo/Helper/FULiveDefine.h b/FULiveDemo/Helper/FULiveDefine.h new file mode 100755 index 00000000..b55610a3 --- /dev/null +++ b/FULiveDemo/Helper/FULiveDefine.h @@ -0,0 +1,136 @@ +// +// FULiveDefine.h +// FULive +// +// Created by L on 2018/8/1. +// Copyright © 2018年 L. All rights reserved. +// + +#import +#import "UIColor+FU.h" + +#pragma mark - 宏 + +#define FUScreenWidth (CGRectGetWidth([UIScreen mainScreen].bounds)) + +#define FUScreenHeight (CGRectGetHeight([UIScreen mainScreen].bounds)) + +/// 状态栏高度 +#define FUStatusBarHeight (CGRectGetHeight([UIApplication sharedApplication].statusBarFrame)) + +#define FUDocumentPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject + +#define FUColorFromHexString(aHex) [UIColor colorWithHexColorString:aHex] + +#define FUColorFromHexStringWithAlpha(aHex, aAlpha) [UIColor colorWithHexColorString:aHex alpha:aAlpha] + +#define FUColorFromHex(aHex) [UIColor colorWithHex:aHex] + +#define FUColorFromHexWithAlpha(aHex, aAlpha) [UIColor colorWithHex:aHex alpha:aAlpha] + +#define FULocalizedString(key) NSLocalizedString(key, nil) + +#define FUPicturePixelMaxSize ([FURenderKitManager sharedManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh ? 12746752 : 5760000) + +#define FUStickersPath [FUDocumentPath stringByAppendingPathComponent:@"FUStickers"] + +#define FUStickerIconsPath [FUDocumentPath stringByAppendingPathComponent:@"FUStickerIcons"] + +#define FUStickerBundlesPath [FUDocumentPath stringByAppendingPathComponent:@"FUStickerBundles"] + + +#pragma mark - 枚举 + +/// 特效模块分组 +typedef NS_ENUM(NSUInteger, FUGroup) { + FUGroupFace = 0, + FUGroupBody, + FUGroupContentService +}; + +/// 特效模块 +typedef NS_ENUM(NSUInteger, FUModule) { + FUModuleBeauty = 0, + FUModuleMakeup, + FUModuleSticker, + FUModuleAnimoji, + FUModuleHairBeauty, + FUModuleLightMakeup, + FUModuleARMask, + FUModuleHilarious, + FUModuleFaceFusion, + FUModuleExpressionRecognition, + FUModuleMusicFilter, + FUModuleDistortingMirror, + FUModuleBodyBeauty, + FUModuleBodyAvatar, + FUModuleSegmentation, + FUModuleGestureRecognition, + FUModuleGreenScreen, + FUModuleQualityTicker +}; + +/// AI模型分类 +typedef NS_OPTIONS(NSUInteger, FUAIModelType) { + FUAIModelTypeFace = 1 << 0, // 人脸 + FUAIModelTypeHuman = 1 << 1, // 人体 + FUAIModelTypeHand = 1 << 2 // 手势 +}; + +/// 跟踪部位 +typedef NS_ENUM(NSInteger, FUDetectingParts) { + FUDetectingPartsFace = 0, // 人脸 + FUDetectingPartsHuman, // 人体 + FUDetectingPartsHand, // 手势 + FUDetectingPartsNone // 不需要跟踪 +}; + +/// 子妆容类型 +typedef NS_ENUM(NSUInteger, FUSingleMakeupType) { + FUSingleMakeupTypeFoundation, // 粉底 + FUSingleMakeupTypeLip, // 口红 + FUSingleMakeupTypeBlusher, // 腮红 + FUSingleMakeupTypeEyebrow, // 眉毛 + FUSingleMakeupTypeEyeshadow, // 眼影 + FUSingleMakeupTypeEyeliner, // 眼线 + FUSingleMakeupTypeEyelash, // 睫毛 + FUSingleMakeupTypeHighlight, // 高光 + FUSingleMakeupTypeShadow, // 阴影 + FUSingleMakeupTypePupil // 美瞳 +}; + +#pragma mark - 内联函数 + +static inline BOOL FUDeviceIsiPhoneXStyle() { + UIWindow *keyWindow = [UIApplication sharedApplication].delegate.window; + if (@available(iOS 11.0, *)) { + CGFloat bottomInsets = keyWindow.safeAreaInsets.bottom; + if (bottomInsets > 0) { + return YES; + } + } + return NO; +} + +static inline CGFloat FUHeightIncludeBottomSafeArea(CGFloat height) { + if (@available(iOS 11.0, *)) { + height += [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom; + } + return height; +} + +static inline CGFloat FUHeightIncludeTopSafeArea(CGFloat height) { + if (@available(iOS 11.0, *)) { + height += [UIApplication sharedApplication].delegate.window.safeAreaInsets.top; + } + return height; +} + +static inline NSString * FUCurrentDateString() { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"YYYYMMddhhmmssSS"; + NSDate *date = [NSDate date]; + NSString *dateString = [formatter stringFromDate:date]; + return dateString; +} + diff --git a/FULiveDemo/Helpers/FUNetworkingHelper.h b/FULiveDemo/Helper/FUNetworkingHelper.h similarity index 100% rename from FULiveDemo/Helpers/FUNetworkingHelper.h rename to FULiveDemo/Helper/FUNetworkingHelper.h diff --git a/FULiveDemo/Helpers/FUNetworkingHelper.m b/FULiveDemo/Helper/FUNetworkingHelper.m similarity index 100% rename from FULiveDemo/Helpers/FUNetworkingHelper.m rename to FULiveDemo/Helper/FUNetworkingHelper.m diff --git a/FULiveDemo/Helper/FUUtility.h b/FULiveDemo/Helper/FUUtility.h new file mode 100644 index 00000000..05f7a58e --- /dev/null +++ b/FULiveDemo/Helper/FUUtility.h @@ -0,0 +1,34 @@ +// +// FUUtility.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUUtility : NSObject + +/// 获取本地视频地址 +/// - Parameters: +/// - info: 从相册选择信息 +/// - handler: 结果回调 ++ (void)requestVideoURLFromInfo:(NSDictionary *)info resultHandler:(void (^)(NSURL *videoURL))handler; + +/// 从视频地址获取首帧预览图 +/// - Parameters: +/// - videoURL: 视频地址 +/// - preferred: 是否调整方向 ++ (UIImage *)previewImageFromVideoURL:(NSURL *)videoURL preferredTrackTransform:(BOOL)preferred; + +/// 从视频地址获取最后一帧图片 +/// - Parameters: +/// - videoURL: 视频地址 +/// - preferred: 是否调整方向 ++ (UIImage *)lastFrameImageFromVideoURL:(NSURL *)videoURL preferredTrackTransform:(BOOL)preferred; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helper/FUUtility.m b/FULiveDemo/Helper/FUUtility.m new file mode 100644 index 00000000..39bc5a4e --- /dev/null +++ b/FULiveDemo/Helper/FUUtility.m @@ -0,0 +1,67 @@ +// +// FUUtility.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FUUtility.h" +#import + +@implementation FUUtility + ++ (void)requestVideoURLFromInfo:(NSDictionary *)info resultHandler:(void (^)(NSURL * _Nonnull))handler { + if (info[UIImagePickerControllerMediaURL]) { + !handler ?: handler(info[UIImagePickerControllerMediaURL]); + } else if (info[UIImagePickerControllerReferenceURL]) { + NSURL *refrenceURL = info[UIImagePickerControllerReferenceURL]; + PHFetchResult *assets = [PHAsset fetchAssetsWithALAssetURLs:@[refrenceURL] options:nil]; + [[PHImageManager defaultManager] requestAVAssetForVideo:assets.firstObject options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { + AVURLAsset *urlAsset = (AVURLAsset *)asset; + !handler ?: handler(urlAsset.URL); + }]; + } else { + if (@available(iOS 11.0, *)) { + PHAsset *asset = info[UIImagePickerControllerPHAsset]; + [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { + AVURLAsset *urlAsset = (AVURLAsset *)asset; + !handler ?: handler(urlAsset.URL); + }]; + } + } +} + ++ (UIImage *)previewImageFromVideoURL:(NSURL *)videoURL preferredTrackTransform:(BOOL)preferred { + if (!videoURL) { + return nil; + } + AVURLAsset *asset = [AVURLAsset assetWithURL:videoURL]; + AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; + imageGenerator.appliesPreferredTrackTransform = preferred; + CMTime time = CMTimeMakeWithSeconds(0.0, 600); + NSError *error = nil; + CMTime actualTime; + CGImageRef image = [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error]; + UIImage *videoImage = [[UIImage alloc] initWithCGImage:image]; + CGImageRelease(image); + return videoImage; +} + ++ (UIImage *)lastFrameImageFromVideoURL:(NSURL *)videoURL preferredTrackTransform:(BOOL)preferred { + if (!videoURL) { + return nil; + } + AVURLAsset *asset = [AVURLAsset assetWithURL:videoURL]; + AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; + imageGenerator.appliesPreferredTrackTransform = preferred; + Float64 lastFrameTime = CMTimeGetSeconds(asset.duration); + CMTime time = CMTimeMakeWithSeconds(lastFrameTime, 600); + NSError *error = nil; + CMTime actualTime; + CGImageRef image = [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error]; + UIImage *videoImage = [[UIImage alloc] initWithCGImage:image]; + CGImageRelease(image); + return videoImage; +} + +@end diff --git a/FULiveDemo/Helpers/Category/NSObject+economizer.h b/FULiveDemo/Helpers/Category/NSObject+economizer.h deleted file mode 100644 index c1007db9..00000000 --- a/FULiveDemo/Helpers/Category/NSObject+economizer.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// NSObject+economizer.h -// ttttt -// -// Created by Chen on 2021/3/15. -// - -#import -/** - * throttle 预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新的时间周期 - * debounce 当调用动作触发一段时间后,才会执行该动作,若在这段时间间隔内又调用此动作则将重新计算时间间隔 - */ -typedef NS_ENUM(NSUInteger, CONTROLLTYPE) { - CONTROLLTYPE_throttle, - CONTROLLTYPE_debounce, -}; - -typedef void(^ControlEventBlock) (void); - -NS_ASSUME_NONNULL_BEGIN - -@interface NSObject (economizer) -@property (nonatomic, assign) CONTROLLTYPE type; - -- (void)controlEventWithInterval:(NSTimeInterval)interval queue:(dispatch_queue_t)queue controlEventBlock:(ControlEventBlock)block; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/Category/NSObject+economizer.m b/FULiveDemo/Helpers/Category/NSObject+economizer.m deleted file mode 100644 index f3f0cae8..00000000 --- a/FULiveDemo/Helpers/Category/NSObject+economizer.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// NSObject+economizer.m -// ttttt -// -// Created by Chen on 2021/3/15. -// - -#import "NSObject+economizer.h" -#import -#import - -static NSString *controlType; - -static time_t lastTime = 0; -static time_t duration = 0; -@implementation NSObject (economizer) - -- (void)setType:(CONTROLLTYPE)type { - if (self.type != type) { - [self reset]; - } - objc_setAssociatedObject(self, &controlType, @(type), OBJC_ASSOCIATION_ASSIGN); -} - - -- (CONTROLLTYPE)type { - return [objc_getAssociatedObject(self, &controlType) unsignedIntValue]; -} - -- (void)controlEventWithInterval:(NSTimeInterval)interval queue:(dispatch_queue_t)queue controlEventBlock:(ControlEventBlock)block { - switch (self.type) { - case CONTROLLTYPE_throttle: - [[self class] throttleWithTimeInterval:interval queue:queue throttleBlock:block]; - break; - case CONTROLLTYPE_debounce: - [[self class] debounceWithTimeInterval:interval queue:queue debounceBlock:block]; - break; - default: - [[self class] throttleWithTimeInterval:interval queue:queue throttleBlock:block]; - break; - } -} - -+ (void)throttleWithTimeInterval:(NSTimeInterval)interval queue:(dispatch_queue_t)queue throttleBlock:(ControlEventBlock)throttleBlock { - time_t curTime = [self uptime]; - if (curTime - lastTime > (size_t)interval * 1000) { - dispatch_async(queue, ^{ - if (throttleBlock) { - throttleBlock(); - } - }); - } else { - NSLog(@"点击的时间间隔:%f 小于设定的时间间隔:%f",(NSTimeInterval)(curTime - lastTime) / 1000, interval); - } - - lastTime = curTime; -} - -+ (void)debounceWithTimeInterval:(NSTimeInterval)interval queue:(dispatch_queue_t)queue debounceBlock:(ControlEventBlock)debounceBlock { - time_t curTime = [self uptime]; - if (duration != 0) { - if (duration - (curTime - lastTime) <= 0) { - dispatch_async(queue, ^{ - if (debounceBlock) { - debounceBlock(); - } - }); - } else { - NSLog(@"点击的时间间隔:%f 小于设定的时间间隔:%f 不触发block",(NSTimeInterval)(curTime - lastTime) / 1000, interval); - } - } else { - duration = interval * 1000; - } - lastTime = curTime; -} - -+ (time_t)uptime { - struct timeval tv; - time_t time = 0; - if (gettimeofday(&tv, NULL) == 0) { - time_t s = tv.tv_sec * 1000; - time_t c = tv.tv_usec / 1000; - time = s + c; -// NSDate *date = [NSDate dateWithTimeIntervalSince1970: time / 1000]; -// NSLog(@"%@",date); - } - - return time; -} - -//重置参数 -- (void)reset { - //重置时间 - lastTime = 0; - duration = 0; -} -@end diff --git a/FULiveDemo/Helpers/Category/UIColor+FU.h b/FULiveDemo/Helpers/Category/UIColor+FU.h deleted file mode 100755 index a7b7a0ee..00000000 --- a/FULiveDemo/Helpers/Category/UIColor+FU.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UIColor+FU.h -// FULive -// -// Created by L on 2018/7/31. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -@interface UIColor (FU) - -/** 十六进制颜色 */ -+ (UIColor *)colorWithHexColorString:(NSString *)hexColorString; - -/** 十六进制颜色:含alpha */ -+ (UIColor *)colorWithHexColorString:(NSString *)hexColorString alpha:(float)alpha; -@end diff --git a/FULiveDemo/Helpers/Category/UIColor+FU.m b/FULiveDemo/Helpers/Category/UIColor+FU.m deleted file mode 100755 index 08f78c4b..00000000 --- a/FULiveDemo/Helpers/Category/UIColor+FU.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// UIColor+FU.m -// FULive -// -// Created by L on 2018/7/31. -// Copyright © 2018年 L. All rights reserved. -// - -#import "UIColor+FU.h" - -@implementation UIColor (FU) - -#pragma mark 十六进制颜色 -+ (UIColor *)colorWithHexColorString:(NSString *)hexColorString{ - return [self colorWithHexColorString:hexColorString alpha:1.0f]; -} - -#pragma mark 十六进制颜色 -+ (UIColor *)colorWithHexColorString:(NSString *)hexColorString alpha:(float)alpha{ - - unsigned int red, green, blue; - - NSRange range; - - range.length =2; - - range.location =0; - - [[NSScanner scannerWithString:[hexColorString substringWithRange:range]]scanHexInt:&red]; - - range.location =2; - - [[NSScanner scannerWithString:[hexColorString substringWithRange:range]]scanHexInt:&green]; - - range.location =4; - - [[NSScanner scannerWithString:[hexColorString substringWithRange:range]]scanHexInt:&blue]; - - UIColor *color = [UIColor colorWithRed:(float)(red/255.0f)green:(float)(green/255.0f)blue:(float)(blue/255.0f)alpha:alpha]; - - return color; -} -@end diff --git a/FULiveDemo/Helpers/Category/UIImage+FU.m b/FULiveDemo/Helpers/Category/UIImage+FU.m deleted file mode 100644 index 8d0ba880..00000000 --- a/FULiveDemo/Helpers/Category/UIImage+FU.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// UIImage+FU.m -// FULiveDemo -// -// Created by 项林平 on 2021/6/21. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "UIImage+FU.h" - -@implementation UIImage (FU) - -- (UIImage *)fu_compress:(CGFloat)ratio { - CGSize resultSize = CGSizeMake(self.size.width * ratio, self.size.height * ratio); - UIGraphicsBeginImageContext(resultSize); - [self drawInRect:CGRectMake(0, 0, resultSize.width, resultSize.height)]; - UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return resultImage; -} - -- (UIImage *)fu_resetImageOrientationToUp { - UIGraphicsBeginImageContext(CGSizeMake(self.size.width, self.size.height)); - [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; - UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return resultImage; -} - -@end diff --git a/FULiveDemo/Helpers/Category/UIView+FU.h b/FULiveDemo/Helpers/Category/UIView+FU.h deleted file mode 100644 index 81f7f247..00000000 --- a/FULiveDemo/Helpers/Category/UIView+FU.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// UIView+FU.h -// FULiveDemo -// -// Created by 项林平 on 2021/8/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIView (FU) - -/// 获取当前View所在控制器 -- (UIViewController *)fu_targetViewController; - -+ (UIViewController *)fu_topViewController:(UIViewController *)viewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/Category/UIView+FU.m b/FULiveDemo/Helpers/Category/UIView+FU.m deleted file mode 100644 index 0e1c381f..00000000 --- a/FULiveDemo/Helpers/Category/UIView+FU.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// UIView+FU.m -// FULiveDemo -// -// Created by 项林平 on 2021/8/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "UIView+FU.h" - -@implementation UIView (FU) - -- (UIViewController *)fu_targetViewController { - for (UIView *next = [self superview]; next; next = next.superview) { - UIResponder *nextResponder = [next nextResponder]; - if ([nextResponder isKindOfClass:[UIViewController class]]) { - return (UIViewController *)nextResponder; - } - } - return nil; -} - -+ (UIViewController *)fu_topViewController:(UIViewController *)viewController { - if (viewController.presentedViewController) { - return [self fu_topViewController:viewController.presentingViewController]; - } else if ([viewController isKindOfClass:[UINavigationController class]]) { - UINavigationController *navigation = (UINavigationController *)viewController; - return [self fu_topViewController:navigation.visibleViewController]; - } else if ([viewController isKindOfClass:[UITabBarController class]]) { - UITabBarController *tabBar = (UITabBarController *)viewController; - return [self fu_topViewController:tabBar.selectedViewController]; - } else { - return viewController; - } -} - - -@end diff --git a/FULiveDemo/Helpers/FULocalDataManager.h b/FULiveDemo/Helpers/FULocalDataManager.h deleted file mode 100644 index 1bcda245..00000000 --- a/FULiveDemo/Helpers/FULocalDataManager.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// FULocalDataManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import -#import "FUPersistentBeautyModel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FULocalDataManager : NSObject - -@property (nonatomic, strong) FUPersistentBeautyModel *persistentBeauty; - -+ (instancetype)shareManager; - -- (void)save; - -//道具贴纸 -+ (NSDictionary *)stickerTipsJsonData; - -//美妆 - 子妆容 -+ (NSDictionary *)makeupJsonData; - -//美妆 - 整体妆容 -+ (NSDictionary *)makeupWholeJsonData; - -//轻美妆数据 -+ (NSDictionary *)lightMakeupJsonData; - -//美体数据 -+ (NSArray *)bodyBeautyJsonData; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/FULocalDataManager.m b/FULiveDemo/Helpers/FULocalDataManager.m deleted file mode 100644 index 22e17627..00000000 --- a/FULiveDemo/Helpers/FULocalDataManager.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// FULocalDataManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FULocalDataManager.h" -#import - -NSString * const FUPersistentBeautyKey = @"FUPersistentBeauty"; - -@interface FULocalDataManager () -@property (nonatomic, strong) NSDictionary *stickTipsData; -@property (nonatomic, strong) NSDictionary *makeupJsonData; -@property (nonatomic, strong) NSDictionary *makeupWholeJsonData; -@property (nonatomic, strong) NSDictionary *lightMakupJsonData; -@property (nonatomic, strong) NSArray *bodyBeautyJsonData; -@end - -@implementation FULocalDataManager -+ (instancetype)shareManager { - static FULocalDataManager *_manager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _manager = [[FULocalDataManager alloc] init]; - }); - return _manager; -} - - -- (instancetype)init { - self = [super init]; - if (self) { - self.stickTipsData = [self stickerTipsJsonData]; - if ([[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyKey]) { - // 获取本地持久化数据 - NSDictionary *beautyData = [[NSUserDefaults standardUserDefaults] objectForKey:FUPersistentBeautyKey]; - self.persistentBeauty = [FUPersistentBeautyModel mj_objectWithKeyValues:beautyData]; - } else { - self.persistentBeauty = [[FUPersistentBeautyModel alloc] init]; - } - } - return self; -} - -- (void)save { - if (!self.persistentBeauty.beautySkins || !self.persistentBeauty.beautyShapes || !self.persistentBeauty.beautyFilters) { - return; - } - NSDictionary *beautyData = self.persistentBeauty.mj_JSONObject; - [[NSUserDefaults standardUserDefaults] setObject:beautyData forKey:FUPersistentBeautyKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; -} - -+ (NSDictionary *)stickerTipsJsonData { - return [[FULocalDataManager shareManager] stickerTipsJsonData]; -} - -+ (NSDictionary *)makeupJsonData { - return [[FULocalDataManager shareManager] makeupJsonData]; -} - -+ (NSDictionary *)makeupWholeJsonData { - return [[FULocalDataManager shareManager] makeupWholeJsonData]; -} - -//轻美妆数据 -+ (NSDictionary *)lightMakeupJsonData { - return [[FULocalDataManager shareManager] lightMakupJsonData]; -} - -+ (NSArray *)bodyBeautyJsonData { - return [[FULocalDataManager shareManager] bodyBeautyJsonData]; -} - -//道具贴纸提示语数据 -- (NSDictionary *)stickerTipsJsonData { - if (!_stickTipsData) { - _stickTipsData = @{ - @"hez_ztt_fu_mp":@"张嘴试试", - @"future_warrior":@"张嘴试试", - @"jet_mask":@"鼓腮帮子", - @"sdx2":@"皱眉触发", - @"luhantongkuan_ztt_fu":@"眨一眨眼", - @"qingqing_ztt_fu":@"嘟嘴试试", - @"xiaobianzi_zh_fu":@"微笑触发", - @"xiaoxueshen_ztt_fu":@"吹气触发", - @"hez_ztt_fu":@"张嘴试试", - @"ssd_thread_korheart":@"单手手指比心", - @"fu_zh_baoquan":@"双手抱拳", - @"fu_zh_hezxiong":@"双手合十", - @"fu_ztt_live520":@"双手比心", - @"ssd_thread_thumb":@"竖个拇指", - @"ssd_thread_six":@"比个六", - @"ssd_thread_cute":@"双拳靠近脸颊卖萌", - @"ctrl_rain":@"推出手掌", - @"ctrl_snow":@"推出手掌", - @"ctrl_flower":@"推出手掌", - @"big_head_facewarp3":@"微笑触发" - }; - } - return _stickTipsData; -} - - -//获取美妆业务数据 -- (NSDictionary *)makeupJsonData { - if (!_makeupJsonData) { - NSString *path= [[NSBundle mainBundle] pathForResource:@"makeup" ofType:@"json"]; - NSData *data= [[NSData alloc] initWithContentsOfFile:path]; - _makeupJsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; - } - return _makeupJsonData; -} - -//美妆 - 整体妆容 -- (NSDictionary *)makeupWholeJsonData { - if (!_makeupWholeJsonData) { - /* 整体妆容 */ - /*注意: 子妆信息makeups,FUMakeupSupModel 设置bundleName会自动在mainBundle中对应的json信息配置,详情查看FUMakeupSupModel.m - makeups 信息做组合妆匹配单个子妆,选中icon高亮业务用*/ - NSString *wholePath = [[NSBundle mainBundle] pathForResource:@"makeup_whole" ofType:@"json"]; - NSData *wholeData = [[NSData alloc] initWithContentsOfFile:wholePath]; - _makeupWholeJsonData = [NSJSONSerialization JSONObjectWithData:wholeData options:NSJSONReadingMutableContainers error:nil]; - } - return _makeupWholeJsonData; -} - -- (NSDictionary *)lightMakupJsonData { - if (!_lightMakupJsonData) { - NSString *lightMakeupPath = [[NSBundle mainBundle] pathForResource:@"lightMakeup" ofType:@"json"]; - NSData *lightMakeupData = [[NSData alloc] initWithContentsOfFile:lightMakeupPath]; - _lightMakupJsonData = [NSJSONSerialization JSONObjectWithData:lightMakeupData options:NSJSONReadingMutableContainers error:nil]; - } - return _lightMakupJsonData; -} - -- (NSArray *)bodyBeautyJsonData { - if (!_bodyBeautyJsonData) { - NSString *bodyBeautyPath = [[NSBundle mainBundle] pathForResource:@"BodyBeautyDefault" ofType:@"json"]; - NSData *bodyData = [[NSData alloc] initWithContentsOfFile:bodyBeautyPath]; - _bodyBeautyJsonData = [NSJSONSerialization JSONObjectWithData:bodyData options:NSJSONReadingMutableContainers error:nil]; - } - return _bodyBeautyJsonData; -} -@end diff --git a/FULiveDemo/Helpers/FUManager.h b/FULiveDemo/Helpers/FUManager.h deleted file mode 100755 index 42728cdf..00000000 --- a/FULiveDemo/Helpers/FUManager.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// FUManager.h -// FULiveDemo -// -// Created by 刘洋 on 2017/8/18. -// Copyright © 2017年 刘洋. All rights reserved. -// - -#import -#import - -@interface FUManager : NSObject - -+ (FUManager *)shareManager; - -/// 保存的设备性能等级 -@property (nonatomic, assign, readonly) FUDevicePerformanceLevel devicePerformanceLevel; - -/// 初始化FURenderKit -- (void)setupRenderKit; - -/// 设置设备性能相关细项 -- (void)setDevicePerformanceDetails; - -/// 加载人脸AI模型 -+ (void)loadFaceAIModel; - -/// 加载人体AI模型 -+ (void)loadHumanAIModel; - -/// 加载手势AI模型 -+ (void)loadHandAIModel; - -/// 检测是否有人脸 -+ (BOOL)faceTracked; - -/// 检测是否有人体 -+ (BOOL)humanTracked; - -/// 检测是否有手势 -+ (BOOL)handTracked; - -/// 更新美颜磨皮效果(根据人脸检测置信度设置不同磨皮效果) -+ (void)updateBeautyBlurEffect; - -/// 重置面部跟踪结果 -+ (void)resetTrackedResult; - -/// 清除所有资源 -+ (void)clearItems; - -@end diff --git a/FULiveDemo/Helpers/FUManager.m b/FULiveDemo/Helpers/FUManager.m deleted file mode 100755 index 8ab6a7b5..00000000 --- a/FULiveDemo/Helpers/FUManager.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// FUManager.m -// FULiveDemo -// -// Created by 刘洋 on 2017/8/18. -// Copyright © 2017年 刘洋. All rights reserved. -// - -#import "FUManager.h" -#import "authpack.h" - -static FUManager *shareManager = NULL; - -@interface FUManager () - -@property (nonatomic, assign) FUDevicePerformanceLevel devicePerformanceLevel; - -@end - -@implementation FUManager - -+ (FUManager *)shareManager -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - shareManager = [[FUManager alloc] init]; - }); - - return shareManager; -} - -- (void)setupRenderKit { - - NSString *controllerPath = [[NSBundle mainBundle] pathForResource:@"controller_cpp" ofType:@"bundle"]; - NSString *controllerConfigPath = [[NSBundle mainBundle] pathForResource:@"controller_config" ofType:@"bundle"]; - FUSetupConfig *setupConfig = [[FUSetupConfig alloc] init]; - setupConfig.authPack = FUAuthPackMake(g_auth_package, sizeof(g_auth_package)); - setupConfig.controllerPath = controllerPath; - setupConfig.controllerConfigPath = controllerConfigPath; - - // 初始化 FURenderKit - [FURenderKit setupWithSetupConfig:setupConfig]; - // [FURenderKit setupInternalCheckPackageBindWithSetupConfig:setupConfig]; - - [FURenderKit setLogLevel:FU_LOG_LEVEL_ERROR]; - - // 设置缓存目录 - [FURenderKit setCacheDirectory:FUDocumentPath]; - // 算法耗时统计 -// [FURenderKit setFrameTimeProfileEnable:YES]; -// [FURenderKit setFrameTimeProfileReportDetailsEnable:YES]; -// // 算法耗时统计输出到控制台 -// [FURenderKit setFrameTimeProfileAutoReportToConsole]; -// // 算法耗时统计输出到文件 -// [FURenderKit setFrameTimeProfileAutoReportToFile:[FUDocumentPath stringByAppendingPathComponent:[NSString stringWithFormat:@"FUFrameTime %@.txt", FUCurrentDateString()]]]; - - // 舌头 - NSString *path = [[NSBundle mainBundle] pathForResource:@"tongue" ofType:@"bundle"]; - [FUAIKit loadTongueMode:path]; - - self.devicePerformanceLevel = [FURenderKit devicePerformanceLevel]; -} - -- (void)setDevicePerformanceDetails { - // 设置人脸算法质量 - [FUAIKit shareKit].faceProcessorFaceLandmarkQuality = self.devicePerformanceLevel == FUDevicePerformanceLevelHigh ? FUFaceProcessorFaceLandmarkQualityHigh : FUFaceProcessorFaceLandmarkQualityMedium; - // 设置小脸检测是否打开 - [FUAIKit shareKit].faceProcessorDetectSmallFace = self.devicePerformanceLevel == FUDevicePerformanceLevelHigh; -} - -+ (void)loadFaceAIModel { - NSString *faceAIPath = [[NSBundle mainBundle] pathForResource:@"ai_face_processor" ofType:@"bundle"]; - [FUAIKit loadAIModeWithAIType:FUAITYPE_FACEPROCESSOR dataPath:faceAIPath]; -} - -+ (void)loadHumanAIModel { - // 加载身体 AI 模型,注意:高性能机型加载ai_human_processor_gpu.bundle - NSString *humanBundleName = [FURenderKit devicePerformanceLevel] == FUDevicePerformanceLevelHigh ? @"ai_human_processor_gpu" : @"ai_human_processor"; - NSString *bodyAIPath = [[NSBundle mainBundle] pathForResource:humanBundleName ofType:@"bundle"]; - [FUAIKit loadAIModeWithAIType:FUAITYPE_HUMAN_PROCESSOR dataPath:bodyAIPath]; -} - -+ (void)loadHandAIModel { - NSString *handAIPath = [[NSBundle mainBundle] pathForResource:@"ai_hand_processor" ofType:@"bundle"]; - [FUAIKit loadAIModeWithAIType:FUAITYPE_HANDGESTURE dataPath:handAIPath]; -} - -+ (BOOL)faceTracked { - return [FUAIKit aiFaceProcessorNums] > 0; -} - -+ (BOOL)humanTracked { - return [FUAIKit aiHumanProcessorNums] > 0; -} - -+ (BOOL)handTracked { - return [FUAIKit aiHandDistinguishNums] > 0; -} - -+ (void)updateBeautyBlurEffect { - if (![FURenderKit shareRenderKit].beauty || ![FURenderKit shareRenderKit].beauty.enable) { - return; - } - if ([FUManager shareManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh) { - // 根据人脸置信度设置不同磨皮效果 - CGFloat score = [FUAIKit fuFaceProcessorGetConfidenceScore:0]; - if (score > 0.95) { - [FURenderKit shareRenderKit].beauty.blurType = 3; - [FURenderKit shareRenderKit].beauty.blurUseMask = YES; - } else { - [FURenderKit shareRenderKit].beauty.blurType = 2; - [FURenderKit shareRenderKit].beauty.blurUseMask = NO; - } - } else { - // 设置精细磨皮效果 - [FURenderKit shareRenderKit].beauty.blurType = 2; - [FURenderKit shareRenderKit].beauty.blurUseMask = NO; - } -} - -+ (void)resetTrackedResult { - [FUAIKit resetTrackedResult]; -} - -+ (void)clearItems { - [FUAIKit unloadAllAIMode]; - [FURenderKit clear]; -} - -@end diff --git a/FULiveDemo/Helpers/Protocol/FUBaseUIModelProtocol.h b/FULiveDemo/Helpers/Protocol/FUBaseUIModelProtocol.h deleted file mode 100644 index 83ba4862..00000000 --- a/FULiveDemo/Helpers/Protocol/FUBaseUIModelProtocol.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// FUBaseUIModelProtocol.h -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * 基础UI模型数据协议, - * 为了解决 共性UI 结构设计的属性模型协议 - * 不同业务模型按照需要 选取对应的属性 - * ex: @synthesize title, imageName - */ -@protocol FUBaseUIModelProtocol - -@optional -@property (nonatomic, strong) NSString *title; -@property (nonatomic, strong) NSString *imageName; - -@property (nonatomic, strong) id value; - -@property (nonatomic, strong) id defaultValue; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/Protocol/FUSingleMakeupProtocol.h b/FULiveDemo/Helpers/Protocol/FUSingleMakeupProtocol.h deleted file mode 100644 index a2e38019..00000000 --- a/FULiveDemo/Helpers/Protocol/FUSingleMakeupProtocol.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// FUSingleMakeupProtocol.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/18. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -#import "FUMakeupDefine.h" - - -NS_ASSUME_NONNULL_BEGIN - -// 美妆业务相关共用的协议属性 -@protocol FUSingleMakeupProtocol - -@optional -/// 子妆类型 -@property (nonatomic, assign) FUSingleMakeupType type; -/// 加载到子妆的图片或者bundle -@property (nonatomic, copy) NSString *bundleName; -/// 妆容程度值 -@property (nonatomic, assign) float value; -/// 实际妆容程度值(子妆value * 组合妆value) -@property (nonatomic, assign) float realValue; -/// 妆容颜色 -@property (nonatomic, copy) NSArray *colorsArray; -/// 是否双色口红 -@property (nonatomic, assign) BOOL isTwoColorLip; -/// 口红类型 -@property (nonatomic, assign) NSInteger lipType; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/FULiveDemo/Helpers/Protocol/FUStickerProtocol.h b/FULiveDemo/Helpers/Protocol/FUStickerProtocol.h deleted file mode 100644 index 5e312813..00000000 --- a/FULiveDemo/Helpers/Protocol/FUStickerProtocol.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUStickerProtocol.h -// FULiveDemo -// -// Created by Chen on 2021/2/26. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUStickerProtocol -@optional - -/** 加载道具 */ -- (void)loadItem:(NSString *_Nullable)itemName - completion:(void (^ __nullable)(BOOL finished))completion; - -/**选中的道具名称*/ -@property (nonatomic, strong) NSString * _Nullable selectedItem; -/** 获取道具对应的提示语 */ -- (NSString *_Nonnull)getStickTipsWithItemName:(NSString *_Nonnull)itemName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/UI/FUColourFlowLayout.h b/FULiveDemo/Helpers/UI/FUColourFlowLayout.h deleted file mode 100644 index 300c7134..00000000 --- a/FULiveDemo/Helpers/UI/FUColourFlowLayout.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUColourFlowLayout.h -// FULiveDemo -// -// Created by 孙慕 on 2019/5/31. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUColourFlowLayout : UICollectionViewFlowLayout - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/UI/FUColourFlowLayout.m b/FULiveDemo/Helpers/UI/FUColourFlowLayout.m deleted file mode 100644 index 2c36ac68..00000000 --- a/FULiveDemo/Helpers/UI/FUColourFlowLayout.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// FUColourFlowLayout.m -// FULiveDemo -// -// Created by 孙慕 on 2019/5/31. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUColourFlowLayout.h" - -@implementation FUColourFlowLayout -//在这个方法中,UICollectionView还没有实例化,所以取不到其对应的frame --(instancetype)init{ - if (self == [super init]) { - - } - return self; -} -//当布局刷新的时候会自动调用这个方法 --(void)prepareLayout{ - [super prepareLayout]; - //修改滚动方向 为水平方向来滚动 - self.scrollDirection = UICollectionViewScrollDirectionVertical; - //获取对应UICollectionView的Size - CGSize collectionSize = self.collectionView.frame.size; - - //定义显示ITEM的 宽 高 - CGFloat itemWidth = collectionSize.width*0.6; - CGFloat itemHeight = collectionSize.width*0.6; - - //修改ITEM大小 - self.itemSize = CGSizeMake(itemWidth, itemHeight); - - //设置头部和尾部的初始间距 -// CGFloat topMargin = collectionSize.height/2-itemWidth/2; -// self.sectionInset = UIEdgeInsetsMake(topMargin,0, topMargin,0 ); - -} - -//返回所的有的Item对应的属性设置 --(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ - //取出所有的Item对应的属性 - NSArray *superAttributesArray = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:rect] copyItems:YES]; - - //计算中心点 - CGFloat screenCenter = self.collectionView.contentOffset.y+self.collectionView.frame.size.height/2; - //循环设置Item 的属性 - - for (UICollectionViewLayoutAttributes *attributes in superAttributesArray) { - //计算 差值 - CGFloat deltaMargin = ABS(screenCenter - attributes.center.y); - //计算放大比例 - CGFloat scale = 1 - deltaMargin/(self.collectionView.frame.size.height/2+attributes.size.height) * 0.9; - //设置 - attributes.transform = CGAffineTransformMakeScale(scale, scale); - } - return superAttributesArray; -} - -//当手指离开屏幕时会调用此方法 --(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{ - //取出屏幕的中心点 - CGFloat screenCenter = proposedContentOffset.y +self.collectionView.frame.size.height/2; - //取出可见范围内的Cell - CGRect visibleRect = CGRectZero; - visibleRect.size = self.collectionView.frame.size; - visibleRect.origin = proposedContentOffset; - - NSArray *visibleArray = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:visibleRect] copyItems:YES]; - - CGFloat minMargin = MAXFLOAT; - - for (UICollectionViewLayoutAttributes *attributes in visibleArray) { - CGFloat deltaMargin = attributes.center.y - screenCenter; - if (ABS(minMargin)>ABS(deltaMargin)) { - minMargin = deltaMargin; - } - } - return CGPointMake(proposedContentOffset.x, proposedContentOffset.y + minMargin); -} - -//当屏幕的可见范围发生变化 的时候 -//重新刷新视图 --(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ - return YES; -} - -@end diff --git a/FULiveDemo/Helpers/UI/FUColourView.h b/FULiveDemo/Helpers/UI/FUColourView.h deleted file mode 100644 index 1a206596..00000000 --- a/FULiveDemo/Helpers/UI/FUColourView.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// FUColourView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/5/31. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import - - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUColourViewDelegate - -@optional --(void)colourViewDidSelIndex:(int)index; - -@end - -@interface FUColourView : UIView -@property (assign,nonatomic) id delegate; - -- (void)setDataColors:(NSArray *)colors; - -- (void)setSelCell:(int)index; - -@end - -@interface FUColourViewCell : UICollectionViewCell - -@property (strong, nonatomic) UIImageView *topImage; -@property (strong, nonatomic) UILabel *botlabel; --(void)setColors:(NSArray *)array; - - -@end - - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Helpers/UI/FUColourView.m b/FULiveDemo/Helpers/UI/FUColourView.m deleted file mode 100644 index 6d130706..00000000 --- a/FULiveDemo/Helpers/UI/FUColourView.m +++ /dev/null @@ -1,246 +0,0 @@ -// -// FUColourView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/5/31. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUColourView.h" -#import "FUColourFlowLayout.h" - -static const float cellW = 40; -@interface FUColourView() -/** UICollectionView */ -@property (strong, nonatomic) UICollectionView *collection; - -@property (strong, nonatomic) NSArray *colors; -@end - - -@implementation FUColourView - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - [self setupView]; - } - return self; -} - --(void)setupView{ -// self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - - /* 颜色collection */ - FUColourFlowLayout *layout = [[FUColourFlowLayout alloc] init]; - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake((self.frame.size.width - cellW)/2, 0, cellW, self.frame.size.height) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - _collection.showsVerticalScrollIndicator = NO; - - CGFloat collectionViewHeight = CGRectGetHeight(_collection.bounds); - [_collection setContentInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2,0)]; - [self addSubview:_collection]; - [_collection registerClass:[FUColourViewCell class] forCellWithReuseIdentifier:@"colourViewCell"]; - - [self setSelCell:4]; - - /* 中间指示圈 */ - CAShapeLayer *layer = [CAShapeLayer new]; - layer.lineWidth = 4; - layer.strokeColor = [UIColor whiteColor].CGColor; - layer.fillColor = [UIColor clearColor].CGColor; - CGFloat radius = cellW/2 + 2; - UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:self.collection.center radius:radius startAngle:0 endAngle:2.0f*M_PI clockwise:NO]; - layer.path = [path CGPath]; - [self.layer addSublayer:layer]; -} - -- (void)setDataColors:(NSArray *)colors{ - _colors = colors; - [_collection reloadData]; -} - --(void)setSelCell:(int)index{ - float y = index * (cellW + 10) + cellW / 2 - self.collection.frame.size.height / 2; - CGPoint offset = CGPointMake(0,y); - [self.collection setContentOffset:offset animated:YES]; -} - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _colors.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUColourViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"colourViewCell" forIndexPath:indexPath]; -// cell.backgroundColor = [UIColor greenColor]; -// NSString *imageName = self.dataArray[indexPath.row].imageName ; -// -// cell.topImage.image = [UIImage imageNamed:imageName] ; -// cell.botlabel.text = self.dataArray[indexPath.row].title; - [cell setColors:_colors[indexPath.row]]; - - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake(cellW, cellW) ; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - CGFloat collectionViewHeight = CGRectGetHeight(self.collection.frame); - [collectionView setContentInset:UIEdgeInsetsMake(collectionViewHeight / 2, 0, collectionViewHeight / 2, 0)]; - UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - CGPoint offset = CGPointMake(0, cell.center.y - collectionViewHeight / 2); - [collectionView setContentOffset:offset animated:YES]; - - if (self.delegate && [self.delegate respondsToSelector:@selector(colourViewDidSelIndex:)]) { - [self.delegate colourViewDidSelIndex:(int)indexPath.row]; - } -} - - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ - // 选中\点击对应的按钮 - NSUInteger index = (scrollView.contentOffset.y + self.collection.frame.size.height / 2 - cellW / 2) / (cellW + 10); - if (self.delegate && [self.delegate respondsToSelector:@selector(colourViewDidSelIndex:)]) { - [self.delegate colourViewDidSelIndex:(int)index]; - } -} - -@end - - -@implementation FUColourViewCell - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - [self setupAllBgColorView]; - self.layer.cornerRadius = frame.size.width / 2; - self.layer.masksToBounds = YES; - - } - - return self; -} - --(void)setupAllBgColorView{ - float h1 = self.frame.size.width; - float h2 = self.frame.size.width / 2; - float h3 = self.frame.size.width / 3; - - UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0 * h2, 0 * h2, h2, h2)]; - view.tag = 400; - [self.contentView addSubview:view]; - UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0 * h2, 1 * h2, h2, h2)]; - view1.tag = 401; - [self.contentView addSubview:view1]; - UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(1 * h2, 0 * h2, h2, h2)]; - view2.tag = 402; - [self.contentView addSubview:view2]; - UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(1 * h2, 1 * h2, h2, h2)]; - view3.tag = 403; - [self.contentView addSubview:view3]; - - UIView *view4 = [[UIView alloc] initWithFrame:CGRectMake(0 ,0 * h3, h1, h3)]; - view4.tag = 300; - [self.contentView addSubview:view4]; - UIView *view5 = [[UIView alloc] initWithFrame:CGRectMake(0, 1 * h3, h1, h3)]; - view5.tag = 301; - [self.contentView addSubview:view5]; - UIView *view6 = [[UIView alloc] initWithFrame:CGRectMake(0, 2 * h3, h1, h3)]; - view6.tag = 302; - [self.contentView addSubview:view6]; - - UIView *view7 = [[UIView alloc] initWithFrame:CGRectMake(0 ,0 * h2, h1, h2)]; - view7.tag = 200; - [self.contentView addSubview:view7]; - UIView *view8 = [[UIView alloc] initWithFrame:CGRectMake(0, 1 * h2, h1, h2)]; - view8.tag = 201; - [self.contentView addSubview:view8]; -} - -/* 设置背景颜色 */ --(void)setColors:(NSArray *)array{ - - for (UIView *view in self.contentView.subviews) { - view.hidden = YES; - } - self.contentView.backgroundColor = [UIColor clearColor]; - - NSMutableArray *mutArray = [NSMutableArray array]; - int colorNum = (int)array.count / 4; - - for (int i = 0; i < colorNum; i ++) { - if([array[i * 4 + 3] intValue] == 1){ - [mutArray addObject:array[i * 4]]; - [mutArray addObject:array[i * 4 + 1]]; - [mutArray addObject:array[i * 4 + 2]]; - [mutArray addObject:array[i * 4 + 3]]; - } - } - - int alphaNum = (int)mutArray.count / 4; - if (alphaNum == 4) { - for (int i = 0; i < 4; i ++) { - float R = [array[i * 4 ] floatValue]; - float G = [array[i * 4 + 1] floatValue]; - float B = [array[i * 4 + 2] floatValue]; - float A = [array[i * 4 + 3] floatValue]; - - UIView *view = [self.contentView viewWithTag:400 + i]; - view.hidden = NO; - view.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; - [self.contentView bringSubviewToFront:view]; - } - } - - - if (alphaNum == 3) { - for (int i = 0; i < 3; i ++) { - float R = [array[i * 4 ] floatValue]; - float G = [array[i * 4 + 1] floatValue]; - float B = [array[i * 4 + 2] floatValue]; - float A = [array[i * 4 + 3] floatValue]; - - UIView *view = [self.contentView viewWithTag:300 + i]; - view.hidden = NO; - view.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; - [self.contentView bringSubviewToFront:view]; - } - } - - if (alphaNum == 2) { - for (int i = 0; i < 3; i ++) { - float R = [array[i * 4 ] floatValue]; - float G = [array[i * 4 + 1] floatValue]; - float B = [array[i * 4 + 2] floatValue]; - float A = [array[i * 4 + 3] floatValue]; - - UIView *view = [self.contentView viewWithTag:200 + i]; - view.hidden = NO; - view.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; - [self.contentView bringSubviewToFront:view]; - } - } - - if (alphaNum == 1) { - float R = [array[0] floatValue]; - float G = [array[1] floatValue]; - float B = [array[2] floatValue]; - float A = [array[3] floatValue]; - - self.contentView.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; - } - -} - -@end diff --git a/FULiveDemo/Helpers/UI/FULightingSlider.m b/FULiveDemo/Helpers/UI/FULightingSlider.m deleted file mode 100644 index 8988af58..00000000 --- a/FULiveDemo/Helpers/UI/FULightingSlider.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// FULightingSlider.m -// FULiveDemo -// -// Created by L on 2018/9/20. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FULightingSlider.h" - -@implementation FULightingSlider -{ - UIView *line ; -} - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - [self setThumbImage:[UIImage imageNamed:@"FULighting_Btn"] forState:UIControlStateNormal]; - [self setMaximumTrackTintColor:[UIColor whiteColor]]; - [self setMinimumTrackTintColor:[UIColor whiteColor]]; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - [self setThumbImage:[UIImage imageNamed:@"FULighting_Btn"] forState:UIControlStateNormal]; - [self setMaximumTrackTintColor:[UIColor whiteColor]]; - [self setMinimumTrackTintColor:[UIColor whiteColor]]; -} - --(void)layoutSubviews { - [super layoutSubviews]; - if (!line) { - line = [[UIView alloc] init]; - line.backgroundColor = [UIColor whiteColor]; - line.layer.masksToBounds = YES ; - line.layer.cornerRadius = 1.0 ; - [self insertSubview:line atIndex: self.subviews.count - 1]; - } - line.frame = CGRectMake(self.frame.size.width / 2.0 - 1.0, 4.0, 2.0, self.frame.size.height - 8.0) ; - - CGFloat value = self.value ; - [self setValue:value animated:NO]; -} - - -- (void)setValue:(float)value animated:(BOOL)animated { - [super setValue:value animated:animated]; -} - -@end diff --git a/FULiveDemo/Helpers/UI/FULightingView.m b/FULiveDemo/Helpers/UI/FULightingView.m deleted file mode 100644 index 1c7efe4f..00000000 --- a/FULiveDemo/Helpers/UI/FULightingView.m +++ /dev/null @@ -1,76 +0,0 @@ -// -// FULightingView.m -// FULiveDemo -// -// Created by L on 2018/9/20. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FULightingView.h" - -@interface FULightingView() -@property (strong, nonatomic) UIImageView *sunImage; -@property (strong, nonatomic) UIImageView *monImage; -@end - -@implementation FULightingView -{ - UILabel *tipLabel ; -} - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - [self setupSubView]; - } - return self; -} - - --(void)setupSubView{ - self.monImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"FULighting_mon"]]; - self.monImage.frame = CGRectMake(10, 0, 20, 20); - [self addSubview:self.monImage]; - self.sunImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"FULighting_sun"]]; - self.sunImage.frame = CGRectMake(self.frame.size.width - 30, 0, 20, 20); - [self addSubview:self.sunImage]; - - self.slider = [[FULightingSlider alloc] initWithFrame:CGRectMake(40, 0, self.frame.size.width - 80, 20)]; - [self.slider addTarget:self action:@selector(sliderValueChange:) forControlEvents:UIControlEventValueChanged]; - [self addSubview:self.slider]; - - self.monImage.transform = CGAffineTransformMakeRotation(M_PI_2); - self.sunImage.transform = CGAffineTransformMakeRotation(M_PI_2); - -// tipLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.monImage.frame.origin.y + self.monImage.frame.size.height + 10, 30, 10)]; -// tipLabel.backgroundColor = [UIColor clearColor]; -// tipLabel.textAlignment = NSTextAlignmentCenter ; -// tipLabel.textColor = [UIColor whiteColor]; -// tipLabel.font = [UIFont systemFontOfSize:10]; -// tipLabel.transform = CGAffineTransformMakeRotation(M_PI_2); -// [self addSubview:tipLabel]; -// tipLabel.hidden = YES ; -} - - --(void)awakeFromNib { - [super awakeFromNib]; - [self setupSubView]; - -} - --(void)sliderValueChange:(FULightingSlider *)sender { - float value = sender.value ; -// tipLabel.text = [NSString stringWithFormat:@"%.1f", value]; -// CGFloat x = (value + 4) * (sender.frame.size.width - 20)/8.0 - tipLabel.frame.size.width * 0.5 + 10 + sender.frame.origin.x; -// CGRect frame = tipLabel.frame; -// frame.origin.x = x; -// tipLabel.frame = frame ; -// tipLabel.hidden = !sender.tracking ; - - if ([self.delegate respondsToSelector:@selector(lightingViewValueDidChange:)]) { - [self.delegate lightingViewValueDidChange:value]; - } -} - - -@end diff --git a/FULiveDemo/Helpers/UI/FUPhotoButton.h b/FULiveDemo/Helpers/UI/FUPhotoButton.h deleted file mode 100755 index c89d1aa9..00000000 --- a/FULiveDemo/Helpers/UI/FUPhotoButton.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// PhotoButton.h -// FULiveDemo -// -// Created by liuyang on 2016/12/27. -// Copyright © 2016年 liuyang. All rights reserved. -// - -#import - - -typedef NS_OPTIONS(NSUInteger, FUPhotoButtonType) { - FUPhotoButtonTypeRecord = 1 << 0, - FUPhotoButtonTypeTakePhoto = 1 << 1, - -}; - -@protocol FUPhotoButtonDelegate - -- (void)takePhoto; - -- (void)startRecord; - -- (void)stopRecord; - -@end - -@interface FUPhotoButton : UIButton - -@property (nonatomic, weak) id delegate; - -@property (nonatomic, assign) FUPhotoButtonType type; - --(void)photoButtonFinishRecord; - -@end diff --git a/FULiveDemo/Helpers/UI/FUPhotoButton.m b/FULiveDemo/Helpers/UI/FUPhotoButton.m deleted file mode 100755 index 1820fcc9..00000000 --- a/FULiveDemo/Helpers/UI/FUPhotoButton.m +++ /dev/null @@ -1,183 +0,0 @@ -// -// PhotoButton.m -// FULiveDemo -// -// Created by liuyang on 2016/12/27. -// Copyright © 2016年 liuyang. All rights reserved. -// - -#import "FUPhotoButton.h" -#import "FUCircleProgressView.h" -#import -#import -#import - - -@interface FUPhotoButton () -{ - NSTimer *timer; - NSInteger time; - CGAffineTransform originTransform ; - -} -@property (nonatomic, strong) FUCircleProgressView *circleProgress; -@property (nonatomic, strong) UILongPressGestureRecognizer *longPress; -@end - -@implementation FUPhotoButton - - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - time = 0; - _type = FUPhotoButtonTypeRecord | FUPhotoButtonTypeTakePhoto; - _longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)]; - _longPress.minimumPressDuration = 0; //定义按的时间 - [self addGestureRecognizer:_longPress]; - [self addSubview:self.circleProgress]; - // [FUVolumeObserver sharedInstance].delegate = self; - } - - return self; -} - -- (void)awakeFromNib -{ - [super awakeFromNib]; - - time = 0; - _type = FUPhotoButtonTypeRecord | FUPhotoButtonTypeTakePhoto; - _longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)]; - _longPress.minimumPressDuration = 0; //定义按的时间 - [self addGestureRecognizer:_longPress]; - [self addSubview:self.circleProgress]; - // [FUVolumeObserver sharedInstance].delegate = self; - -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - self.circleProgress.frame = CGRectMake(1, 1, self.bounds.size.width - 2, self.bounds.size.height - 2); -} - -- (FUCircleProgressView *)circleProgress -{ - if(!_circleProgress) - { - _circleProgress = [[FUCircleProgressView alloc] initWithFrame:CGRectMake(1, 1, self.bounds.size.width - 2, self.bounds.size.height - 2)]; - _circleProgress.backgroundColor = [UIColor clearColor]; - _circleProgress.progressColor = [UIColor colorWithRed:92 / 255.0 green:181 / 255.0 blue:249 / 255.0 alpha:1]; - _circleProgress.progressWidth = 3; - _circleProgress.progressBackgroundColor = [UIColor clearColor]; - _circleProgress.clockwise = 0; - _circleProgress.percent = 0; - } - - return _circleProgress; -} - - --(void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer{ - if (gestureRecognizer.state == 1) { - self.selected = YES; - timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTime) userInfo:NULL repeats:YES]; - [timer fire]; - [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; - - }else if(gestureRecognizer.state == 3) - { - [self photoButtonFinishRecord]; - } -} - --(void)photoButtonFinishRecord{ - if (timer) { - if (time <= 3) { - [self takePhoto]; - }else - { - [self stopRecord]; - } - [timer invalidate]; - timer = nil; - time = 0; - _circleProgress.percent = 0; - self.selected = NO; - NSLog(@"time invalidate"); - } -} - - -- (void)updateTime -{ - time ++; - - if (time - 4 >=0) { - if (time - 4 == 0) { - [self startRecord]; - } - _circleProgress.percent += 0.01; - } - - if (time - 4 >= 100 ) { - [self stopRecord]; - [timer invalidate]; - timer = nil; - time = 0; - _circleProgress.percent = 0; - self.selected = NO; - } -} - --(void)takePhoto{ - if (!(_type & FUPhotoButtonTypeTakePhoto)) return; - if ([self.delegate respondsToSelector:@selector(takePhoto)]) { - [self.delegate takePhoto]; - } -} --(void)startRecord{ - if (!(_type & FUPhotoButtonTypeRecord)) return; - dispatch_async(dispatch_get_main_queue(), ^{ - originTransform = self.transform ; - [UIView animateWithDuration:0.5 animations:^{ -// self.transform = CGAffineTransformMakeTranslation(0, -5); - self.transform = CGAffineTransformScale(self.transform, 1.1, 1.1); - }]; - if ([self.delegate respondsToSelector:@selector(startRecord)]) { - [self.delegate startRecord]; - } - }); -} - --(void)stopRecord{ - if (!(_type & FUPhotoButtonTypeRecord)) return; - dispatch_async(dispatch_get_main_queue(), ^{ - if ([self.delegate respondsToSelector:@selector(stopRecord)]) { - [self.delegate stopRecord]; - } -// [UIView animateWithDuration:0.5 animations:^{ - self.transform = originTransform; -// }]; - }); -} - - --(void)setType:(FUPhotoButtonType)type{ - _type = type; - if (type & FUPhotoButtonTypeRecord){ - _circleProgress.hidden = NO; - [self addGestureRecognizer:_longPress]; - }else{ - _circleProgress.hidden = YES; - [self removeGestureRecognizer:_longPress]; - [self addTarget:self action:@selector(takePhoto) forControlEvents:UIControlEventTouchUpInside]; - } -} - --(void)dealloc{ - NSLog(@"FUPhotoButton dealloc-----"); -} - -@end diff --git a/FULiveDemo/Homepage/Model/FUHomepageModel.h b/FULiveDemo/Homepage/Model/FUHomepageModel.h index d67af3a0..5ded4638 100644 --- a/FULiveDemo/Homepage/Model/FUHomepageModel.h +++ b/FULiveDemo/Homepage/Model/FUHomepageModel.h @@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN @interface FUHomepageModule : NSObject -@property (nonatomic, assign) FUModuleType type; +@property (nonatomic, assign) FUModule module; @property (nonatomic, copy) NSString *title; /// 是否有使用权限 @@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN @interface FUHomepageGroup : NSObject -@property (nonatomic, assign) FUGroupType type; +@property (nonatomic, assign) FUGroup group; @property (nonatomic, copy) NSString *name; diff --git a/FULiveDemo/Homepage/View/FUHomepageModuleCell.m b/FULiveDemo/Homepage/View/FUHomepageModuleCell.m index 59c1582d..15a637c7 100644 --- a/FULiveDemo/Homepage/View/FUHomepageModuleCell.m +++ b/FULiveDemo/Homepage/View/FUHomepageModuleCell.m @@ -33,7 +33,7 @@ - (instancetype)initWithFrame:(CGRect)frame { } - (void)configureUI { - self.backgroundColor = [UIColor colorWithHexColorString:@"1F1D35"]; + self.backgroundColor = FUColorFromHex(0x1F1D35); self.layer.masksToBounds = YES; self.layer.cornerRadius = 5.0; @@ -109,6 +109,4 @@ - (LOTAnimationView *)animationView { return _animationView; } - - @end diff --git a/FULiveDemo/Homepage/ViewController/FUHomepageViewController.m b/FULiveDemo/Homepage/ViewController/FUHomepageViewController.m index 97bba2a6..a4a5d55e 100644 --- a/FULiveDemo/Homepage/ViewController/FUHomepageViewController.m +++ b/FULiveDemo/Homepage/ViewController/FUHomepageViewController.m @@ -9,30 +9,29 @@ #import "FUHomepageViewController.h" #import "FUHomepageModuleCell.h" #import "FUHomepageHeaderView.h" - #import "FUHomepageViewModel.h" -#import "FUBeautyController.h" +#import "FUBeautyViewController.h" #import "FUMakeupViewController.h" #import "FUStickerViewController.h" -#import "FUAnimojiController.h" -#import "FUHairController.h" -#import "FULightMakeupController.h" +#import "FUAnimojiViewController.h" +#import "FUHairBeautyViewController.h" +#import "FULightMakeupViewController.h" #import "FUARMaskViewController.h" #import "FUHilariousViewController.h" -#import "FUPosterListViewController.h" +#import "FUFaceFusionCollectionViewController.h" #import "FUExpressionRecognitionViewController.h" -#import "FUMusicFilterController.h" +#import "FUMusicFilterViewController.h" #import "FUDistortingMirrorViewController.h" -#import "FUBGSegmentationController.h" +#import "FUSegmentationViewController.h" #import "FUGestureRecognitionViewController.h" -#import "FUBodyBeautyController.h" -#import "FUBodyAvatarController.h" -#import "FULvMuViewController.h" -#import "FUQStickersViewController.h" +#import "FUBodyBeautyViewController.h" +#import "FUBodyAvatarViewController.h" +#import "FUGreenScreenViewController.h" +#import "FUQualityStickerViewController.h" -NSString * const kFUHomepageModuleCellIdentifier = @"FUHomepageModuleCell"; -NSString * const kFUHomepageHeaderViewIdentifier = @"FUHomepageHeaderView"; +static NSString * const kFUHomepageModuleCellIdentifier = @"FUHomepageModuleCell"; +static NSString * const kFUHomepageHeaderViewIdentifier = @"FUHomepageHeaderView"; @interface FUHomepageViewController () @@ -51,7 +50,7 @@ - (void)viewDidLoad { [super viewDidLoad]; // 初始化FURenderKit - [[FUManager shareManager] setupRenderKit]; + [[FURenderKitManager sharedManager] setupRenderKit]; [self configureUI]; } @@ -59,7 +58,7 @@ - (void)viewDidLoad { #pragma mark - UI - (void)configureUI { - self.view.backgroundColor = [UIColor colorWithHexColorString:@"090017"]; + self.view.backgroundColor = FUColorFromHex(0x090017); [self.view addSubview:self.navigationView]; [self.navigationView mas_makeConstraints:^(MASConstraintMaker *make) { @@ -80,7 +79,7 @@ - (void)configureUI { CGFloat offsetHeight = CGRectGetWidth(self.view.bounds) * 456 / 750; self.collectionView.contentInset = UIEdgeInsetsMake(offsetHeight, 0, 0, 0); - UIImageView *topImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"homeview_background_top.png"]]; + UIImageView *topImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"homepage_background_top"]]; topImageView.frame = CGRectMake(0, -offsetHeight, CGRectGetWidth(self.view.bounds), offsetHeight); [self.collectionView addSubview:topImageView]; } @@ -92,20 +91,20 @@ - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.viewModel.dataSource[section].modules.count; + return [self.viewModel modulesCountOfGroup:section]; } - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { FUHomepageModuleCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUHomepageModuleCellIdentifier forIndexPath:indexPath]; - FUHomepageModule *module = self.viewModel.dataSource[indexPath.section].modules[indexPath.item]; - cell.iconImageView.image = [UIImage imageNamed:module.title]; - cell.titleLabel.text = FUNSLocalizedString(module.title, nil); - cell.bottomImageView.image = module.enable ? [UIImage imageNamed:@"bottomImage"] : [UIImage imageNamed:@"bottomImage_gray"]; - if (module.type == FUModuleTypeQualityTicker) { + cell.iconImageView.image = [self.viewModel moduleIconAtIndex:indexPath.item group:indexPath.section]; + cell.titleLabel.text = [self.viewModel moduleTitleAtIndex:indexPath.item group:indexPath.section]; + cell.bottomImageView.image = + cell.bottomImageView.image = [self.viewModel moduleBottomBackgroundImageAtIndex:indexPath.item group:indexPath.section]; + if ([self.viewModel moduleAtIndex:indexPath.item group:indexPath.section] == FUModuleQualityTicker) { // 精品贴纸特殊效果 cell.backgroundImageView.hidden = NO; cell.animationView.hidden = NO; - cell.backgroundImageView.image = [UIImage imageNamed:@"bg_card_small_elements"]; + cell.backgroundImageView.image = [UIImage imageNamed:@"homepage_cell_background"]; [cell.animationView setAnimationNamed:@"tiezhi_data"]; cell.animationView.loopAnimation = YES; [cell.animationView play]; @@ -119,8 +118,7 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { if ([kind isEqualToString:UICollectionElementKindSectionHeader]){ FUHomepageHeaderView *header = (FUHomepageHeaderView *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kFUHomepageHeaderViewIdentifier forIndexPath:indexPath]; - FUHomepageGroup *group = self.viewModel.dataSource[indexPath.section]; - header.titleLabel.text = FUNSLocalizedString(group.name, nil); + header.titleLabel.text = [self.viewModel groupNameOfGroup:indexPath.section]; return header; } return nil; @@ -128,86 +126,83 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView #pragma mark - Collection view delegate +- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { + return [self.viewModel moduleEnableStatusAtIndex:indexPath.item group:indexPath.section]; +} + - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - FUHomepageModule *module = self.viewModel.dataSource[indexPath.section].modules[indexPath.item]; - if (!module.enable) { - return; - } UIViewController *controller; - switch (module.type) { - case FUModuleTypeBeauty:{ - controller = [[FUBeautyController alloc] init]; + switch ([self.viewModel moduleAtIndex:indexPath.item group:indexPath.section]) { + case FUModuleBeauty:{ + controller = [[FUBeautyViewController alloc] initWithViewModel:[[FUBeautyViewModel alloc] init]]; } break; - case FUModuleTypeMakeup:{ - controller = [[FUMakeupViewController alloc] init]; + case FUModuleMakeup:{ + controller = [[FUMakeupViewController alloc] initWithViewModel:[[FUMakeupViewModel alloc] init]]; } break; - case FUModuleTypeSticker:{ - controller = [[FUStickerViewController alloc] init]; + case FUModuleSticker:{ + controller = [[FUStickerViewController alloc] initWithViewModel:[[FUStickerViewModel alloc] init]]; } break; - case FUModuleTypeAnimoji:{ - controller = [[FUAnimojiController alloc] init]; + case FUModuleAnimoji:{ + controller = [[FUAnimojiViewController alloc] initWithViewModel:[[FUAnimojiViewModel alloc] init]]; } break; - case FUModuleTypeHair:{ - controller = [[FUHairController alloc] init]; + case FUModuleHairBeauty:{ + controller = [[FUHairBeautyViewController alloc] initWithViewModel:[[FUHairBeautyViewModel alloc] init]]; } break; - case FUModuleTypeLightMakeup:{ - controller = [[FULightMakeupController alloc] init]; + case FUModuleLightMakeup:{ + controller = [[FULightMakeupViewController alloc] initWithViewModel:[[FULightMakeupViewModel alloc] init]]; } break; - case FUModuleTypeARMask: { - controller = [[FUARMaskViewController alloc] init]; + case FUModuleARMask: { + controller = [[FUARMaskViewController alloc] initWithViewModel:[[FUARMaskViewModel alloc] init]]; } break; - case FUModuleTypeHilarious: { - controller = [[FUHilariousViewController alloc] init]; + case FUModuleHilarious: { + controller = [[FUHilariousViewController alloc] initWithViewModel:[[FUHilariousViewModel alloc] init]]; } break; - case FUModuleTypePoster:{ - controller = [[FUPosterListViewController alloc] init]; + case FUModuleFaceFusion:{ + controller = [[FUFaceFusionCollectionViewController alloc] init]; } break; - case FUModuleTypeExpressionRecognition: { - controller = [[FUExpressionRecognitionViewController alloc] init]; + case FUModuleExpressionRecognition: { + controller = [[FUExpressionRecognitionViewController alloc] initWithViewModel:[[FUExpressionRecognitionViewModel alloc] init]]; } break; - case FUModuleTypeMusicFilter:{ - controller = [[FUMusicFilterController alloc] init]; + case FUModuleMusicFilter:{ + controller = [[FUMusicFilterViewController alloc] initWithViewModel:[[FUMusicFilterViewModel alloc] init]]; } break; - case FUModuleTypeDistortingMirror:{ - controller = [[FUDistortingMirrorViewController alloc] init]; + case FUModuleDistortingMirror:{ + controller = [[FUDistortingMirrorViewController alloc] initWithViewModel:[[FUDistortingMirrorViewModel alloc] init]]; } break; - case FUModuleTypeBody:{ - controller = [[FUBodyBeautyController alloc] init]; + case FUModuleBodyBeauty:{ + controller = [[FUBodyBeautyViewController alloc] initWithViewModel:[[FUBodyBeautyViewModel alloc] init]]; } break; - case FUModuleTypeWholeAvatar:{ - controller = [[FUBodyAvatarController alloc] init]; + case FUModuleBodyAvatar:{ + controller = [[FUBodyAvatarViewController alloc] initWithViewModel:[[FUBodyAvatarViewModel alloc] init]]; } break; - case FUModuleTypeSegmentation:{ - controller = [[FUBGSegmentationController alloc] init]; + case FUModuleSegmentation:{ + controller = [[FUSegmentationViewController alloc] initWithViewModel:[[FUSegmentationViewModel alloc] init]]; } break; - case FUModuleTypeGestureRecognition:{ - controller = [[FUGestureRecognitionViewController alloc] init]; + case FUModuleGestureRecognition:{ + controller = [[FUGestureRecognitionViewController alloc] initWithViewModel:[[FUGestureRecognitionViewModel alloc] init]]; } break; - case FUModuleTypeGreenScreen:{ - controller = [[FULvMuViewController alloc] init]; + case FUModuleGreenScreen:{ + controller = [[FUGreenScreenViewController alloc] initWithViewModel:[[FUGreenScreenViewModel alloc] init]]; } break; - case FUModuleTypeQualityTicker:{ - controller = [[FUQStickersViewController alloc] init]; - } - break; - default:{ + case FUModuleQualityTicker:{ + controller = [[FUQualityStickerViewController alloc] initWithViewModel:[[FUQualityStickerViewModel alloc] init]]; } break; } @@ -232,8 +227,7 @@ - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollection // 长宽固定比例 CGFloat width = (CGRectGetWidth(self.view.frame) - 72) / 3.0; CGFloat height = width / 101.0 * 122.0; - FUHomepageGroup *group = self.viewModel.dataSource[indexPath.section]; - if (group.type == FUGroupTypeContentService) { + if (indexPath.section == FUGroupContentService) { // 内容服务(精品贴纸)设置全屏宽度,宽度不变 width = CGRectGetWidth(self.view.frame) - 32; } @@ -249,19 +243,19 @@ - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollection - (UIView *)navigationView { if (!_navigationView) { _navigationView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 44)]; - _navigationView.backgroundColor = [UIColor colorWithHexColorString:@"030010"]; + _navigationView.backgroundColor = FUColorFromHex(0x030010); UILabel *titleLabel = [[UILabel alloc] init]; - titleLabel.text = FUNSLocalizedString(@"FU Live Demo 特效版", nil); + titleLabel.text = FULocalizedString(@"FU Live Demo 特效版"); titleLabel.font = [UIFont boldSystemFontOfSize:17]; titleLabel.textColor = [UIColor whiteColor]; [_navigationView addSubview:titleLabel]; [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(_navigationView); }]; - + UIView *line = [[UIView alloc] init]; - line.backgroundColor = [UIColor colorWithHexColorString:@"302D33"]; + line.backgroundColor = FUColorFromHex(0x302D33); [_navigationView addSubview:line]; [line mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.bottom.equalTo(_navigationView); @@ -275,7 +269,7 @@ - (UICollectionView *)collectionView { if (!_collectionView) { UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - _collectionView.backgroundColor = [UIColor colorWithHexColorString:@"090017"]; + _collectionView.backgroundColor = FUColorFromHex(0x090017); _collectionView.dataSource = self; _collectionView.delegate = self; [_collectionView registerClass:[FUHomepageModuleCell class] forCellWithReuseIdentifier:kFUHomepageModuleCellIdentifier]; @@ -291,6 +285,8 @@ - (FUHomepageViewModel *)viewModel { return _viewModel; } +#pragma mark - Overriding + - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } diff --git a/FULiveDemo/Homepage/ViewController/FUNavigationController.h b/FULiveDemo/Homepage/ViewController/FUNavigationController.h new file mode 100644 index 00000000..fa801d92 --- /dev/null +++ b/FULiveDemo/Homepage/ViewController/FUNavigationController.h @@ -0,0 +1,16 @@ +// +// FUNavigationController.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/22. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUNavigationController : UINavigationController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Homepage/ViewController/FUNavigationController.m b/FULiveDemo/Homepage/ViewController/FUNavigationController.m new file mode 100644 index 00000000..0b301486 --- /dev/null +++ b/FULiveDemo/Homepage/ViewController/FUNavigationController.m @@ -0,0 +1,33 @@ +// +// FUNavigationController.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/22. +// + +#import "FUNavigationController.h" + +@interface FUNavigationController () + +@end + +@implementation FUNavigationController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 隐藏NavigationBar + self.navigationBarHidden = YES; +} + +#pragma mark - Overriding + +- (UIViewController *)childViewControllerForStatusBarHidden { + return self.topViewController; +} + +- (UIViewController *)childViewControllerForStatusBarStyle { + return self.topViewController; +} + +@end diff --git a/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.h b/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.h index 38678ccc..e91c66d9 100644 --- a/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.h +++ b/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.h @@ -8,13 +8,27 @@ #import -#import "FUHomepageModel.h" +@class FUHomepageGroup; NS_ASSUME_NONNULL_BEGIN @interface FUHomepageViewModel : NSObject -@property (nonatomic, copy) NSArray *dataSource; +@property (nonatomic, copy, readonly) NSArray *dataSource; + +- (NSString *)groupNameOfGroup:(NSUInteger)group; + +- (NSUInteger)modulesCountOfGroup:(NSUInteger)group; + +- (FUModule)moduleAtIndex:(NSUInteger)index group:(NSUInteger)group; + +- (UIImage *)moduleIconAtIndex:(NSUInteger)index group:(NSUInteger)group; + +- (NSString *)moduleTitleAtIndex:(NSUInteger)index group:(NSUInteger)group; + +- (UIImage *)moduleBottomBackgroundImageAtIndex:(NSUInteger)index group:(NSUInteger)group; + +- (BOOL)moduleEnableStatusAtIndex:(NSUInteger)index group:(NSUInteger)group; @end diff --git a/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.m b/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.m index b211920f..1ff8c717 100644 --- a/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.m +++ b/FULiveDemo/Homepage/ViewModel/FUHomepageViewModel.m @@ -7,6 +7,13 @@ // #import "FUHomepageViewModel.h" +#import "FUHomepageModel.h" + +@interface FUHomepageViewModel () + +@property (nonatomic, copy) NSArray *dataSource; + +@end @implementation FUHomepageViewModel @@ -26,6 +33,38 @@ - (instancetype)init { return self; } +- (NSString *)groupNameOfGroup:(NSUInteger)group { + return FULocalizedString(self.dataSource[group].name); +} + +- (NSUInteger)modulesCountOfGroup:(NSUInteger)group { + return self.dataSource[group].modules.count; +} + +- (FUModule)moduleAtIndex:(NSUInteger)index group:(NSUInteger)group { + return self.dataSource[group].modules[index].module; +} + +- (UIImage *)moduleIconAtIndex:(NSUInteger)index group:(NSUInteger)group { + FUHomepageModule *module = self.dataSource[group].modules[index]; + return [UIImage imageNamed:module.title]; +} + +- (NSString *)moduleTitleAtIndex:(NSUInteger)index group:(NSUInteger)group { + FUHomepageModule *module = self.dataSource[group].modules[index]; + return FULocalizedString(module.title); +} + +- (UIImage *)moduleBottomBackgroundImageAtIndex:(NSUInteger)index group:(NSUInteger)group { + FUHomepageModule *module = self.dataSource[group].modules[index]; + return module.enable ? [UIImage imageNamed:@"homepage_cell_bottom_image"] : [UIImage imageNamed:@"homepage_cell_bottom_image_gray"]; +} + +- (BOOL)moduleEnableStatusAtIndex:(NSUInteger)index group:(NSUInteger)group { + FUHomepageModule *module = self.dataSource[group].modules[index]; + return module.enable; +} + - (NSArray *)dataSource { if (!_dataSource) { NSString *path = [[NSBundle mainBundle] pathForResource:@"homepage_data_source" ofType:@"json"]; diff --git a/FULiveDemo/Lib/FURenderKit.framework/FURenderKit b/FULiveDemo/Lib/FURenderKit.framework/FURenderKit deleted file mode 100755 index 9c35d813..00000000 Binary files a/FULiveDemo/Lib/FURenderKit.framework/FURenderKit and /dev/null differ diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeauty.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeauty.h deleted file mode 100644 index 06602a4c..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUBeauty.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// FUBeautiItem.h -// FURenderKit -// -// Created by Chen on 2021/1/4. -// - -#import "FUItem.h" -#import "FUFilterDefineKey.h" -#import "FUBeautyPropertyModeDefine.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBeauty : FUItem - -@property (nonatomic, assign) BOOL blurUseMask;//blur是否使用mask -@property (nonatomic, assign) int heavyBlur;//朦胧磨皮开关,0为清晰磨皮,1为朦胧磨皮 -@property (nonatomic, assign) int blurType;//此参数优先级比heavyBlur低,在使用时要将heavy_blur设为0,0清晰磨皮 1朦胧磨皮 2精细磨皮 3均匀磨皮 - -/// 将参数恢复到默认值 -- (void)resetToDefault; - -@end - - -@interface FUBeauty (Skin) -@property (nonatomic, assign) int skinDetect;//肤色检测开关,0为关,1为开 默认值0.0 -@property (nonatomic, assign) int nonskinBlurScale;//肤色检测之后非肤色区域的融合程度,取值范围0.0-1.0,默认值0.0 -@property (nonatomic, assign) double blurLevel;//精细磨皮,磨皮程度,取值范围0.0-6.0,默认6.0 -@property (nonatomic, assign) double colorLevel;//美白 取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double redLevel;//红润 取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double sharpen;//锐化 锐化程度,取值范围0.0-1.0,默认0.0 -@property (nonatomic, assign) double eyeBright;//亮眼 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double toothWhiten;//美牙 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double removePouchStrength;//去黑眼圈 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double removeNasolabialFoldsStrength;//去法令纹 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@end - -@interface FUBeauty (Shap) -@property (nonatomic, assign) int faceShape;//变形取值 0:女神变形 1:网红变形 2:自然变形 3:默认变形 4:精细变形 -@property (nonatomic, assign) int changeFrames; //0为关闭 ,大于0开启渐变,值为渐变所需要的帧数 -@property (nonatomic, assign) double faceShapeLevel; //取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值1.0 - -/// 脸型相关属性,程度范围0.0-1.0 默认0.0 -@property (nonatomic, assign) double cheekV;//v脸 -@property (nonatomic, assign) double cheekThinning;//瘦脸 -@property (nonatomic, assign) double cheekLong;//长脸 -@property (nonatomic, assign) double cheekCircle;//圆脸 - -/// 其他普通属性 -@property (nonatomic, assign) double cheekNarrow;//窄脸 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double cheekSmall;//小脸 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double cheekShort;//短脸 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityCheekbones;//瘦颧骨 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityLowerJaw;//瘦下颌骨 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double eyeEnlarging;//大眼 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityChin;//下巴 取值范围 0.0-1.0, 0.5-0是变小,0.5-1是变大,默认值0.5 -@property (nonatomic, assign) double intensityForehead;//额头 取值范围 0.0-1.0, 0.5-0是变小,0.5-1是变大,默认值0.5 -@property (nonatomic, assign) double intensityNose;//瘦鼻 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityMouth;//嘴型 取值范围 0.0-1.0, 0.5-0.0是变大,0.5-1.0是变小,默认值0.5 -@property (nonatomic, assign) double intensityCanthus;//开眼角 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityEyeSpace;//眼距 取值范围 0.0-1.0, 0.5-0.0是变大,0.5-1.0是变小,默认值0.5 -@property (nonatomic, assign) double intensityEyeRotate;//眼睛角度 取值范围 0.0-1.0, 0.5-0.0逆时针旋转,0.5-1.0顺时针旋转,默认值0.5 -@property (nonatomic, assign) double intensityLongNose;//长鼻 取值范围 0.0-1.0, 0.5-0.0是变长,0.5-1.0是变短,默认值0.5 -@property (nonatomic, assign) double intensityPhiltrum;//缩人中 取值范围 0.0-1.0, 0.5-0.0是变短,0.5-1.0是变长,默认值0.5 -@property (nonatomic, assign) double intensitySmile;//微笑嘴角 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityEyeCircle;//圆眼 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 -@property (nonatomic, assign) double intensityBrowHeight;//眉毛上下 取值范围 0.0-1.0, 0.5-0是向上,0.5-1是向下,默认值0.5 -@property (nonatomic, assign) double intensityBrowSpace;//眉间距 取值范围 0.0-1.0, 默认值0.5 - -@end - -@interface FUBeauty (Filter) -@property (nonatomic, strong) FUFilter filterName;//取值为一个字符串,默认值为 “origin” ,origin即为使用原图效果 -@property (nonatomic, assign) double filterLevel; //取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值1.0 - -- (double)filterValueForKey:(NSString *)filterForKey; - -- (NSArray *)allFilterKeys; - -@end - -@interface FUBeauty (Mode) - -/** - * 设置部分美颜属性的mode,不同mode会有主观上会有不同效果 - * 必须在设置美颜各个属性值之前调用该接口 - * key和mode说明 - | key | 属性 | 支持的mode | - | ------------- | -------- | ------------------------------------------------------------ | - | color_level | 美白 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.2.0) | - | remove_pouch_strength | 去黑眼圈 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.2.0,高性能设备推荐) | - | remove_nasolabial_folds_strength | 去法令纹 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.2.0,高性能设备推荐) | - | cheek_narrow | 窄脸 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.0.0) | - | cheek_small | 小脸 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.0.0) | - | eye_enlarging | 大眼 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.0.0),FUBeautyPropertyMode3(v8.2.0,高性能设备推荐) | - | intensity_forehead | 额头 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.0.0) | - | intensity_nose | 瘦鼻 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.0.0) | - | intensity_mouth | 嘴型 | FUBeautyPropertyMode1,FUBeautyPropertyMode2(v8.0.0),FUBeautyPropertyMode3(v8.2.0,高性能设备推荐) | -**/ -- (void)addPropertyMode:(FUBeautyPropertyMode)mode forKey:(FUModeKey)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUComicFilter.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUComicFilter.h deleted file mode 100644 index 014695e4..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUComicFilter.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FUAnimationFIlterItem.h -// FURenderKit -// -// Created by Chen on 2021/1/13. -// - -#import "FUItem.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUComicFilter : FUItem -/** - * 范围 0.0 - 7.0,对应不同的动漫滤镜效果 - */ -@property (nonatomic, assign) double style; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGreenScreen.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGreenScreen.h deleted file mode 100644 index bcec6954..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUGreenScreen.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// FUGreenTent.h -// FURenderKit -// -// Created by Chen on 2021/1/15. -// - -#import "FUItem.h" -#import "FUStruct.h" -NS_ASSUME_NONNULL_BEGIN -@interface FUGreenScreen : FUItem - -@property (nonatomic, strong) UIImage *backgroundImage; // 背景图片 - -@property (nonatomic, strong, nullable) UIImage *safeAreaImage; // 安全区域图片 - -@property (nonatomic, copy, nullable) NSString *videoPath; // 背景视频 - -/** - * 根据传入的图进和点位进行取色,获取到的颜色需要生效直接设置 self.keyColor - */ -+ (UIColor *)pixelColorWithImage:(UIImage *)originImage point:(CGPoint)point; - -/** - * 根据传入的CVPixelBufferRef和点位进行取色 - */ -+ (UIColor *)pixelColorWithPixelBuffer:(CVPixelBufferRef)buffer point:(CGPoint)point; - -/** - * 开始视频播放 - */ -- (void)startVideoDecode; - -/** - * 取消视频播放 - */ -- (void)stopVideoDecode; - - -///** -// * 滑动手势的在View上的点 -// */ -//- (void)handlePanGestureRecognizer:(CGPoint)point; -// -// -///** -// * 捏合手势的scale, 内部处理之后外面调用层需要把捏合手势对象的scale设置1 -// */ -//- (void)handlePinchGesture:(CGFloat)scale; - -@property (nonatomic, assign) FUColor keyColor; //默认值为[0,255,0],取值范围[0-255,0-255,0-255],选取的颜色RGB,默认绿色可根据实际颜色进行调整 -@property (nonatomic, assign) double chromaThres; //默认值为0.518,取值范围0.0-1.0,相似度:色度最大容差,色度最大容差值越大,更多幕景被抠除 -@property (nonatomic, assign) double chromaThrest; //默认值为0.22,取值范围0.0-1.0,平滑度:色度最小限差,值越大,更多幕景被扣除 -@property (nonatomic, assign) double alphal; //默认值为0.0,取值范围0.0-1.0,祛色度:图像前后景祛色度过度,值越大,两者边缘处透明过度更平滑 - -@property (nonatomic, assign) CGPoint center; //包含start_x和start_y -@property (nonatomic, assign) float scale; - -@property (nonatomic, assign) int isBgra; //internal - -//@property (nonatomic, strong) UIImage *bgImage; - -/** - * 当前是否正在进行抠图,抠图就停止绿慕渲染 - */ -@property (nonatomic, assign) BOOL cutouting; - - -@property (nonatomic, assign) BOOL pause; -@end - - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUImageHelper.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUImageHelper.h deleted file mode 100644 index 8d57988b..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUImageHelper.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// FUImageHelper.h -// FULiveDemo -// -// Created by L on 2018/8/3. -// Copyright © 2018年 L. All rights reserved. -// - -#import -#import - -@interface FUImageHelper : NSObject - -+ (void)convertUIImageToBitmapRGBA8:(UIImage *)image completionHandler:(void (^)(int32_t size, unsigned char * bits))completionHandler; - -+ (UIImage *)convertBitmapRGBA8ToUIImage:(unsigned char *)buffer - withWidth:(int)width - withHeight:(int)height; - -/// 根据UIImage返回CVPixelBufferRef -/// @param image UIImage实例对象 -/// 注意:CVPixelBufferRef需要手动release -+ (CVPixelBufferRef)pixelBufferFromImage:(UIImage *)image; - -/// 根据CVPixelBufferRef返回UIImage -/// @param pixelBufferRef buffer -/// 注意:如果后续业务有使用到image.CGImage,则需要及时释放掉 image.CGImage -+ (UIImage *)imageFromPixelBuffer:(CVPixelBufferRef)pixelBufferRef; - -+ (unsigned char *)getRGBAWithImage:(UIImage *)image; - -+ (unsigned char *)getRGBAWithImageName:(NSString *)imageName width:(int *)width height:(int *)height; - -//截屏处理取色 -+ (UIColor*)getPixelColorScreenWindowAtLocation:(CGPoint)point; - -//针对静态图片处理取色 -+ (UIColor *)getPixelColorWithImage:(UIImage *)image point:(CGPoint)point; - -//针对每一帧处理取色 -+ (UIColor *)getPixelColorWithPixelBuff:(CVPixelBufferRef)pixelBuffer point:(CGPoint)point; - -+ (UIImage*)rotateImageWithAngle:(UIImage*)vImg Angle:(NSInteger)vAngle IsExpand:(BOOL)vIsExpand; - -/// 获取视频第一帧图片 -/// @param videoURL 视频URL -+ (UIImage *)getPreviewImageWithVideoURL:(NSURL *)videoURL; - -@end diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h deleted file mode 100644 index e52e9170..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FUMakeup.h +++ /dev/null @@ -1,124 +0,0 @@ -// -// FUMakeup.h -// FURenderKit -// -// Created by Chen on 2021/1/6. -// - -#import "FUItem.h" -#import -#import "FUStruct.h" -#import "FUMakeupValueDefine.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * 美妆 - */ -@interface FUMakeup : FUItem -@property (nonatomic, assign) BOOL isMakeupOn; //美妆开关 -@property (nonatomic, assign) BOOL isClearMakeup;//在解绑妆容时是否清空除口红以外的妆容,0表示不清空,1表示清空,口红可由强度进行设置 -@property (nonatomic, assign) FUMakeupLipType lipType;//口红类型 0雾面 2润泽Ⅰ 3珠光 6高性能(不支持双色)7润泽Ⅱ -@property (nonatomic, assign) BOOL isLipHighlightOn;//是否开启口红高光,1为开 0为关 -@property (nonatomic, assign) BOOL isTwoColor;//口红双色开关,0为关闭,1为开启,如果想使用咬唇,开启双色开关,并且将makeup_lip_color2的值都设置为0 -@property (nonatomic, assign) FUMakeupBrowWarpType browWarpType;//眉毛变形类型 0柳叶眉 1一字眉 2远山眉 3标准眉 4扶形眉 5日常风 6日系风 -@property (nonatomic, assign) BOOL browWarp;//是否使用眉毛变形 ,1为开 0为关 - -@end - -#pragma mark - 主题妆 -/** - * 主题妆 - */ -@interface FUMakeup (Subject) - -/** - * 更新组合装时是否清除子妆 - * needCleanSubItem: YES 清除,NO 不清除 - */ -- (void)updateMakeupPackage:(FUItem * __nullable)makeupPackage needCleanSubItem:(BOOL)needCleanSubItem; - -//修改整体妆容程度值 -@property (nonatomic, assign) double intensity; - -//修改整体妆容滤镜程度值 -@property (nonatomic, assign) double filterIntensity; - -////组合装对象,内部包含当前组合装所有部位子妆 -//@property (nonatomic, strong, nullable) FUItem *makeupPackage; - -//局部妆容对象,属于组合装内部的具体部位(眉毛、眼镜、鼻子等)自定义设置 -@property (nonatomic, strong, nullable) FUItem *subEyebrow; -@property (nonatomic, strong, nullable) FUItem *subEyeshadow; -@property (nonatomic, strong, nullable) FUItem *subPupil; -@property (nonatomic, strong, nullable) FUItem *subEyelash; -@property (nonatomic, strong, nullable) FUItem *subEyeliner; -@property (nonatomic, strong, nullable) FUItem *subBlusher; -@property (nonatomic, strong, nullable) FUItem *subFoundation; -@property (nonatomic, strong, nullable) FUItem *subHighlight; -@property (nonatomic, strong, nullable) FUItem *subShadow; -@property (nonatomic, strong, nullable) FUItem *subLip; -@end - -#pragma mark - 图层混合模式 -@interface FUMakeup (blend) -@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow1; -@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow2; -@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow3; -@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeshadow4; -@property (nonatomic, assign) FUMakeupBlendType blendTypeEyelash; -@property (nonatomic, assign) FUMakeupBlendType blendTypeEyeliner; -@property (nonatomic, assign) FUMakeupBlendType blendTypeBlusher1; -@property (nonatomic, assign) FUMakeupBlendType blendTypeBlusher2; -@property (nonatomic, assign) FUMakeupBlendType blendTypePupil; -@end - -#pragma mark - 子妆 -@interface FUMakeup (intensity) - -@property (nonatomic, assign) double intensityFoundation;//粉底 -@property (nonatomic, assign) double intensityLip;//口红 -@property (nonatomic, assign) double intensityLipHighlight;//口红高光(暂时只用于lipType=FUMakeupLipTypeMoisturizing的情况) -@property (nonatomic, assign) double intensityBlusher;//腮红 -@property (nonatomic, assign) double intensityEyebrow;//眉毛 -@property (nonatomic, assign) double intensityEyeshadow;//眼影 -@property (nonatomic, assign) double intensityEyeliner;//眼线 -@property (nonatomic, assign) double intensityEyelash;//睫毛 -@property (nonatomic, assign) double intensityHighlight;//高光 -@property (nonatomic, assign) double intensityShadow;//阴影 -@property (nonatomic, assign) double intensityPupil;//美瞳 -@end - - -@interface FUMakeup (Color) -@property (nonatomic, assign) FUColor foundationColor;//粉底 -@property (nonatomic, assign) FUColor lipColor;//口红颜色 -@property (nonatomic, assign) FUColor lipColor2;//口红2 -@property (nonatomic, assign) FUColor blusherColor;//腮红 -@property (nonatomic, assign) FUColor eyebrowColor;//眉毛 -@property (nonatomic, assign) FUColor eyelinerColor;//眼线 -@property (nonatomic, assign) FUColor eyelashColor;//睫毛 -@property (nonatomic, assign) FUColor highlightColor;//高光 -@property (nonatomic, assign) FUColor shadowColor;//阴影 -@property (nonatomic, assign) FUColor pupilColor;//美瞳 - -/** - * 眼影特殊处理 - * //如果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; -@end - -@interface FUMakeup (landMark) -@property (nonatomic, assign) int isUserFix; //这个参数控制是否使用修改过得landmark点,如果设为1为使用,0为不使用 -@property (nonatomic, assign) FULandMark fixMakeUpData;//这个参数为一个数组,需要客户端传递一个数组进去,传递的数组的长度为 150*人脸数,也就是将所有的点位信息存储的数组中传递进来。 -@end -NS_ASSUME_NONNULL_END - diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURecordEncoder.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FURecordEncoder.h deleted file mode 100755 index aaad40df..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURecordEncoder.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// FURecordEncoder.h -// FULive -// -// Created by L on 2018/1/15. -// Copyright © 2018年 L. All rights reserved. -// - - -#import -#import - -/** - * 写入并编码视频的的类 - */ -@interface FURecordEncoder : NSObject - -@property (nonatomic, readonly) NSString *path; - -/** - * WCLRecordEncoder遍历构造器的 - * - * @param path 媒体存发路径 - * @param cy 视频分辨率的高 - * @param cx 视频分辨率的宽 - * @param ch 音频通道 - * @param rate 音频的采样比率 - * - * @return WCLRecordEncoder的实体 - */ -+ (FURecordEncoder*)encoderForPath:(NSString*)path Height:(NSInteger)cy width:(NSInteger)cx channels: (int)ch samples:(Float64)rate; - -/** - * 初始化方法 - * - * @param path 媒体存发路径 - * @param cy 视频分辨率的高 - * @param cx 视频分辨率的宽 - * @param ch 音频通道 - * @param rate 音频的采样率 - * - * @return WCLRecordEncoder的实体 - */ -- (instancetype)initPath:(NSString*)path Height:(NSInteger)cy width:(NSInteger)cx channels: (int)ch samples:(Float64)rate; - -/** - * 完成视频录制时调用 - * - * @param handler 完成的回掉block - */ -- (void)finishWithCompletionHandler:(void (^)(NSString *filePath))handler; - -/** - * 通过这个方法写入数据 - * - * @param sampleBuffer 写入的数据 - * @param isVideo 是否写入的是视频 - * - * @return 写入是否成功 - */ -- (BOOL)encodeFrame:(CMSampleBufferRef)sampleBuffer isVideo:(BOOL)isVideo; - -@end diff --git a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderKit.h b/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderKit.h deleted file mode 100644 index 9a9129a5..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/Headers/FURenderKit.h +++ /dev/null @@ -1,298 +0,0 @@ -// -// FURenderKit.h -// FURenderKit -// -// Created by ly-Mac on 2020/12/2. -// - -#import -#import "FUScene.h" -#import "FUAvatarCheck.h" -#import "FUGroupAnimation.h" -#import "FUCaptureCamera.h" -#import "FUInternalCameraSetting.h" -#import "FUGLDisplayView.h" -#import "FUSetupConfig.h" -#import "FURenderIO.h" - -#import "FUBeauty.h" -#import "FUMakeup.h" - -#import "FUStickerContainer.h" -#import "FULightMakeup.h" -#import "FUComicFilter.h" -#import "FUHairBeauty.h" -#import "FUGreenScreen.h" -#import "FUBodyBeauty.h" -#import "FUActionRecognition.h" -#import "FUPoster.h" -#import "FUMusicFilter.h" -#import "FUAnimoji.h" - -#import "FUGesture.h" -#import "FUFaceRectInfo.h" -#import "FUAISegment.h" -#import "UIImage+FURenderKit.h" -#import "FUImageHelper.h" -#import "UIDevice+FURenderKit.h" - -#import "FUAIKit.h" - -NS_ASSUME_NONNULL_BEGIN - -@class FURenderKit; - -// 内部相机render相关协议 -@protocol FURenderKitDelegate -@optional - -// 使用内部相机时,即将处理图像时输入回调 -- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput; - -// 使用内部相机时,处理图像后的输出回调 -- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput; - -// 使用内部相机时,内部是否进行render处理,返回NO,将直接输出原图。 -- (BOOL)renderKitShouldDoRender; - -@end - -@interface FURenderKit : NSObject - -/// 3D场景实例,设置前需要先将 scene 通过 addScene 接口添加到 renderKit -@property (nonatomic, strong, nullable) FUScene *currentScene; - -@property (nonatomic, strong, readonly) NSArray *scenes; - -/** - * 美颜模块 - */ -@property (nonatomic, strong, nullable) FUBeauty *beauty; - -/** - * 美妆模块 - */ -@property (nonatomic, strong, nullable) FUMakeup *makeup; - -/** - * 道具贴纸、AR面具、搞笑大头、哈哈镜、人像分割 等道具的容器对象 - */ -@property (nonatomic, strong, readonly) FUStickerContainer *stickerContainer; - - -/** - * 轻美妆 - */ -@property (nonatomic, strong, nullable) FULightMakeup *lightMakeup; - - -/** - * 动漫滤镜 - */ -@property (nonatomic, strong, nullable) FUComicFilter *comicFilter; - -/** - * 美发 - */ -@property (nonatomic, strong, nullable) FUHairBeauty *hairBeauty; - -/** - * 绿慕 - */ -@property (nonatomic, strong, nullable) FUGreenScreen *greenScreen; - -@property (nonatomic, strong, nullable) FUMusicFilter *musicFilter; -/** - * 美体 - */ -@property (nonatomic, strong, nullable) FUBodyBeauty *bodyBeauty; - -/** - * 动作识别 - */ -@property (nonatomic, strong, nullable) FUActionRecognition *actionRecognition; - -@property (nonatomic, strong, nullable) FUItem *antiAliasing; - - -/// 多重采样等级,默认为0 -@property (nonatomic, assign) int msaaLevel; - - -/// 如果使用 glDisplayView 渲染,需要由用户自己创建并赋值给该属性,当内部或外部调用 renderWithInput 时,会自动显示在该 View 中。 -@property (nonatomic, strong, nullable) FUGLDisplayView *glDisplayView; - - -#pragma mark - 内部相机与回调 -/// internalCameraSetting 有默认值,用户按需修改对应配置即可。 -/// @see FUInternalCameraSetting -@property (nonatomic, strong, readonly) FUInternalCameraSetting *internalCameraSetting; - -/// 暂停内部渲染循环,不会影响外部对renderWithInput的调用。 -@property (nonatomic, assign) BOOL pause; - -/// 内部相机,当 使用内部相机,并且 internalCameraSetting 中 useVirtualCamera == NO 时,才会开启内部真实相机。 -@property (nonatomic, strong, readonly, nullable) FUCaptureCamera *captureCamera; - -/// 内部渲染回调,只有使用内部相机时对应的代理方法才会执行 -/// @see FURenderKitDelegate -@property (nonatomic, weak, nullable) id delegate; - -#pragma mark - setup and destroy - -/// FURenderKit 单例 -+ (instancetype)shareRenderKit; - -/// SDK 初始化 -/// @param setupConfig 初始化配置 -/// @see FUSetupConfig -+ (BOOL)setupWithSetupConfig:(FUSetupConfig *)setupConfig; - -/// setupconfig 里面需要填入offLinePath 离线鉴权包地址 -/// @return 第一次鉴权成功后的文件 -+ (NSData *)setupLocalWithSetupConfig:(FUSetupConfig *)setupConfig; - -/// 内部调用fuSetupInternalCheck 初始化鉴权 -/// @return NO 失败, YES成功 -+ (BOOL)setupInternalCheckWithSetupConfig:(FUSetupConfig *)setupConfig; - -/// 内部调用fuSetupInternalCheckPackageBind 初始化鉴权 -/// @param setupConfig 初始化配置 -/// @return NO 失败, YES成功 -+ (BOOL)setupInternalCheckPackageBindWithSetupConfig:(FUSetupConfig *)setupConfig; - -/// 销毁 FURenderKit,释放内存,同时会清空所有的特效模型。 -+ (void)destroy; - -/// 清空所有的特效模型:美颜、美型、美妆、3D场景与形象等。 -+ (void)clear; - -#pragma mark - version -/// 获取版本信息 -/// @return 版本信息 -+ (NSString *)getVersion; - -/// 设置 log 等级 -/// @param logLevel log 等级 -+ (void)setLogLevel:(FULOGLEVEL)logLevel; - -/// 设置 log 保存路径 -/// @param filePath log 保存路径 -+ (void)setLogFilePath:(NSString *)filePath; - - -#pragma mark - scene -/** - 异步添加场景,添加完成后需要将场景设置为 currentScene 才可以生效 - @param scene 被添加的场景 - @param completion 添加完成的回调 - */ -- (void)addScene:(FUScene *)scene completion:(nullable void(^)(BOOL success))completion; - -/** - 移除场景,如果被移除的场景为当前场景,当前渲染效果也会失效。 - @param scene 需要被移除的场景 - @param completion 移除完成的回调 - */ -- (void)removeScene:(FUScene *)scene completion:(nullable void(^)(BOOL success))completion; - -/** - 替换场景,如果需要让新的场景生效,需要将其设置为 currentScene - @param scene 被替换的场景,为空时直接添加新的场景 - @param newScene 新的场景,为空时直接移除被替换的场景 - @param completion 替换成功的回调 - */ -- (void)replaceScene:(nullable FUScene *)scene withNewScene:(nullable FUScene *)newScene completion:(nullable void(^)(BOOL success))completion; - -#pragma mark - internalCamera - -/// 开启内部相机,相机配置请修改 internalCameraSetting 相关属性 -/// @see FUInternalCameraSetting -- (void)startInternalCamera; - -/// 关闭内部相机 -- (void)stopInternalCamera; - -#pragma mark - Record && capture - -/// 开始录像 -/// @param filePath 录像保存地址 -+ (void)startRecordVideoWithFilePath:(NSString *)filePath; - -/// 结束录像 -/// @param complention 录制结束回调 -+ (void)stopRecordVideoComplention:(void(^)(NSString *filePath))complention; - -/// 获取单帧图像 -+ (UIImage *)captureImage; - -#pragma mark - renderWithInput -/** - 核心渲染接口,当贴纸、美颜、美型、美妆、3D场景与形象配置到 RenderKit之后,调用该接口会把效果作用于输出的结果中。 - 支持输入单纹理、纹理+imageBuffer、纹理+pixelBuffer、单imageBuffer、单pixelBuffer; - 输出与输入相对应,也可以支持只输出纹理、或渲染到当前FBO。 - @param input 输入图像,类型为 FURenderInput - @return 输出图像结果,类型为 FURenderOutput - */ -- (FURenderOutput *)renderWithInput:(FURenderInput *)input; - -#pragma mark - Other API - -/// 获取证书里面的模块权限 -/// @return code get i-th code, currently available for 0 and 1 -+ (int)getModuleCode:(int)code; - -/// 获取错误码 -/// @return 错误码 -+ (int)getSystemError; - -/// 获取错误信息 -/// @return 错误信息 -+(NSString *)getSystemErrorString; - -+ (int)profileGetNumTimers; - -+ (long long)profileGetTimerAverage:(int)index; - -/// 设置缓存目录,提升加载模型速度 -/// @param directory 可读写目录路径 -+ (void)setCacheDirectory:(NSString *)directory; - -/// 设备性能分级 -+ (FUDevicePerformanceLevel)devicePerformanceLevel; - - -#pragma mark - frame time profile -/** - * 开启/关闭算法耗时统计功能 - * 默认关闭 - */ -+ (void)setFrameTimeProfileEnable:(BOOL)enable; - -/** - * 设置算法耗时输出到控制台 - */ -+ (void)setFrameTimeProfileAutoReportToConsole; - -/** - * 设置算法耗时输出到文件 - * filePath 文件路径 - */ -+ (void)setFrameTimeProfileAutoReportToFile:(NSString *_Nonnull)filePath; - -/** - * 设置算法耗时打印间隔 - * interval 默认300 - */ -+ (void)setFrameTimeProfileReportInterval:(int)interval; - -/** - * 开启/关闭算法耗时统计详细信息 - * 默认关闭 - */ -+ (void)setFrameTimeProfileReportDetailsEnable:(BOOL)enable; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/FULiveDemo/Lib/FURenderKit.framework/Info.plist b/FULiveDemo/Lib/FURenderKit.framework/Info.plist deleted file mode 100644 index 9aae8e19..00000000 Binary files a/FULiveDemo/Lib/FURenderKit.framework/Info.plist and /dev/null differ diff --git a/FULiveDemo/Lib/FURenderKit.framework/_CodeSignature/CodeResources b/FULiveDemo/Lib/FURenderKit.framework/_CodeSignature/CodeResources deleted file mode 100644 index 11a3a920..00000000 --- a/FULiveDemo/Lib/FURenderKit.framework/_CodeSignature/CodeResources +++ /dev/null @@ -1,1186 +0,0 @@ - - - - - files - - .DS_Store - - VRY8RsuvbNTNncrcK7U5EE+u/2Y= - - FURenderKit快速集成文档.md - - 8dHMUJm+KaN09cUbANkMVijG3IE= - - Headers/CNamaSDK.h - - TsuVqTFNX+Ce5ZV7TaVuV0IwVXk= - - Headers/FUAIConfig.h - - hOtKXkMqlBnCGFFoMp7FotV/+w4= - - Headers/FUAIKit.h - - +umrX2Ocsyy/rlzlcVq1igY0Sc0= - - Headers/FUAISegment.h - - ywUYvAU97gMD59xjACHzXaIa8PM= - - Headers/FUActionRecognition.h - - vwqHNjWWk/fiLBPznWlk2dLor1k= - - Headers/FUAnimation.h - - 2+icEiasf7ZNtIfxIaPKJQDTeXw= - - Headers/FUAnimoji.h - - LbYRUX/N3Mr5kd4U/Plt9nAu8m8= - - Headers/FUAvatar.h - - 5KUCYHnBWWwuSTEoa0KOd7bcFK4= - - Headers/FUAvatarCheck.h - - n0i7LzzdPj3BJp4km4QjQvZ9ZX8= - - Headers/FUAvatarColorKeys.h - - b+Xo3RmXjn4Qkz2ltu5F35qM9V0= - - Headers/FUAvatarMakeup.h - - Tu2/+wH1UWwz92jl/wx9wSco2vA= - - Headers/FUBackground.h - - A8X4vM2umtY6vFOsLKg8RcGILGs= - - Headers/FUBeauty-Deprecated.h - - p0nkR/gG30IT1HiYyY2JmLFQMic= - - Headers/FUBeauty.h - - iIT0E0Fdhqf9sfgE0RnFQhV9+f4= - - Headers/FUBeautyPropertyModeDefine.h - - gai4mwMYjwhSPAmJ1B2AzMiN/Q8= - - Headers/FUBodyBeauty.h - - SL2Lobycp5+yA8KHu3mAQ0B/QxI= - - Headers/FUBodyBeautyDefineKeys.h - - FqX/+fwUASzWM+DCjpN1idu1VXA= - - Headers/FUCLIColor.h - - SJlCgh9tBH6KeSY3iZfFTKl2abE= - - Headers/FUCameraAnimation.h - - NZd2H1E/rBwOjlF5ytK1h6edLw0= - - Headers/FUCaptureCamera.h - - uz7JaXbIDpj7iddg/uTbl/qk+U4= - - Headers/FUComicFilter.h - - inOCD7NZtHk1dDcZn4sPsSkDqUo= - - Headers/FUConfig.h - - X3UHPao8rifzaZeZUicDKFdrzZY= - - Headers/FUCustomBackground.h - - qFi2UIoCkQ/NeQJhMgoMzUVi09k= - - Headers/FUDeformationKeys.h - - 4wm8PgTl24Tk7mTgxQvf+J5dSsA= - - Headers/FUEnum.h - - gg8gelaGMsNoRk3RjQyHY0A3gRw= - - Headers/FUFaceRectInfo.h - - fzGREC5opsawx4Z/0GsNkKh81h0= - - Headers/FUFacepupKeys.h - - 8mU/YdicdsQ2ncpl5p/D+yfyV98= - - Headers/FUFacialFeatures.h - - K9ncKRjnaXJTryrLuxPwTOBEh2M= - - Headers/FUFilterDefineKey.h - - SSlLpo2+pGqZDH5qPNIj5aNQ12s= - - Headers/FUGLContext.h - - 0D2Gx8rhv2W5pXz1/lHEwKRat9s= - - Headers/FUGLDisplayView.h - - hMLiiDDcFj69lXVK2caK+FYXBI8= - - Headers/FUGesture.h - - qnkbAt+7aolYOH7L2k4eou2zGH4= - - Headers/FUGreenScreen.h - - xLZsQyUJFcXUINgTKo7Bc4B6scA= - - Headers/FUGroupAnimation.h - - Ldxt4/j6KHLx20BBwT+PwnYbOTQ= - - Headers/FUHairBeauty.h - - vapPwyaBForn12ch7oCoQGqlZeU= - - Headers/FUHairDefineKey.h - - cdmQsnuc8TnRfnZFvbx82foJsVI= - - Headers/FUImageHelper.h - - nKnNPNgd/1Y/l/AIsZbPoELuvAM= - - Headers/FUInternalCameraSetting.h - - aHTu3/17LGJy4eH9VD8E45epjFg= - - Headers/FUItem+createTexture.h - - XiPp70neOLdBggAvGXXmmCefMSQ= - - Headers/FUItem.h - - 664HugIPFapGnQf7NpjsyySWMYw= - - Headers/FUKeysDefine.h - - DcdVX2V8D+I8OoPv+onJOlZiBUg= - - Headers/FULight.h - - UZd6WCVShCf4b7UpTaf4T1r1svw= - - Headers/FULightMakeUpTextureKeyDefineKey.h - - ZtivlKg86r9Wpqn8zgN7Tln71DU= - - Headers/FULightMakeup.h - - WzOcnbZTellbjqjsiRBeih+xlV8= - - Headers/FUMakeUpChildStrengthDefineKey.h - - UJVwvL8zTFA7ReNVjZMRmqBPiz0= - - Headers/FUMakeUpColorsKey.h - - Dg/1bmso04/XW5tj3NJGQW63K+s= - - Headers/FUMakeUpTextureKey.h - - Sr/TokzpOh0qUPKZJ0Tl8elKXrk= - - Headers/FUMakeup.h - - 4Rh8O2WkxTFOjRSzNhOxVYEbf2c= - - Headers/FUMakeupValueDefine.h - - EJjfVuUZwQ5HCqfCyLMGJx7veF4= - - Headers/FUMusicFilter.h - - lwxjIMr3TUkDhpt5Jlp8ZO/Y5P8= - - Headers/FUNormalConfig.h - - /QQ2SkfE1Jfim2iiIvIQOzXoM/0= - - Headers/FUOvonicMap.h - - vEFl1P5iA7r1R9AcegQpLGuR9b8= - - Headers/FUParam.h - - rTBUvYn8Q8RHwSRn52SEEGR+c5s= - - Headers/FUPoster.h - - VdBvfouB/89ryacywEnarZA6aLE= - - Headers/FUQualitySticker.h - - y0cEK3hmQOnDN+2MpQNw08cCdjA= - - Headers/FURecordEncoder.h - - Lh8A0XuTz9m6VrAajPsPN8mKUJs= - - Headers/FURenderIO.h - - D3gW0h3REmwvadsyoovqVm4jvXA= - - Headers/FURenderKit-umbrella.h - - sHn14uVPGqvwXqgRbWiPXNAezts= - - Headers/FURenderKit.h - - TyFS5QZJ7yS2Su29jPku8sr1T0Y= - - Headers/FURenderableObject.h - - zPxhkjgRsKhISUEapQO2VJkab3w= - - Headers/FURenderer.h - - v5NR6Ncc+xQW03MP3wA+4OTm0LU= - - Headers/FUScene.h - - NEH3AMQ+J/ZukQcrhFHmt/6uGUo= - - Headers/FUSceneCamera.h - - K4kP9VbdlxxAsnVHVlLTh9uEVTY= - - Headers/FUSetupConfig.h - - jyX2F4+RonMz7mIh5uQ3xTjtg6Q= - - Headers/FUSticker.h - - Et8iufq9X3GX08u+NmsyCdciKr8= - - Headers/FUStickerContainer.h - - WDQIYfo2Zh/l6N/GCLNl5Z6cogM= - - Headers/FUStruct.h - - zIm9Oo/VhEv2l5bLXhKk710V48A= - - Headers/UIDevice+FURenderKit.h - - CtuwsWyQRXu6LcmVdnNP/ttZroc= - - Headers/UIImage+FURenderKit.h - - 07QhZFpttc9c0uJW2pYade2hYj0= - - Headers/metamacros.h - - 9BPZRo8UfHMJeSgOGLktJkvlRe0= - - Info.plist - - zCyRK2rSR3etPdr1fzVnU4X6kCY= - - Modules/module.modulemap - - QwpXYLIfGBdchGR8ZTh78o/lrpM= - - - files2 - - FURenderKit快速集成文档.md - - hash - - 8dHMUJm+KaN09cUbANkMVijG3IE= - - hash2 - - uP5e1XlN0hR7PtMLcupfbV0AHmLvkAeXwYu8IWC3MBY= - - - Headers/CNamaSDK.h - - hash - - TsuVqTFNX+Ce5ZV7TaVuV0IwVXk= - - hash2 - - +ma2Uf8ZjVwO5kU8kDZcKRfyKqwG41GBFvBhLbpE/2Q= - - - Headers/FUAIConfig.h - - hash - - hOtKXkMqlBnCGFFoMp7FotV/+w4= - - hash2 - - qjOdnP2Qc6l+7qDRxmsTD+atJe5UM05RpEgH3VZYJ20= - - - Headers/FUAIKit.h - - hash - - +umrX2Ocsyy/rlzlcVq1igY0Sc0= - - hash2 - - AgGI8sZwfOywh1SFJrCq8zttB0yIXeOVkjpzYYB7SpY= - - - Headers/FUAISegment.h - - hash - - ywUYvAU97gMD59xjACHzXaIa8PM= - - hash2 - - GrOIfBf5/EKKtJANo7C0+3ff5nrYB1Hpj6lEHYU3o/I= - - - Headers/FUActionRecognition.h - - hash - - vwqHNjWWk/fiLBPznWlk2dLor1k= - - hash2 - - D9aeamKzujONymxZ7r9s/yhlGFn2RZRejCjfvrC03go= - - - Headers/FUAnimation.h - - hash - - 2+icEiasf7ZNtIfxIaPKJQDTeXw= - - hash2 - - DjMY790UkdzvGcV0l4k6fK6CAwjq984ujOoWRC6Vp/U= - - - Headers/FUAnimoji.h - - hash - - LbYRUX/N3Mr5kd4U/Plt9nAu8m8= - - hash2 - - knSOb8Ty99xasV++IdJqjSEf7IjUR4aG2cdAyL5C+tk= - - - Headers/FUAvatar.h - - hash - - 5KUCYHnBWWwuSTEoa0KOd7bcFK4= - - hash2 - - hRrcQLqQWQRKFDyEJEyi7jrO5j/+HTJH/OUqq5VNG3U= - - - Headers/FUAvatarCheck.h - - hash - - n0i7LzzdPj3BJp4km4QjQvZ9ZX8= - - hash2 - - LVLQi4e10+rVwhQ2NyImh9AhQDrqx3u3h7VQY2eewfw= - - - Headers/FUAvatarColorKeys.h - - hash - - b+Xo3RmXjn4Qkz2ltu5F35qM9V0= - - hash2 - - +thcYP+HcvQc5eEFKtWxWgg0moL9gN+s0xJtvB0Fh6E= - - - Headers/FUAvatarMakeup.h - - hash - - Tu2/+wH1UWwz92jl/wx9wSco2vA= - - hash2 - - LW61YEAvxFMDPlJ08+NsXqekugpwTi12higo8RNhiwo= - - - Headers/FUBackground.h - - hash - - A8X4vM2umtY6vFOsLKg8RcGILGs= - - hash2 - - RxqY/FOC9zGkdDxfsONjansxWWw1TLXVXmbpq5DuTVE= - - - Headers/FUBeauty-Deprecated.h - - hash - - p0nkR/gG30IT1HiYyY2JmLFQMic= - - hash2 - - RsmbrfRfF/TLz+022WcCtMAg0RVlGaRj1CH7Nsdg8Lg= - - - Headers/FUBeauty.h - - hash - - iIT0E0Fdhqf9sfgE0RnFQhV9+f4= - - hash2 - - 0On/CJ+i0zvzxF5BFWS97FkvBzhgdm0JMh2XHMPl2mU= - - - Headers/FUBeautyPropertyModeDefine.h - - hash - - gai4mwMYjwhSPAmJ1B2AzMiN/Q8= - - hash2 - - yeIyIeMlJ8x+4yqD9/knzK4D5BZ3+hssZvI9Ct9HTco= - - - Headers/FUBodyBeauty.h - - hash - - SL2Lobycp5+yA8KHu3mAQ0B/QxI= - - hash2 - - fauGjtpbU9MI3aULRSo6uwkuC5dJhtdSrMAPyfi3tJw= - - - Headers/FUBodyBeautyDefineKeys.h - - hash - - FqX/+fwUASzWM+DCjpN1idu1VXA= - - hash2 - - NxrMNd7Bt9DV0UnzEqKYb4zC8Gc+DkChU9muhfgMoyI= - - - Headers/FUCLIColor.h - - hash - - SJlCgh9tBH6KeSY3iZfFTKl2abE= - - hash2 - - Bpv2l6chuqekxY/VEJc8cESjSSiuC55PdD95gQG07QE= - - - Headers/FUCameraAnimation.h - - hash - - NZd2H1E/rBwOjlF5ytK1h6edLw0= - - hash2 - - f4Dh859sSbsU+r87rj4KW2zH2iU0fjnOt7QZvchuvt0= - - - Headers/FUCaptureCamera.h - - hash - - uz7JaXbIDpj7iddg/uTbl/qk+U4= - - hash2 - - q+NFcYkvBG00BoLA5wVHvAzO2uo2RMCXXd/XtIiVIzA= - - - Headers/FUComicFilter.h - - hash - - inOCD7NZtHk1dDcZn4sPsSkDqUo= - - hash2 - - 0bCFibWmNtLz6YeWRKoA5FfVh8slOv+FYpWoR5jj8pw= - - - Headers/FUConfig.h - - hash - - X3UHPao8rifzaZeZUicDKFdrzZY= - - hash2 - - 5LPKQtG7l3qc+RjzDhuF23SBqeeZJY+CFJTwzWE+G+w= - - - Headers/FUCustomBackground.h - - hash - - qFi2UIoCkQ/NeQJhMgoMzUVi09k= - - hash2 - - 7Be/KlRDfKfkF4fKBEvvsDO0VQQMnT+9vLyQ6qdlL4s= - - - Headers/FUDeformationKeys.h - - hash - - 4wm8PgTl24Tk7mTgxQvf+J5dSsA= - - hash2 - - pYs5ZI2A97+T0CVicUPNT43i19wbjCd28UboSVJ7f+4= - - - Headers/FUEnum.h - - hash - - gg8gelaGMsNoRk3RjQyHY0A3gRw= - - hash2 - - YaBIww8AjjETVytKQ5pv24FfLuX89zjTFyhH0LgEVxc= - - - Headers/FUFaceRectInfo.h - - hash - - fzGREC5opsawx4Z/0GsNkKh81h0= - - hash2 - - jvToQ1brYq8FJClXFnpky5nVKyGNBLsip19gwm/JF8w= - - - Headers/FUFacepupKeys.h - - hash - - 8mU/YdicdsQ2ncpl5p/D+yfyV98= - - hash2 - - BG5Kkm4om0vJLIs5RYR8blp6Ln7d96+F327DdUqKoP8= - - - Headers/FUFacialFeatures.h - - hash - - K9ncKRjnaXJTryrLuxPwTOBEh2M= - - hash2 - - HtiWxPyHzVzhSvp6WiSlcROkOd9ZnPFvgqIJopj/1pY= - - - Headers/FUFilterDefineKey.h - - hash - - SSlLpo2+pGqZDH5qPNIj5aNQ12s= - - hash2 - - VkArhkYfI16KsQgMU4auOSRDplR8akDIZR6wrnVvreM= - - - Headers/FUGLContext.h - - hash - - 0D2Gx8rhv2W5pXz1/lHEwKRat9s= - - hash2 - - rMsywYqChrTE4u2PGWVrTPQT8FGChPMuQIB9Yx8xnxQ= - - - Headers/FUGLDisplayView.h - - hash - - hMLiiDDcFj69lXVK2caK+FYXBI8= - - hash2 - - fpiiCxWZ8bXvgtfJFadVOtswfreiJDXXbrNI/GRawHY= - - - Headers/FUGesture.h - - hash - - qnkbAt+7aolYOH7L2k4eou2zGH4= - - hash2 - - Dedi/eagfZpEp/k7P7kztPxEN8vEjudBz1vn/ziI4LU= - - - Headers/FUGreenScreen.h - - hash - - xLZsQyUJFcXUINgTKo7Bc4B6scA= - - hash2 - - CIfSehf+MkfQroeIAF3mPdvhsu7FSo/Me6qqD7UkVR0= - - - Headers/FUGroupAnimation.h - - hash - - Ldxt4/j6KHLx20BBwT+PwnYbOTQ= - - hash2 - - 16zeyxXCn6cxm/gHLrwDlHt+XbNwwI+LYIqosWWboi4= - - - Headers/FUHairBeauty.h - - hash - - vapPwyaBForn12ch7oCoQGqlZeU= - - hash2 - - QmlrKBsIPwyrw4IZChu3UirAMqzcSU0/7WCJE11onUg= - - - Headers/FUHairDefineKey.h - - hash - - cdmQsnuc8TnRfnZFvbx82foJsVI= - - hash2 - - QMBcCFLRR/i/Ffu99UcDp3/u9N16a/voLM1mZ7tW0cQ= - - - Headers/FUImageHelper.h - - hash - - nKnNPNgd/1Y/l/AIsZbPoELuvAM= - - hash2 - - 7p8xejTUTiHp0vXRPlb0beWdzET0XCFpQYUmCTWhOYM= - - - Headers/FUInternalCameraSetting.h - - hash - - aHTu3/17LGJy4eH9VD8E45epjFg= - - hash2 - - wIehEeDyVChrjExtZ33jSEYfhG7CYcaFAAS/KuTxQys= - - - Headers/FUItem+createTexture.h - - hash - - XiPp70neOLdBggAvGXXmmCefMSQ= - - hash2 - - KM/seXF76a6nTE/2u1yh2dnEQFv58hkXj1xRQ1wqrQI= - - - Headers/FUItem.h - - hash - - 664HugIPFapGnQf7NpjsyySWMYw= - - hash2 - - vKDlBUzTA69T1NqLrv59297Xx2nlW60Tuxof1zSdMDs= - - - Headers/FUKeysDefine.h - - hash - - DcdVX2V8D+I8OoPv+onJOlZiBUg= - - hash2 - - wPho9UQrC19YlMdW/B6CkzfvAKW7NfqabszQ+jeMicU= - - - Headers/FULight.h - - hash - - UZd6WCVShCf4b7UpTaf4T1r1svw= - - hash2 - - WoIyj2HIAu/066AXIpkjdgpiPpwy7lKqZGk+4yIRAug= - - - Headers/FULightMakeUpTextureKeyDefineKey.h - - hash - - ZtivlKg86r9Wpqn8zgN7Tln71DU= - - hash2 - - e/OejfjpViM76wDv6ATYbDHufdQH4Yph/IuRsrCkDgE= - - - Headers/FULightMakeup.h - - hash - - WzOcnbZTellbjqjsiRBeih+xlV8= - - hash2 - - i99F6b6YKe8ssRzn/xDE3jgi8F9099dLeKQC+Ezcr3w= - - - Headers/FUMakeUpChildStrengthDefineKey.h - - hash - - UJVwvL8zTFA7ReNVjZMRmqBPiz0= - - hash2 - - U1FOYifvodgA61mFkVjxumuJ33yNWrh/wVo++UgUXOA= - - - Headers/FUMakeUpColorsKey.h - - hash - - Dg/1bmso04/XW5tj3NJGQW63K+s= - - hash2 - - Cpn+kZGUKFaoaHl0iAeVe1lPK4B09fgJM5NLcIu8I8s= - - - Headers/FUMakeUpTextureKey.h - - hash - - Sr/TokzpOh0qUPKZJ0Tl8elKXrk= - - hash2 - - ZCeBPCdwqLKQRd6xC6sRi/s/KiBhbs85KecV1uYppWo= - - - Headers/FUMakeup.h - - hash - - 4Rh8O2WkxTFOjRSzNhOxVYEbf2c= - - hash2 - - S9X0ZSB425tFqPk74dQQRWwUTaOULEztoII/lSdJgmg= - - - Headers/FUMakeupValueDefine.h - - hash - - EJjfVuUZwQ5HCqfCyLMGJx7veF4= - - hash2 - - NoUyqGjNI+LaZD9wGvNDy2MLn97AjxGXiRK2vf/UUgY= - - - Headers/FUMusicFilter.h - - hash - - lwxjIMr3TUkDhpt5Jlp8ZO/Y5P8= - - hash2 - - cgJ9IgBnVFpriQSu9deh8KmDKdFikh4LssgNoNm3sSw= - - - Headers/FUNormalConfig.h - - hash - - /QQ2SkfE1Jfim2iiIvIQOzXoM/0= - - hash2 - - knzcwbFeAbu/XeVmmVn4QbZ5F90uSKdx9Ol059K//6Q= - - - Headers/FUOvonicMap.h - - hash - - vEFl1P5iA7r1R9AcegQpLGuR9b8= - - hash2 - - tKad2/pSvuTSiepKwUh7F/9/dYt+gSgn+u2THQIpj5U= - - - Headers/FUParam.h - - hash - - rTBUvYn8Q8RHwSRn52SEEGR+c5s= - - hash2 - - J7bqk/6BkXvR7GdWOg577xfW+NuT8G5FHlmKr1yy4XE= - - - Headers/FUPoster.h - - hash - - VdBvfouB/89ryacywEnarZA6aLE= - - hash2 - - nsySbPQFXS8ePo0mek9SapDY9R+JGkZX11iTpJFitUQ= - - - Headers/FUQualitySticker.h - - hash - - y0cEK3hmQOnDN+2MpQNw08cCdjA= - - hash2 - - gLNR284AYB9R2aAED5giEeoQ9b3DxsMNHhNuOLfCMsg= - - - Headers/FURecordEncoder.h - - hash - - Lh8A0XuTz9m6VrAajPsPN8mKUJs= - - hash2 - - zzax1WKjJpt5zSEmI2Nkv3pW4ZEB69jP+rjT2axs7A0= - - - Headers/FURenderIO.h - - hash - - D3gW0h3REmwvadsyoovqVm4jvXA= - - hash2 - - YAVmPEUS5S5gtA8pssysxQTe82T6GDcXSjkeyVCFeAQ= - - - Headers/FURenderKit-umbrella.h - - hash - - sHn14uVPGqvwXqgRbWiPXNAezts= - - hash2 - - /r+f2yjCCrMnYnKobRW5NKmqiccyy4M3yO8qqhGHgNg= - - - Headers/FURenderKit.h - - hash - - TyFS5QZJ7yS2Su29jPku8sr1T0Y= - - hash2 - - hSM/P0dj0vHp9yVCYGRj8PF9RFhXsq3DOnkrA1DXZSU= - - - Headers/FURenderableObject.h - - hash - - zPxhkjgRsKhISUEapQO2VJkab3w= - - hash2 - - 3fQhIsUUBMc7pbz5cgnJcq7lbrYGfBMt27VZ4iP7dw8= - - - Headers/FURenderer.h - - hash - - v5NR6Ncc+xQW03MP3wA+4OTm0LU= - - hash2 - - LxIoTdskBd23VYtRlZb5d7ty1lnJHhlfXqZHUhNrDZo= - - - Headers/FUScene.h - - hash - - NEH3AMQ+J/ZukQcrhFHmt/6uGUo= - - hash2 - - 8p5wZ/4lZaUJP/jSWzWVBCHHqVXmNhEoUFBrfyQgO+U= - - - Headers/FUSceneCamera.h - - hash - - K4kP9VbdlxxAsnVHVlLTh9uEVTY= - - hash2 - - tnKTMyZUmBvRG8j/rLlLJUL+B5qJdJ2+HHLOiPYJDmA= - - - Headers/FUSetupConfig.h - - hash - - jyX2F4+RonMz7mIh5uQ3xTjtg6Q= - - hash2 - - XHlHBZuTUMjSfJge8rIMBHkcDaTASeJEFR3MV6QQ+90= - - - Headers/FUSticker.h - - hash - - Et8iufq9X3GX08u+NmsyCdciKr8= - - hash2 - - XZjFW3JllnBKpVkIzx+Wvu2jP/VfTYn4PrX23cgI8vg= - - - Headers/FUStickerContainer.h - - hash - - WDQIYfo2Zh/l6N/GCLNl5Z6cogM= - - hash2 - - SV555fhF0hfSdUX2RlFxb7U4KkdA9MFzHWyZG58kk6s= - - - Headers/FUStruct.h - - hash - - zIm9Oo/VhEv2l5bLXhKk710V48A= - - hash2 - - qpiRfWxOOudpGQThqXgjagjNW3F7VvfNLp6Rr0XoGSs= - - - Headers/UIDevice+FURenderKit.h - - hash - - CtuwsWyQRXu6LcmVdnNP/ttZroc= - - hash2 - - imzYx2sdGclV6VtxY8xpZh9IFVJMPW0cW2DczmLaB6s= - - - Headers/UIImage+FURenderKit.h - - hash - - 07QhZFpttc9c0uJW2pYade2hYj0= - - hash2 - - spnRjkap16kZse+NN5Dh3NxPVg8F6rE7AiCjvR5egYY= - - - Headers/metamacros.h - - hash - - 9BPZRo8UfHMJeSgOGLktJkvlRe0= - - hash2 - - jqrCNYzErSfHm92T8DduOdT+sdUvZsbeRsr2YCDFgYM= - - - Modules/module.modulemap - - hash - - QwpXYLIfGBdchGR8ZTh78o/lrpM= - - hash2 - - e6eY+WRmqPmJtlaNJ5wWxxyNYGWhpD+7kfHEVxrwxIc= - - - - rules - - ^.* - - ^.*\.lproj/ - - optional - - weight - 1000 - - ^.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^.* - - ^.*\.lproj/ - - optional - - weight - 1000 - - ^.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Base\.lproj/ - - weight - 1010 - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/FULiveDemo/Lib/Resources/graphics/body_slim.bundle b/FULiveDemo/Lib/Resources/graphics/body_slim.bundle deleted file mode 100644 index c7faca34..00000000 Binary files a/FULiveDemo/Lib/Resources/graphics/body_slim.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/graphics/controller_cpp.bundle b/FULiveDemo/Lib/Resources/graphics/controller_cpp.bundle deleted file mode 100644 index 3966d1b6..00000000 Binary files a/FULiveDemo/Lib/Resources/graphics/controller_cpp.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/graphics/face_beautification.bundle b/FULiveDemo/Lib/Resources/graphics/face_beautification.bundle deleted file mode 100644 index 684e078f..00000000 Binary files a/FULiveDemo/Lib/Resources/graphics/face_beautification.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/graphics/face_makeup.bundle b/FULiveDemo/Lib/Resources/graphics/face_makeup.bundle deleted file mode 100644 index f350c43c..00000000 Binary files a/FULiveDemo/Lib/Resources/graphics/face_makeup.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/graphics/fxaa.bundle b/FULiveDemo/Lib/Resources/graphics/fxaa.bundle deleted file mode 100644 index ed8fea9b..00000000 Binary files a/FULiveDemo/Lib/Resources/graphics/fxaa.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/model/ai_bgseg_green.bundle b/FULiveDemo/Lib/Resources/model/ai_bgseg_green.bundle deleted file mode 100644 index f189c749..00000000 --- a/FULiveDemo/Lib/Resources/model/ai_bgseg_green.bundle +++ /dev/null @@ -1,2 +0,0 @@ -偅ŜB&To]^A(x#{F.+r86YO@j34Dgc(l[Uҭd4Z,7U3~qJH]=:]ZHvL;u!~8]iP wD>ڂ<Ϯ;{lp}`R#oiAΞsIn )xE?ǭ B+ҌR +B2d3n%̱,}Oy -?S$ 4^W[w*`w/X莩؉ᥜU_>ݗ8[\x~Eّ*rbM&J[Jx[kB + 2VU^qo6 ٍpWA(uK'@نj5c񥋀P.ʋ@1Z2G0d`eQ^Nq~9jM(t4 D?g˧l "{ۮmYe\߰z8K?)uOzxríW獗"FdXLj&:G"O?o \ No newline at end of file diff --git a/FULiveDemo/Lib/Resources/model/ai_face_processor.bundle b/FULiveDemo/Lib/Resources/model/ai_face_processor.bundle deleted file mode 100644 index b0b522da..00000000 Binary files a/FULiveDemo/Lib/Resources/model/ai_face_processor.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/model/ai_face_processor_lite.bundle b/FULiveDemo/Lib/Resources/model/ai_face_processor_lite.bundle deleted file mode 100644 index 8349bc6e..00000000 Binary files a/FULiveDemo/Lib/Resources/model/ai_face_processor_lite.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/model/ai_face_recognizer.bundle b/FULiveDemo/Lib/Resources/model/ai_face_recognizer.bundle deleted file mode 100644 index 992836e5..00000000 Binary files a/FULiveDemo/Lib/Resources/model/ai_face_recognizer.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/model/ai_hand_processor.bundle b/FULiveDemo/Lib/Resources/model/ai_hand_processor.bundle deleted file mode 100644 index 222f32be..00000000 Binary files a/FULiveDemo/Lib/Resources/model/ai_hand_processor.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/model/ai_human_processor.bundle b/FULiveDemo/Lib/Resources/model/ai_human_processor.bundle deleted file mode 100644 index a1fb0caa..00000000 Binary files a/FULiveDemo/Lib/Resources/model/ai_human_processor.bundle and /dev/null differ diff --git a/FULiveDemo/Lib/Resources/model/ai_human_processor_gpu.bundle b/FULiveDemo/Lib/Resources/model/ai_human_processor_gpu.bundle deleted file mode 100644 index d33d54df..00000000 Binary files a/FULiveDemo/Lib/Resources/model/ai_human_processor_gpu.bundle and /dev/null differ diff --git a/FULiveDemo/Main/Controllers/FUBaseViewController.h b/FULiveDemo/Main/Controllers/FUBaseViewController.h deleted file mode 100644 index 11f3ce59..00000000 --- a/FULiveDemo/Main/Controllers/FUBaseViewController.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// FUBaseViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/28. -// Copyright © 2019年 FaceUnity. All rights reserved. -// -/* 视频采集·切换,公用UI,基类控制器 */ - -#import -#import -#import "FUHeadButtonView.h" -#import "FUPhotoButton.h" -#import -#import "FULiveModel.h" -#import "FUManager.h" -#import "FULightingView.h" -#import "FUBaseViewControllerManager.h" - - -#define KScreenWidth ([UIScreen mainScreen].bounds.size.width) -#define KScreenHeight ([UIScreen mainScreen].bounds.size.height) -#define iPhoneXStyle ((KScreenWidth == 375.f && KScreenHeight == 812.f ? YES : NO) || (KScreenWidth == 414.f && KScreenHeight == 896.f ? YES : NO)) - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBaseViewController : UIViewController - -@property (nonatomic, strong) FUBaseViewControllerManager *baseManager; - -@property (nonatomic, strong) FULiveModel *model; - -@property (strong, nonatomic) FUHeadButtonView *headButtonView; -@property (strong, nonatomic) FUPhotoButton *photoBtn; - -@property (strong, nonatomic) UILabel *noTrackLabel; -@property (strong, nonatomic) UILabel *tipLabel; -/* 是否开启比对 */ -@property (assign, nonatomic) BOOL openComp; - -/* 可以跳转到导入图片 */ -@property (assign, nonatomic) BOOL canPushImageSelView; - -@property (strong, nonatomic) FULightingView *lightingView ; - -/* 子类重载,实现差异逻辑 */ --(void)takePhotoToSave:(UIImage *)image;//拍照保存 --(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer; - --(void)didClickSelPhoto; - --(void)displayPromptText; - --(BOOL)onlyJumpImage; - -- (void)willResignActive; -- (void)didBecomeActive; - -- (void)touchScreenAction:(UITapGestureRecognizer *)tap; - -/// 屏幕方向改变 -/// @param orientation 方向 --(void)setOrientation:(int)orientation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Main/Controllers/FUBaseViewController.m b/FULiveDemo/Main/Controllers/FUBaseViewController.m deleted file mode 100644 index 26f710ab..00000000 --- a/FULiveDemo/Main/Controllers/FUBaseViewController.m +++ /dev/null @@ -1,686 +0,0 @@ -// -// FUBaseViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/28. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" -#import "FUItemsView.h" -#import "FULiveModel.h" -#import -#import -#import "FUSaveViewController.h" -#import "FUEditImageViewController.h" -#import "FUImageHelper.h" -#import -#import "FUSelectedImageController.h" -#import -#import "FUPopupMenu.h" - -#import -#import - -@interface FUBaseViewController ()< -FUCameraDelegate, -FUCameraDataSource, -FUPhotoButtonDelegate, -FUItemsViewDelegate, -FULightingViewDelegate, -UINavigationControllerDelegate, -UIImagePickerControllerDelegate,UINavigationControllerDelegate, UIImagePickerControllerDelegate, -FUPopupMenuDelegate -> -{ - dispatch_semaphore_t signal; - dispatch_semaphore_t semaphore; - UIImage *mCaptureImage; - float imageW ; - float imageH; -} -@property (strong, nonatomic) FUCamera *mCamera ; -//@property (strong, nonatomic) FUOpenGLView *renderView; -//@property (strong, nonatomic) FUItemsView *itemsView; - -@property (strong, nonatomic) UILabel *buglyLabel; -@property (strong, nonatomic) UIImageView *adjustImage; -/* 分辨率 选中第几个项 */ -@property (assign, nonatomic) int selIndex; -/* 当前 */ -@property (nonatomic, assign) int orientation; - -/* 监听屏幕方向 */ -@property (nonatomic, strong) CMMotionManager *motionManager; - -@end - -@implementation FUBaseViewController - - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - --(void)viewDidLoad{ - [super viewDidLoad]; - - self.baseManager = [[FUBaseViewControllerManager alloc] init]; - - [self setupSubView]; - - /* 视频模式 */ - fuSetFaceProcessorDetectMode(1); - - self.view.backgroundColor = [UIColor colorWithRed:17/255.0 green:18/255.0 blue:38/255.0 alpha:1.0]; - - //重置曝光值为0 - [self.mCamera setExposureValue:0]; - [self setupLightingValue]; - /* 道具切信号 */ - signal = dispatch_semaphore_create(1); - /* 后台监听 */ - [self addObserver]; - /* 同步 */ - [[FUManager shareManager] setAsyncTrackFaceEnable:NO]; - /* 最大识别人脸数 */ - [FUManager shareManager].enableMaxFaces = self.model.maxFace == 4; - - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touchScreenAction:)]; - [self.renderView addGestureRecognizer:tap]; - self.canPushImageSelView = YES; -// self.renderView.contentMode = FUOpenGLViewContentModeScaleAspectFit; - -} - --(void)viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - [self.mCamera startCapture]; - - //不确定是不是小bug,每次重新回到页面分辨率都被设置成AVCaptureSessionPreset1280x720了,放到页面初始化地方去 - [_mCamera changeSessionPreset:AVCaptureSessionPreset1280x720]; - /* 监听屏幕方向 */ - [self startListeningDirectionOfDevice]; - -} - --(void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - [self.mCamera resetFocusAndExposureModes]; - [self.mCamera stopCapture]; - - /* 清一下信息,防止快速切换有人脸信息缓存 */ - [FURenderer onCameraChange]; - /* 监听屏幕方向 */ - [self stopListeningDirectionOfDevice]; - [_photoBtn photoButtonFinishRecord]; -} - -#pragma mark - UI - --(void)setupSubView{ - /* opengl */ - _renderView = [[FUOpenGLView alloc] initWithFrame:self.view.bounds]; - _renderView.layer.masksToBounds = YES; - [self.view addSubview:_renderView]; - [_renderView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self.view); - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); - if(iPhoneXStyle){ - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-50); - }else{ - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } - } else { - // Fallback on earlier versions - make.top.equalTo(self.view.mas_top); - make.bottom.equalTo(self.view.mas_bottom); - } - - make.left.right.equalTo(self.view); - }]; - - /* 顶部按钮 */ - _headButtonView = [[FUHeadButtonView alloc] init]; - _headButtonView.delegate = self; - _headButtonView.selectedImageBtn.hidden = YES; - [self.view addSubview:_headButtonView]; - [_headButtonView mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(15); - } else { - make.top.equalTo(self.view.mas_top).offset(30); - } - make.left.right.equalTo(self.view); - make.height.mas_equalTo(44); - }]; - - /* bugly信息 */ - _buglyLabel = [[UILabel alloc] init]; - _buglyLabel.layer.masksToBounds = YES; - _buglyLabel.layer.cornerRadius = 5; - _buglyLabel.numberOfLines = 0; - _buglyLabel.backgroundColor = [UIColor darkGrayColor]; - _buglyLabel.textColor = [UIColor whiteColor]; - _buglyLabel.alpha = 0.74; - _buglyLabel.font = [UIFont systemFontOfSize:15]; - _buglyLabel.hidden = YES; - _buglyLabel.text = @" resolution:\n 720*1280\n fps: 30 \n render time:\n 10ms"; - [self.view addSubview:_buglyLabel]; - [_buglyLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(_headButtonView.mas_bottom).offset(15); - make.left.equalTo(self.view).offset(10); - make.width.mas_equalTo(90); - make.height.mas_equalTo(100); - }]; - - /* 曝光度指示器 */ - _lightingView = [[FULightingView alloc] initWithFrame:CGRectMake(0, 0, 280, 40)]; - _lightingView.center = CGPointMake(self.view.frame.size.width - 20, self.view.frame.size.height / 2 - 60); - [self.view addSubview:_lightingView]; - _lightingView.delegate = self; - _lightingView.hidden = YES; - _lightingView.transform = CGAffineTransformMakeRotation(-M_PI_2); - - /* 点击校准知识 */ - _adjustImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera_校准"]]; - _adjustImage.center = self.view.center; - _adjustImage.hidden = YES; - [self.renderView addSubview:_adjustImage]; - - /* 未检测到人脸提示 */ - _noTrackLabel = [[UILabel alloc] init]; - _noTrackLabel.textColor = [UIColor whiteColor]; - _noTrackLabel.font = [UIFont systemFontOfSize:17]; - _noTrackLabel.textAlignment = NSTextAlignmentCenter; - _noTrackLabel.text = FUNSLocalizedString(@"No_Face_Tracking", @"未检测到人脸"); - [self.view addSubview:_noTrackLabel]; - [_noTrackLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.view); - make.width.mas_equalTo(140); - make.height.mas_equalTo(22); - }]; - - /* 额外操作提示 */ - _tipLabel = [[UILabel alloc] init]; - _tipLabel.textColor = [UIColor whiteColor]; - _tipLabel.font = [UIFont systemFontOfSize:32]; - _tipLabel.textAlignment = NSTextAlignmentCenter; - _tipLabel.text = @"张张嘴"; - _tipLabel.hidden = YES; - [self.view addSubview:_tipLabel]; - [_tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(self.noTrackLabel.mas_bottom); - make.centerX.equalTo(self.view); - make.width.mas_equalTo(300); - make.height.mas_equalTo(32); - }]; - - /* 录制按钮 */ - _photoBtn = [[FUPhotoButton alloc] initWithFrame:CGRectMake(0, 0, 85, 85)]; - [_photoBtn setImage:[UIImage imageNamed:@"camera_btn_camera_normal"] forState:UIControlStateNormal]; - if(iPhoneXStyle){ - _photoBtn.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height - 85 - 50); - }else{ - _photoBtn.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height - 85 - 20); - } - - _photoBtn.delegate = self; - [self.view addSubview:_photoBtn]; - - /* 默认选中720P index = 1 */ - _selIndex = 1; -} - - --(void)setupLightingValue{ - //设置默认调节的区间 - self.lightingView.slider.minimumValue = -2; - self.lightingView.slider.maximumValue = 2; - self.lightingView.slider.value = 0; -} - -#pragma mark - UI事件 -- (void)touchScreenAction:(UITapGestureRecognizer *)tap { - if (tap.view == self.renderView) { - // 聚焦 - if (self.adjustImage.hidden) { - self.adjustImage.hidden = NO ; - self.lightingView.hidden = NO ; - } - - [self.mCamera cameraChangeModle:FUCameraModelChangeless]; - CGPoint center = [tap locationInView:self.renderView]; - - // UI - adjustTime = CFAbsoluteTimeGetCurrent() ; - self.adjustImage.center = center ; - self.adjustImage.transform = CGAffineTransformIdentity ; - [UIView animateWithDuration:0.3 animations:^{ - self.adjustImage.transform = CGAffineTransformMakeScale(0.67, 0.67) ; - }completion:^(BOOL finished) { - [self hiddenAdjustViewWithTime:1.0]; - }]; - - if (self.renderView.contentMode == FUOpenGLViewContentModeScaleAspectFill) { - float scal2 = imageH/imageW; - float apaceLead = (self.renderView.bounds.size.height / scal2 - self.renderView.bounds.size.width )/2; - float imagecW = self.renderView.bounds.size.width + 2 * apaceLead; - center.x = center.x + apaceLead; - - if (center.y > 0) { - CGPoint point = CGPointMake(center.y/self.renderView.bounds.size.height, self.mCamera.isFrontCamera ? center.x/imagecW : 1 - center.x/imagecW); - [self.mCamera focusWithMode:AVCaptureFocusModeContinuousAutoFocus exposeWithMode:AVCaptureExposureModeContinuousAutoExposure atDevicePoint:point monitorSubjectAreaChange:YES]; - NSLog(@"手动曝光点-----%@",NSStringFromCGPoint(point)); - } - }else if(self.renderView.contentMode == FUOpenGLViewContentModeScaleAspectFit){ - float scal2 = imageH/imageW; - float apaceTOP = (self.renderView.bounds.size.height - self.renderView.bounds.size.width * scal2)/2; - float imagecH = self.renderView.bounds.size.height - 2 * apaceTOP; - center.y = center.y - apaceTOP; - - if (center.y > 0) { - CGPoint point = CGPointMake(center.y/imagecH, self.mCamera.isFrontCamera ? center.x/self.renderView.bounds.size.width : 1 - center.x/self.renderView.bounds.size.width); - [self.mCamera focusWithMode:AVCaptureFocusModeContinuousAutoFocus exposeWithMode:AVCaptureExposureModeContinuousAutoExposure atDevicePoint:point monitorSubjectAreaChange:YES]; - NSLog(@"手动曝光点-----%@",NSStringFromCGPoint(point)); - } - }else{ - CGPoint point = CGPointMake(center.y/self.renderView.bounds.size.height, self.mCamera.isFrontCamera ? center.x/self.renderView.bounds.size.width : 1 - center.x/self.renderView.bounds.size.width); - [self.mCamera focusWithMode:AVCaptureFocusModeContinuousAutoFocus exposeWithMode:AVCaptureExposureModeContinuousAutoExposure atDevicePoint:point monitorSubjectAreaChange:YES]; - NSLog(@"手动曝光点-----%@",NSStringFromCGPoint(point)); - } - - } -} - -#pragma mark - Loading - --(FUCamera *)mCamera { - if (!_mCamera) { - _mCamera = [[FUCamera alloc] init]; - _mCamera.delegate = self ; - _mCamera.dataSource = self; - } - return _mCamera ; -} --(UIImage *)captureImage{ - mCaptureImage = nil; - semaphore = dispatch_semaphore_create(0); - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - return mCaptureImage; - -} - -#pragma mark - FUHeadButtonViewDelegate - --(void)headButtonViewBackAction:(UIButton *)btn{ - dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER); - [self.mCamera stopCapture]; - [[FUManager shareManager] destoryItems]; - [self.navigationController popViewControllerAnimated:YES]; - dispatch_semaphore_signal(signal); -} - --(void)headButtonViewSegmentedChange:(UISegmentedControl *)sender{ - _mCamera.captureFormat = _mCamera.captureFormat == kCVPixelFormatType_32BGRA ? kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:kCVPixelFormatType_32BGRA; -} - --(void)headButtonViewSelImageAction:(UIButton *)btn{ - - if ([self onlyJumpImage]) { - [self fuPopupMenuDidSelectedImage]; - return; - } - if (self.canPushImageSelView) { - [FUPopupMenu showRelyOnView:btn frame:CGRectMake(17, CGRectGetMaxY(self.headButtonView.frame) + 1 , 340, 132) defaultSelectedAtIndex:_selIndex onlyTop:NO delegate:self]; - }else{ - [FUPopupMenu showRelyOnView:btn frame:CGRectMake(17, CGRectGetMaxY(self.headButtonView.frame) + 1 , 340, 80) defaultSelectedAtIndex:_selIndex onlyTop:YES delegate:self]; - } -} - --(void)headButtonViewBuglyAction:(UIButton *)btn{ - self.buglyLabel.hidden = !self.buglyLabel.hidden; -} - --(void)headButtonViewSwitchAction:(UIButton *)sender{ - sender.userInteractionEnabled = NO ; - dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC); - dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){ - sender.userInteractionEnabled = YES ; - }); - if (![self.mCamera supportsAVCaptureSessionPreset:sender.selected]) {//硬件不支持 降低一个分辨率 - _selIndex = _selIndex - 1; - [self fuPopupMenuDidSelectedAtIndex:_selIndex]; - } - [self.mCamera changeCameraInputDeviceisFront:sender.selected]; - /**切换摄像头要调用此函数*/ - [[FUManager shareManager] onCameraChange]; - sender.selected = !sender.selected ; -} -static CFAbsoluteTime adjustTime = 0 ; -#pragma mark - FULightingViewDelegate --(void)lightingViewValueDidChange:(float)value { - adjustTime = CFAbsoluteTimeGetCurrent() ; - [self hiddenAdjustViewWithTime:1.3]; - [self.mCamera setExposureValue:value]; -} - -- (void)hiddenAdjustViewWithTime:(float)time { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - - if (CFAbsoluteTimeGetCurrent() - adjustTime > 1.29) { - self.adjustImage.hidden = YES ; - self.lightingView.hidden = YES ; - } - }); -} - -#pragma mark - PhotoButtonDelegate - -/* 拍照 */ -- (void)takePhoto{ - //拍照效果 - self.photoBtn.enabled = NO; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.photoBtn.enabled = YES; - }); -// UIView *whiteView = [[UIView alloc] initWithFrame:self.view.bounds]; -// whiteView.backgroundColor = [UIColor whiteColor]; -// [self.view addSubview:whiteView]; -// whiteView.alpha = 0.3; -// [UIView animateWithDuration:0.1 animations:^{ -// whiteView.alpha = 0.8; -// } completion:^(BOOL finished) { -// [UIView animateWithDuration:0.1 animations:^{ -// whiteView.alpha = 0; -// } completion:^(BOOL finished) { -// self.photoBtn.enabled = YES; -// [whiteView removeFromSuperview]; -// }]; -// }]; - - - UIImage *image = [self captureImage]; - if (image) { - [self takePhotoToSave:image]; - } -} - --(void)takePhotoToSave:(UIImage *)image{ - UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); -} - -/* 开始录像 */ -- (void)startRecord { - [self.mCamera startRecord]; -} - -/* 停止录像 */ -- (void)stopRecord { - __weak typeof(self)weakSelf = self ; - [self.mCamera stopRecordWithCompletionHandler:^(NSString *videoPath) { - dispatch_async(dispatch_get_main_queue(), ^{ - UISaveVideoAtPathToSavedPhotosAlbum(videoPath, weakSelf, @selector(video:didFinishSavingWithError:contextInfo:), NULL); - }); - }]; -} - -- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ - if(error != NULL){ - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存视频失败", nil)]; - - }else{ - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"视频已保存到相册", nil)]; - } -} - -- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{ - if(error != NULL){ - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存图片失败", nil)]; - }else{ - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"图片已保存到相册", nil)]; - } -} - -#pragma mark - FUCameraDelegate -static int rate = 0; -static NSTimeInterval totalRenderTime = 0; -static NSTimeInterval oldTime = 0; --(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer { - - CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) ; - imageW = CVPixelBufferGetWidth(pixelBuffer); - imageH = CVPixelBufferGetHeight(pixelBuffer); - NSTimeInterval startTime = [[NSDate date] timeIntervalSince1970]; - - fuSetDefaultRotationMode([FUManager shareManager].deviceOrientation); - if(!_openComp){//按住对比,不处理 - FURenderInput *input = [[FURenderInput alloc] init]; - input.pixelBuffer = pixelBuffer; - FURenderOutput *outPut = [[FURenderKit shareRenderKit] renderWithInput:input]; - pixelBuffer = outPut.pixelBuffer; -// if ([self getNamaRenderType] == FUNamaHandleTypeBodyAvtar) {//全身avtar为3d渲染,这里暂时特殊处理 -// [[FUManager shareManager] renderItemsWithPtaPixelBuffer:pixelBuffer]; -// }else{ -// [[FUManager shareManager] renderItemsToPixelBuffer:pixelBuffer]; -// } - } - NSTimeInterval endTime = [[NSDate date] timeIntervalSince1970]; - /* renderTime */ - totalRenderTime += endTime - startTime; - rate ++; - [self updateVideoParametersText:endTime bufferRef:pixelBuffer]; - /* 拍照抓图 */ - if (!mCaptureImage && semaphore) { - mCaptureImage = [FUImageHelper imageFromPixelBuffer:pixelBuffer]; - dispatch_semaphore_signal(semaphore); - } - - [self.renderView displayPixelBuffer:pixelBuffer]; -// static float posterLandmarks[239* 2]; -// memset(posterLandmarks, 0, 239* 2 * sizeof(float)); -// NSLog(@"-----istrack--%d",[FURenderer isTracking]); -// [FURenderer getFaceInfo:0 name:@"landmarks" pret:posterLandmarks number:239* 2]; -// [self.renderView displayPixelBuffer:pixelBuffer withLandmarks:posterLandmarks count:239* 2 MAX:NO]; - /**判断是否检测到人脸*/ - [self displayPromptText]; -} - -#pragma mark - FUCameraDataSource --(CGPoint)faceCenterInImage:(FUCamera *)camera{ - CGPoint center = CGPointMake(-1, -1); - BOOL isHaveFace = [[FUManager shareManager] isTracking]; - - if (isHaveFace) { - center = [self cameraFocusAndExposeFace]; - } -// NSLog(@"人脸曝光点-----%@",NSStringFromCGPoint(center)); - return center; -} - - --(CGPoint)cameraFocusAndExposeFace{ - CGPoint center = [[FUManager shareManager] getFaceCenterInFrameSize:CGSizeMake(imageW, imageH)]; - return CGPointMake(center.y, self.mCamera.isFrontCamera ? center.x : 1 - center.x); -} - - -//-(CGPoint)getCenterFromeLandmarks:(float *)Landmarks{ -// float min_x = 10000,min_y =10000,max_x =0 ,max_y=0; -// for(int i = 0;i<75;i++){ -// min_x = MIN(min_x,Landmarks[i*2+0]); -// min_y = MIN(min_y,Landmarks[i*2+1]); -// max_x = MAX(max_x,Landmarks[i*2+0]); -// max_y = MAX(max_y,Landmarks[i*2+1]); -// } -// CGPoint center=CGPointMake((min_x + max_x)/2.0, (min_y + max_y)/2.0); -// NSLog(@"LandmarksC--(%f,%f)",center.x,center.y); -// return center; -//} - -#pragma mark - 刷新bugly text -// 更新视频参数栏 --(void)updateVideoParametersText:(NSTimeInterval)startTime bufferRef:(CVPixelBufferRef)pixelBuffer{ - if (startTime - oldTime >= 1) {//一秒钟计算平均值 - oldTime = startTime; - int diaplayRate = rate; - NSTimeInterval diaplayRenderTime = totalRenderTime; - - float w = CVPixelBufferGetWidth(pixelBuffer); - float h = CVPixelBufferGetHeight(pixelBuffer); - NSString *ratioStr = [NSString stringWithFormat:@"%.0fX%.0f", w, h]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.buglyLabel.text = [NSString stringWithFormat:@" resolution:\n %@\n fps: %d \n render time:\n %.0fms",ratioStr,diaplayRate,diaplayRenderTime * 1000.0 / diaplayRate]; - }); - totalRenderTime = 0; - rate = 0; - } -} - -#pragma mark - FUPopupMenuDelegate - --(void)fuPopupMenuDidSelectedAtIndex:(NSInteger)index{ - [FURenderer onCameraChange]; - BOOL ret = NO; - _selIndex = (int)index; - switch (index) { - case 0: - ret = [self.mCamera changeSessionPreset:AVCaptureSessionPreset640x480]; - break; - case 1: - ret = [self.mCamera changeSessionPreset:AVCaptureSessionPreset1280x720]; - break; - case 2: - ret = [self.mCamera changeSessionPreset:AVCaptureSessionPreset1920x1080]; - break; - default: - break; - } - - if (!ret) { - [SVProgressHUD showInfoWithStatus:@"摄像机不支持"]; - } -} - --(void)fuPopupMenuDidSelectedImage{ - [self didClickSelPhoto]; -} - -#pragma mark - 子类差异实现 - --(void)didClickSelPhoto{ - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - [self.navigationController pushViewController:vc animated:YES]; -} - --(void)displayPromptText{ - BOOL isHaveFace = [[FUManager shareManager] isTracking]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"No_Face_Tracking",nil); - self.noTrackLabel.hidden = isHaveFace; - }) ; -} - --(BOOL)onlyJumpImage{ - return NO; -} - --(FUNamaHandleType)getNamaRenderType{ - return 0; -} - -#pragma mark - Observer - -- (void)addObserver{ - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActive) name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; -} - -- (void)willResignActive{ - if (self.navigationController.visibleViewController == self) { - [self.mCamera stopCapture]; -// self.mCamera = nil; - } -} - - -- (void)didBecomeActive{ - if (self.navigationController.visibleViewController == self) { - [self.mCamera startCapture]; - } -} - - - -#pragma mark - 方向监听 - -/// 开启屏幕旋转的检测 -- (void)startListeningDirectionOfDevice { - if (self.motionManager == nil) { - self.motionManager = [[CMMotionManager alloc] init]; - } - self.motionManager.deviceMotionUpdateInterval = 0.3; - - // 判断设备传感器是否可用 - if (self.motionManager.deviceMotionAvailable) { - // 启动设备的运动更新,通过给定的队列向给定的处理程序提供数据。 - [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) { - [self performSelectorOnMainThread:@selector(handleDeviceMotion:) withObject:motion waitUntilDone:YES]; - }]; - } else { - [self setMotionManager:nil]; - } -} - -- (void)stopListeningDirectionOfDevice { - if (_motionManager) { - [_motionManager stopDeviceMotionUpdates]; - _motionManager = nil; - } -} - -- (void)handleDeviceMotion:(CMDeviceMotion *)deviceMotion { - - double x = deviceMotion.gravity.x; - double y = deviceMotion.gravity.y; - int orientation = 0; - - if (fabs(y) >= fabs(x)) {// 竖屏 - if (y < 0) { - orientation = 0; - } - else { - orientation = 2; - } - } - else { // 横屏 - if (x < 0) { - orientation = 1; - } - else { - orientation = 3; - } - } - - if (orientation != _orientation) { - self.orientation = orientation; - } - -} - --(void)setOrientation:(int)orientation{ - _orientation = orientation; -} - - --(void)dealloc{ - [self stopListeningDirectionOfDevice]; - NSLog(@"----界面销毁"); -} - - -@end diff --git a/FULiveDemo/Main/Manager/FUBaseViewControllerManager.h b/FULiveDemo/Main/Manager/FUBaseViewControllerManager.h deleted file mode 100644 index a5c9622f..00000000 --- a/FULiveDemo/Main/Manager/FUBaseViewControllerManager.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// FUBaseViewControllerManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/24. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -#import -#import "FUBeautyModel.h" -#import "FUBeautyDefine.h" - - -NS_ASSUME_NONNULL_BEGIN - -/** - * 处理美颜的业务逻辑和数据类 - */ -@interface FUBaseViewControllerManager : FUMetaManager -/* 滤镜参数 */ -@property (nonatomic, strong, readonly) NSArray *filters; -/* 美肤参数 */ -@property (nonatomic, strong, readonly) NSArray *skinParams; -/* 美型参数 */ -@property (nonatomic, strong, readonly) NSArray *shapeParams; - -@property (nonatomic, strong) FUBeautyModel *seletedFliter; - -@property (nonatomic, strong) FUBeauty *beauty; - -- (void)setSkin:(double)value forKey:(FUBeautifySkin)key; - -- (void)setShap:(double)value forKey:(FUBeautifyShape)key; - -- (void)setFilterkey:(FUFilter)filterKey; - -- (void)setDefaultRotationMode:(int)orientation; - -- (void)setFaceProcessorDetectMode:(int)mode; - -/** - 判断是不是默认美型参数 - */ --(BOOL)isDefaultShapeValue; -/* 判断是不是默认美肤 */ --(BOOL)isDefaultSkinValue; - -// 默认美颜参数 -- (void)resetDefaultParams:(FUBeautyDefine)type; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Main/Manager/FUBaseViewControllerManager.m b/FULiveDemo/Main/Manager/FUBaseViewControllerManager.m deleted file mode 100644 index 1e9ddcf1..00000000 --- a/FULiveDemo/Main/Manager/FUBaseViewControllerManager.m +++ /dev/null @@ -1,367 +0,0 @@ -// -// FUBaseViewControllerManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/24. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBaseViewControllerManager.h" -#import "FUManager.h" -#import "FUBeautyDefine.h" - -@interface FUBaseViewControllerManager () -/* 滤镜参数 */ -@property (nonatomic, strong) NSArray *filters; -/* 美肤参数 */ -@property (nonatomic, strong) NSArray *skinParams; -/* 美型参数 */ -@property (nonatomic, strong) NSArray *shapeParams; -@end - -@implementation FUBaseViewControllerManager -- (void)dealloc { - [FURenderKit shareRenderKit].beauty = nil; -} - -- (instancetype)init { - self = [super init]; - if (self) { - /* 美颜 */ - self.filters = [self setupFilterData]; - self.seletedFliter = self.filters[2]; - self.skinParams = [self setupSkinData]; - self.shapeParams = [self setupShapData]; - [self loadFilter]; - } - return self; -} - -- (void)setFaceProcessorDetectMode:(int)mode { - fuSetFaceProcessorDetectMode(mode); -} - -- (void)setDefaultRotationMode:(int)orientation { - fuSetDefaultRotationMode(orientation); -} - -/**加载美颜道具*/ -- (void)loadFilter { - -// dispatch_async(_asyncLoadQueue, ^{ -// if (items[FUNamaHandleTypeBeauty] == 0) { - - CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); - - NSString *path = [[NSBundle mainBundle] pathForResource:@"face_beautification.bundle" ofType:nil]; - self.beauty = [[FUBeauty alloc] initWithPath:path name:@"FUBeauty"]; -// items[FUNamaHandleTypeBeauty] = [FURenderer itemWithContentsOfFile:path]; - /* 默认精细磨皮 */ - self.beauty.heavyBlur = 0; - self.beauty.blurType = 2; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:@"heavy_blur" value:@(0)]; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:@"blur_type" value:@(2)]; - /* 默认自定义脸型 */ - self.beauty.faceShape = 4; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:@"face_shape" value:@(4)]; - [self setBeautyParameters]; - - [FURenderKit shareRenderKit].beauty = self.beauty; - - CFAbsoluteTime endTime = (CFAbsoluteTimeGetCurrent() - startTime); - - NSLog(@"加载美颜道具耗时: %f ms", endTime * 1000.0); - -// } -// }); -} - -- (void)setBeautyParameters { - - for (FUBeautyModel *modle in self.skinParams){ - if (modle.mParam == FUBeautifySkinBlurLevel) { - [self setSkin:modle.mValue * 6 forKey:modle.mParam]; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:modle.mParam value:@(modle.mValue * 6)]; - }else{ - [self setSkin:modle.mValue forKey:modle.mParam]; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:modle.mParam value:@(modle.mValue)]; - } - NSLog(@"key===%ld,value ==%f",modle.mParam, modle.mValue); - } - - for (FUBeautyModel *modle in self.shapeParams){ - [self setShap:modle.mValue forKey:modle.mParam]; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:modle.mParam value:@(modle.mValue)]; - NSLog(@"key===%ld,value ==%f",modle.mParam, modle.mValue); - } - - - /* 设置默认状态 */ - if (self.filters) { - [self setFilterkey:[self.seletedFliter.strValue lowercaseString]]; - self.beauty.filterLevel = self.seletedFliter.mValue; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:@"filter_name" value:[self.seletedFliter.mParam lowercaseString]]; -// [FURenderer itemSetParam:items[FUNamaHandleTypeBeauty] withName:@"filter_level" value:@(self.seletedFliter.mValue)]; - } - -} - - -- (void)setSkin:(double)value forKey:(FUBeautifySkin)key { - switch (key) { - case FUBeautifySkinBlurLevel: { - self.beauty.blurLevel = value; - } - break; - case FUBeautifySkinColorLevel: { - self.beauty.colorLevel = value; - } - break; - case FUBeautifySkinRedLevel: { - self.beauty.redLevel = value; - } - break; - case FUBeautifySkinSharpen: { - self.beauty.sharpen = value; - } - break; - case FUBeautifySkinEyeBright: { - self.beauty.eyeBright = value; - } - break; - case FUBeautifySkinToothWhiten: { - self.beauty.toothWhiten = value; - } - break; - case FUBeautifySkinRemovePouchStrength: { - self.beauty.removePouchStrength = value; - } - break; - case FUBeautifySkinRemoveNasolabialFoldsStrength: { - self.beauty.removeNasolabialFoldsStrength = value; - } - break; - default: - break; - } -} - -- (void)setShap:(double)value forKey:(FUBeautifyShape)key { - switch (key) { - case FUBeautifyShapeCheekThinning: { - self.beauty.cheekThinning = value; - } - break; - case FUBeautifyShapeCheekV: { - self.beauty.cheekV = value; - } - break; - case FUBeautifyShapeCheekNarrow: { - self.beauty.cheekNarrow = value; - } - break; - case FUBeautifyShapeCheekSmall: { - self.beauty.cheekSmall = value; - } - break; - case FUBeautifyShapeIntensityCheekbones: { - self.beauty.intensityCheekbones = value; - } - break; - case FUBeautifyShapeIntensityLowerJaw: { - self.beauty.intensityLowerJaw = value; - } - break; - case FUBeautifyShapeEyeEnlarging: { - self.beauty.eyeEnlarging = value; - } - break; - case FUBeautifyShapeIntensityChin: { - self.beauty.intensityChin = value; - } - break; - case FUBeautifyShapeIntensityForehead: { - self.beauty.intensityForehead = value; - } - break; - case FUBeautifyShapeIntensityNose: { - self.beauty.intensityNose = value; - } - break; - case FUBeautifyShapeIntensityMouth: { - self.beauty.intensityMouth = value; - } - break; - case FUBeautifyShapeIntensityCanthus: { - self.beauty.intensityCanthus = value; - } - break; - case FUBeautifyShapeIntensityEyeSpace: { - self.beauty.intensityEyeSpace = value; - } - break; - case FUBeautifyShapeIntensityEyeRotate: { - self.beauty.intensityEyeRotate = value; - } - break; - case FUBeautifyShapeIntensityLongNose: { - self.beauty.intensityLongNose = value; - } - break; - case FUBeautifyShapeIntensityPhiltrum: { - self.beauty.intensityPhiltrum = value; - } - break; - case FUBeautifyShapeIntensitySmile: { - self.beauty.intensitySmile = value; - } - break; - default: - break; - } -} - -- (void)setFilterkey:(FUFilter)filterKey { - self.beauty.filterName = filterKey; -} - - -- (void)releaseItem { - //释放item,内部会自动清除句柄 - [FURenderKit shareRenderKit].beauty = nil; - //demo 是单例持有 beauty 所以必须主动设置nil, 如果是每个模块自己持有beauty 则随着模块的释放系统自动释放beauty,无需再设置 -// self.beauty = nil; -} - -- (BOOL)isDefaultSkinValue { - for (FUBeautyModel *modle in _skinParams){ - if (fabs(modle.mValue - modle.defaultValue) > 0.01 ) { - return NO; - } - } - return YES; -} - -- (BOOL)isDefaultShapeValue { - for (FUBeautyModel *modle in _shapeParams){ - if (fabs(modle.mValue - modle.defaultValue) > 0.01 ) { - return NO; - } - } - return YES; -} - - -- (NSArray *)setupFilterData { - NSArray *beautyFiltersDataSource = @[@"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"]; - - NSDictionary *filtersCHName = @{@"origin":@"原图",@"bailiang1":@"白亮1",@"bailiang2":@"白亮2",@"bailiang3":@"白亮3",@"bailiang4":@"白亮4",@"bailiang5":@"白亮5",@"bailiang6":@"白亮6",@"bailiang7":@"白亮7" - ,@"fennen1":@"粉嫩1",@"fennen2":@"粉嫩2",@"fennen3":@"粉嫩3",@"fennen4":@"粉嫩4",@"fennen5":@"粉嫩5",@"fennen6":@"粉嫩6",@"fennen7":@"粉嫩7",@"fennen8":@"粉嫩8", - @"gexing1":@"个性1",@"gexing2":@"个性2",@"gexing3":@"个性3",@"gexing4":@"个性4",@"gexing5":@"个性5",@"gexing6":@"个性6",@"gexing7":@"个性7",@"gexing8":@"个性8",@"gexing9":@"个性9",@"gexing10":@"个性10",@"gexing11":@"个性11", - @"heibai1":@"黑白1",@"heibai2":@"黑白2",@"heibai3":@"黑白3",@"heibai4":@"黑白4",@"heibai5":@"黑白5", - @"lengsediao1":@"冷色调1",@"lengsediao2":@"冷色调2",@"lengsediao3":@"冷色调3",@"lengsediao4":@"冷色调4",@"lengsediao5":@"冷色调5",@"lengsediao6":@"冷色调6",@"lengsediao7":@"冷色调7",@"lengsediao8":@"冷色调8",@"lengsediao9":@"冷色调9",@"lengsediao10":@"冷色调10",@"lengsediao11":@"冷色调11", - @"nuansediao1":@"暖色调1",@"nuansediao2":@"暖色调2",@"nuansediao3":@"暖色调3",@"xiaoqingxin1":@"小清新1",@"xiaoqingxin2":@"小清新2",@"xiaoqingxin3":@"小清新3",@"xiaoqingxin4":@"小清新4",@"xiaoqingxin5":@"小清新5",@"xiaoqingxin6":@"小清新6", - @"ziran1":@"自然1",@"ziran2":@"自然2",@"ziran3":@"自然3",@"ziran4":@"自然4",@"ziran5":@"自然5",@"ziran6":@"自然6",@"ziran7":@"自然7",@"ziran8":@"自然8", - @"mitao1":@"蜜桃1",@"mitao2":@"蜜桃2",@"mitao3":@"蜜桃3",@"mitao4":@"蜜桃4",@"mitao5":@"蜜桃5",@"mitao6":@"蜜桃6",@"mitao7":@"蜜桃7",@"mitao8":@"蜜桃8", - @"zhiganhui1":@"质感灰1",@"zhiganhui2":@"质感灰2",@"zhiganhui3":@"质感灰3",@"zhiganhui4":@"质感灰4",@"zhiganhui5":@"质感灰5",@"zhiganhui6":@"质感灰6",@"zhiganhui7":@"质感灰7",@"zhiganhui8":@"质感灰8" - }; - NSMutableArray *filters = [NSMutableArray array]; - - - for (NSString *str in beautyFiltersDataSource) { - FUBeautyModel *modle = [[FUBeautyModel alloc] init]; - modle.strValue = str; - modle.mTitle = [filtersCHName valueForKey:str]; - modle.mValue = 0.4; - modle.type = FUBeautyDefineFilter; - [filters addObject:modle]; - } - - return [NSArray arrayWithArray:filters]; -} - -- (NSArray *)setupSkinData { - NSArray *prams = @[@"blur_level",@"color_level",@"red_level",@"sharpen",@"eye_bright",@"tooth_whiten",@"remove_pouch_strength",@"remove_nasolabial_folds_strength"];// - NSDictionary *titelDic = @{@"blur_level":@"精细磨皮",@"color_level":@"美白",@"red_level":@"红润",@"sharpen":@"锐化",@"remove_pouch_strength":@"去黑眼圈",@"remove_nasolabial_folds_strength":@"去法令纹",@"eye_bright":@"亮眼",@"tooth_whiten":@"美牙"}; - NSDictionary *defaultValueDic = @{@"blur_level":@(0.7),@"color_level":@(0.3),@"red_level":@(0.3),@"sharpen":@(0.2),@"remove_pouch_strength":@(0),@"remove_nasolabial_folds_strength":@(0),@"eye_bright":@(0),@"tooth_whiten":@(0)}; - - NSMutableArray *skinParams = [NSMutableArray array]; - - for (NSUInteger i = 0; i < FUBeautifySkinMax; i ++) { - NSString *str = prams[i]; - FUBeautyModel *modle = [[FUBeautyModel alloc] init]; - modle.mParam = i; - modle.type = FUBeautyDefineSkin; - modle.mTitle = [titelDic valueForKey:str]; - modle.mValue = [[defaultValueDic valueForKey:str] floatValue]; - modle.defaultValue = modle.mValue; - [skinParams addObject:modle]; - } - return [NSArray arrayWithArray:skinParams]; -} - -- (NSArray *)setupShapData { - NSArray *prams = @[@"cheek_thinning",@"cheek_v",@"cheek_narrow",@"cheek_small",@"intensity_cheekbones",@"intensity_lower_jaw",@"eye_enlarging",@"intensity_chin",@"intensity_forehead",@"intensity_nose",@"intensity_mouth",@"intensity_canthus",@"intensity_eye_space",@"intensity_eye_rotate",@"intensity_long_nose",@"intensity_philtrum",@"intensity_smile"]; - NSDictionary *titelDic = @{@"cheek_thinning":@"瘦脸",@"cheek_v":@"v脸",@"cheek_narrow":@"窄脸",@"cheek_small":@"小脸",@"intensity_cheekbones":@"瘦颧骨",@"intensity_lower_jaw":@"瘦下颌骨",@"eye_enlarging":@"大眼",@"intensity_chin":@"下巴", - @"intensity_forehead":@"额头",@"intensity_nose":@"瘦鼻",@"intensity_mouth":@"嘴型",@"intensity_canthus":@"开眼角",@"intensity_eye_space":@"眼距",@"intensity_eye_rotate":@"眼睛角度",@"intensity_long_nose":@"长鼻",@"intensity_philtrum":@"缩人中",@"intensity_smile":@"微笑嘴角" - }; - NSDictionary *defaultValueDic = @{@"cheek_thinning":@(0),@"cheek_v":@(0.5),@"cheek_narrow":@(0),@"cheek_small":@(0),@"intensity_cheekbones":@(0),@"intensity_lower_jaw":@(0),@"eye_enlarging":@(0.4),@"intensity_chin":@(0.3), - @"intensity_forehead":@(0.3),@"intensity_nose":@(0.5),@"intensity_mouth":@(0.4),@"intensity_canthus":@(0),@"intensity_eye_space":@(0.5),@"intensity_eye_rotate":@(0.5),@"intensity_long_nose":@(0.5),@"intensity_philtrum":@(0.5),@"intensity_smile":@(0) - }; - - NSMutableArray *shapeParams = [NSMutableArray array]; - for (NSUInteger i = 0; i < FUBeautifyShapeMax; i ++) { - BOOL isStyle101 = NO; - NSString *str = prams[i]; - if ([str isEqualToString:@"intensity_chin"] || [str isEqualToString:@"intensity_forehead"] || [str isEqualToString:@"intensity_mouth"] || [str isEqualToString:@"intensity_eye_space"] || [str isEqualToString:@"intensity_eye_rotate"] || [str isEqualToString:@"intensity_long_nose"] || [str isEqualToString:@"intensity_philtrum"]) { - isStyle101 = YES; - } - FUBeautyModel *modle = [[FUBeautyModel alloc] init]; - modle.mParam = i; - modle.type = FUBeautyDefineShape; - modle.mTitle = [titelDic valueForKey:str]; - modle.mValue = [[defaultValueDic valueForKey:str] floatValue]; - modle.defaultValue = modle.mValue; - modle.iSStyle101 = isStyle101; - [shapeParams addObject:modle]; - } - return [NSArray arrayWithArray:shapeParams]; -} - -// 默认美颜参数 -- (void)resetDefaultParams:(FUBeautyDefine)type { - switch (type) { - case FUBeautyDefineSkin: { - for (FUBeautyModel *modle in _skinParams){ - modle.mValue = modle.defaultValue; - if (modle.mParam == FUBeautifySkinBlurLevel) { - [self setSkin:modle.mValue * 6 forKey:modle.mParam]; - }else{ - [self setSkin:modle.mValue forKey:modle.mParam]; - } - } - } - break; - case FUBeautyDefineShape: { - for (FUBeautyModel *modle in _shapeParams){ - modle.mValue = modle.defaultValue; - [self setShap:modle.mValue forKey:modle.mParam]; - } - } - break; - - default: - break; - } -} - -@end diff --git a/FULiveDemo/MediaPicker/ViewController/FUMediaPickerViewController.h b/FULiveDemo/MediaPicker/ViewController/FUMediaPickerViewController.h new file mode 100644 index 00000000..36843c52 --- /dev/null +++ b/FULiveDemo/MediaPicker/ViewController/FUMediaPickerViewController.h @@ -0,0 +1,27 @@ +// +// FUMediaPickerViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import +#import + +#import "FUMediaPickerViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMediaPickerViewController : UIViewController + +- (instancetype)initWithViewModel:(FUMediaPickerViewModel *)viewModel; + +/// 初始化 +/// @param viewModel FUMediaPickerViewModel +/// @param handler 选择图片/视频回调 +- (instancetype)initWithViewModel:(FUMediaPickerViewModel *)viewModel + selectedMediaHandler:(nullable void (^)(NSDictionary *info))handler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/MediaPicker/ViewController/FUMediaPickerViewController.m b/FULiveDemo/MediaPicker/ViewController/FUMediaPickerViewController.m new file mode 100644 index 00000000..10efec79 --- /dev/null +++ b/FULiveDemo/MediaPicker/ViewController/FUMediaPickerViewController.m @@ -0,0 +1,251 @@ +// +// FUMediaPickerViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FUMediaPickerViewController.h" +#import "FUBeautyImageRenderViewController.h" +#import "FUBeautyVideoRenderViewController.h" +#import "FUMakeupImageRenderViewController.h" +#import "FUMakeupVideoRenderViewController.h" +#import "FUStickerImageRenderViewController.h" +#import "FUStickerVideoRenderViewController.h" +#import "FUGreenScreenImageRenderViewController.h" +#import "FUGreenScreenVideoRenderViewController.h" + +#import "UIImage+FU.h" + +@interface FUMediaPickerViewController () + +@property (strong, nonatomic) UIButton *imageSelectionButton; +@property (strong, nonatomic) UIButton *videoSelectionButton; +@property (strong, nonatomic) UILabel *messageLabel; + +@property (nonatomic, strong) FUMediaPickerViewModel *viewModel; + +@property (nonatomic, copy) void (^mediaCallBack)(NSDictionary *info); + +@end + +@implementation FUMediaPickerViewController + +- (instancetype)initWithViewModel:(FUMediaPickerViewModel *)viewModel { + return [self initWithViewModel:viewModel selectedMediaHandler:nil]; +} + +- (instancetype)initWithViewModel:(FUMediaPickerViewModel *)viewModel selectedMediaHandler:(void (^)(NSDictionary *))handler { + self = [super init]; + if (self) { + self.viewModel = viewModel; + self.mediaCallBack = handler; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureUI]; +} + +#pragma mark - UI + +- (void)configureUI { + self.view.backgroundColor = [UIColor blackColor]; + + UIButton *backButton = [[UIButton alloc] init]; + [backButton setImage:[UIImage imageNamed:@"back_item"] forState:UIControlStateNormal]; + [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:backButton]; + [backButton mas_makeConstraints:^(MASConstraintMaker *make) { + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(20); + } else { + make.top.equalTo(self.view.mas_top).offset(30); + } + make.leading.equalTo(self.view).offset(10); + make.size.mas_offset(CGSizeMake(44, 44)); + }]; + + [self.view addSubview:self.imageSelectionButton]; + [self.imageSelectionButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.view); + make.size.mas_offset(CGSizeMake(235, 48)); + }]; + + [self.view addSubview:self.videoSelectionButton]; + [self.videoSelectionButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(self.view); + make.top.equalTo(self.imageSelectionButton.mas_bottom).mas_offset(44); + make.size.mas_offset(CGSizeMake(235, 48)); + }]; + + [self.view addSubview:self.messageLabel]; + [self.messageLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(self.view); + make.bottom.equalTo(self.imageSelectionButton.mas_top).mas_offset(-44); + }]; +} + +#pragma mark - Event response + +- (void)backAction:(UIButton *)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)imageSelectionAction:(UIButton *)sender { + dispatch_async(dispatch_get_main_queue(), ^{ + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; + picker.allowsEditing = NO; + picker.mediaTypes = @[(NSString *)kUTTypeImage]; + picker.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:picker animated:YES completion:nil]; + }); +} + +- (void)videoSelectionAction:(UIButton *)sender { + dispatch_async(dispatch_get_main_queue(), ^{ + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; + picker.allowsEditing = NO; + picker.mediaTypes = @[(NSString *)kUTTypeMovie]; + picker.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:picker animated:YES completion:nil]; + }); +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:NO completion:nil]; + if (self.mediaCallBack) { + self.mediaCallBack(info); + [self.navigationController popViewControllerAnimated:YES]; + } else { + NSString *mediaType = info[UIImagePickerControllerMediaType]; + if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + // 图片处理 + image = [image fu_processedImage]; + [self pushToImageRender:image]; + } else { + // 获取视频地址 + [FUUtility requestVideoURLFromInfo:info resultHandler:^(NSURL * _Nonnull videoURL) { + [self pushToVideoRender:videoURL]; + }]; + } + } +} + +- (void)pushToImageRender:(UIImage *)image { + dispatch_async(dispatch_get_main_queue(), ^{ + FUImageRenderViewController *controller; + switch (self.viewModel.module) { + case FUModuleBeauty:{ + controller = [[FUBeautyImageRenderViewController alloc] initWithViewModel:[[FUBeautyImageRenderViewModel alloc] initWithImage:image]]; + } + break; + case FUModuleMakeup:{ + controller = [[FUMakeupImageRenderViewController alloc] initWithViewModel:[[FUMakeupImageRenderViewModel alloc] initWithImage:image]]; + } + break; + case FUModuleSticker:{ + controller = [[FUStickerImageRenderViewController alloc] initWithViewModel:[[FUStickerImageRenderViewModel alloc] initWithImage:image]]; + } + break; + case FUModuleGreenScreen:{ + controller = [[FUGreenScreenImageRenderViewController alloc] initWithViewModel:[[FUGreenScreenImageRenderViewModel alloc] initWithImage:image]]; + } + break; + default: + break; + } + [self.navigationController pushViewController:controller animated:YES]; + }); +} + +- (void)pushToVideoRender:(NSURL *)videoURL { + dispatch_async(dispatch_get_main_queue(), ^{ + FUVideoRenderViewController *controller; + switch (self.viewModel.module) { + case FUModuleBeauty:{ + controller = [[FUBeautyVideoRenderViewController alloc] initWithViewModel:[[FUBeautyVideoRenderViewModel alloc] initWithVideoURL:videoURL]]; + } + break; + case FUModuleMakeup:{ + controller = [[FUMakeupVideoRenderViewController alloc] initWithViewModel:[[FUMakeupVideoRenderViewModel alloc] initWithVideoURL:videoURL]]; + } + break; + case FUModuleSticker:{ + controller = [[FUStickerVideoRenderViewController alloc] initWithViewModel:[[FUStickerVideoRenderViewModel alloc] initWithVideoURL:videoURL]]; + } + break; + case FUModuleGreenScreen:{ + controller = [[FUGreenScreenVideoRenderViewController alloc] initWithViewModel:[[FUGreenScreenVideoRenderViewModel alloc] initWithVideoURL:videoURL]]; + } + break; + default: + break; + } + [self.navigationController pushViewController:controller animated:YES]; + }); +} + +#pragma mark - Getters + +- (UIButton *)imageSelectionButton { + if (!_imageSelectionButton) { + _imageSelectionButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_imageSelectionButton setImage:[UIImage imageNamed:@"media_picker_image_selection"] forState:UIControlStateNormal]; + [_imageSelectionButton setBackgroundImage:[UIImage imageNamed:@"media_picker_button_background"] forState:UIControlStateNormal]; + [_imageSelectionButton setTitle:FULocalizedString(@"选择图片") forState:UIControlStateNormal]; + [_imageSelectionButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_imageSelectionButton setTitleColor:[UIColor colorWithWhite:1 alpha:0.6] forState:UIControlStateHighlighted]; + [_imageSelectionButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -5)]; + [_imageSelectionButton setImageEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)]; + [_imageSelectionButton addTarget:self action:@selector(imageSelectionAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _imageSelectionButton; +} + +- (UIButton *)videoSelectionButton { + if (!_videoSelectionButton) { + _videoSelectionButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_videoSelectionButton setImage:[UIImage imageNamed:@"media_picker_video_selection"] forState:UIControlStateNormal]; + [_videoSelectionButton setBackgroundImage:[UIImage imageNamed:@"media_picker_button_background"] forState:UIControlStateNormal]; + [_videoSelectionButton setTitle:FULocalizedString(@"选择视频") forState:UIControlStateNormal]; + [_videoSelectionButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_videoSelectionButton setTitleColor:[UIColor colorWithWhite:1 alpha:0.6] forState:UIControlStateHighlighted]; + [_videoSelectionButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -5)]; + [_videoSelectionButton setImageEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)]; + [_videoSelectionButton addTarget:self action:@selector(videoSelectionAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _videoSelectionButton; +} + +- (UILabel *)messageLabel { + if (!_messageLabel) { + _messageLabel = [[UILabel alloc] init]; + _messageLabel.textColor = [UIColor whiteColor]; + _messageLabel.font = [UIFont systemFontOfSize:17]; + _messageLabel.text = FULocalizedString(@"请从相册中选择图片或视频"); + } + return _messageLabel; +} + +#pragma mark - Overriding + +- (BOOL)prefersStatusBarHidden { + return NO; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +@end diff --git a/FULiveDemo/MediaPicker/ViewModel/FUMediaPickerViewModel.h b/FULiveDemo/MediaPicker/ViewModel/FUMediaPickerViewModel.h new file mode 100644 index 00000000..3817fb13 --- /dev/null +++ b/FULiveDemo/MediaPicker/ViewModel/FUMediaPickerViewModel.h @@ -0,0 +1,20 @@ +// +// FUMediaPickerViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMediaPickerViewModel : NSObject + +@property (nonatomic, assign, readonly) FUModule module; + +- (instancetype)initWithModule:(FUModule)module; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/MediaPicker/ViewModel/FUMediaPickerViewModel.m b/FULiveDemo/MediaPicker/ViewModel/FUMediaPickerViewModel.m new file mode 100644 index 00000000..6113606c --- /dev/null +++ b/FULiveDemo/MediaPicker/ViewModel/FUMediaPickerViewModel.m @@ -0,0 +1,26 @@ +// +// FUMediaPickerViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FUMediaPickerViewModel.h" + +@interface FUMediaPickerViewModel () + +@property (nonatomic, assign) FUModule module; + +@end + +@implementation FUMediaPickerViewModel + +- (instancetype)initWithModule:(FUModule)module { + self = [super init]; + if (self) { + self.module = module; + } + return self; +} + +@end diff --git a/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.h b/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.h index 10a0731a..bfa312d7 100644 --- a/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.h +++ b/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.h @@ -6,11 +6,12 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import "FUBaseViewController.h" +#import "FURenderViewController.h" +#import "FUARMaskViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUARMaskViewController : FUBaseViewController +@interface FUARMaskViewController : FURenderViewController @end diff --git a/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.m b/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.m index f8f6673a..9ae9ecf9 100644 --- a/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.m +++ b/FULiveDemo/Modules/ARMask/ViewController/FUARMaskViewController.m @@ -13,32 +13,29 @@ @interface FUARMaskViewController () @property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUARMaskViewModel *viewModel; + +@property (nonatomic, strong, readonly) FUARMaskViewModel *viewModel; @end @implementation FUARMaskViewController +@dynamic viewModel; + - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.itemsView]; [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } + make.leading.trailing.equalTo(self.view); + make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(84)); }]; self.itemsView.items = self.viewModel.maskItems; self.itemsView.selectedIndex = 1; - [self.viewModel loadItem:self.viewModel.maskItems[1] completion:nil]; - - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; } - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { @@ -61,11 +58,4 @@ - (FUItemsView *)itemsView { return _itemsView; } -- (FUARMaskViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUARMaskViewModel alloc] init]; - } - return _viewModel; -} - @end diff --git a/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.h b/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.h index fb3fb3b5..6828d271 100644 --- a/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.h +++ b/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.h @@ -6,13 +6,13 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import +#import "FURenderViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUARMaskViewModel : NSObject +@interface FUARMaskViewModel : FURenderViewModel -@property (nonatomic, copy) NSArray *maskItems; +@property (nonatomic, copy, readonly) NSArray *maskItems; - (void)loadItem:(NSString *)item completion:(nullable void(^)(void))completion; diff --git a/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.m b/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.m index 55fc45bb..85874e07 100644 --- a/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.m +++ b/FULiveDemo/Modules/ARMask/ViewModel/FUARMaskViewModel.m @@ -10,7 +10,9 @@ @interface FUARMaskViewModel () -@property (nonatomic, strong) FUSticker *currentSticker; +@property (nonatomic, copy) NSArray *maskItems; + +@property (nonatomic, strong) FUSticker *currentItem; @end @@ -22,24 +24,30 @@ - (void)loadItem:(NSString *)item completion:(void (^)(void))completion { } NSString *path = [[NSBundle mainBundle] pathForResource:item ofType:@"bundle"]; FUSticker *sticker = [FUSticker itemWithPath:path name:@"FUARMask"]; - if (!self.currentSticker) { + if (!self.currentItem) { [[FURenderKit shareRenderKit].stickerContainer addSticker:sticker completion:completion]; } else { - [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentSticker withSticker:sticker completion:completion]; + [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentItem withSticker:sticker completion:completion]; } - self.currentSticker = sticker; + self.currentItem = sticker; } - (void)releaseItem { [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; - self.currentSticker = nil; + self.currentItem = nil; } - (NSArray *)maskItems { if (!_maskItems) { - _maskItems = @[@"resetItem", @"bluebird", @"lanhudie", @"fenhudie", @"tiger_huang", @"tiger_bai", @"baozi", @"tiger", @"xiongmao"]; + _maskItems = @[@"reset_item", @"bluebird", @"lanhudie", @"fenhudie", @"tiger_huang", @"tiger_bai", @"baozi", @"tiger", @"xiongmao"]; } return _maskItems; } +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleARMask; +} + @end diff --git a/FULiveDemo/Modules/Animoji/Manager/FUAnimationFilterManager.h b/FULiveDemo/Modules/Animoji/Manager/FUAnimationFilterManager.h deleted file mode 100644 index e800eafd..00000000 --- a/FULiveDemo/Modules/Animoji/Manager/FUAnimationFilterManager.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// FUAnimationFilterManager.h -// FULiveDemo -// -// Created by Chen on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import "FUStickerProtocol.h" -#import -NS_ASSUME_NONNULL_BEGIN - -@interface FUAnimationFilterManager : FUMetaManager - -@property (nonatomic, strong, nullable) FUComicFilter *comicFilter; - -@property (nonatomic, copy) NSArray *comicFilterItems; - -- (void)loadItem:(NSString *)itemName - type:(int)type - completion:(void (^)(BOOL))completion; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Animoji/Manager/FUAnimationFilterManager.m b/FULiveDemo/Modules/Animoji/Manager/FUAnimationFilterManager.m deleted file mode 100644 index e336d65b..00000000 --- a/FULiveDemo/Modules/Animoji/Manager/FUAnimationFilterManager.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// FUAnimationFilterManager.m -// FULiveDemo -// -// Created by Chen on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUAnimationFilterManager.h" - - -@implementation FUAnimationFilterManager -@synthesize selectedItem; - -- (instancetype)init { - self = [super init]; - if (self) { - self.comicFilter.style = -1; - [self loadItem]; - } - return self; -} - -- (void)loadItem:(NSString *)itemName - type:(int)type - completion:(void (^)(BOOL))completion { - self.selectedItem = itemName; - if (itemName != nil && ![itemName isEqual: @"resetItem"]) { - if (!_comicFilter) { - [self loadItem]; - } - self.comicFilter.style = type; - if (completion) { - completion(YES); - } - } else { - [self releaseItem]; - if (completion) { - completion(NO); - } - } -} - -- (void)loadItem { - [FURenderKit shareRenderKit].comicFilter = self.comicFilter; -} - -- (void)releaseItem { - [FURenderKit shareRenderKit].comicFilter = nil; - _comicFilter = nil; -} - -- (FUComicFilter *)comicFilter { - if (!_comicFilter) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"fuzzytoonfilter" ofType:@"bundle"]; - _comicFilter = [[FUComicFilter alloc] initWithPath:path name:@"fuzzytoonfilter"]; - } - return _comicFilter; -} - -- (NSArray *)comicFilterItems { - if (!_comicFilterItems) { - _comicFilterItems = @[@"resetItem", @"fuzzytoonfilter1", @"fuzzytoonfilter2", @"fuzzytoonfilter3", @"fuzzytoonfilter4", @"fuzzytoonfilter5", @"fuzzytoonfilter6", @"fuzzytoonfilter7", @"fuzzytoonfilter8"]; - } - return _comicFilterItems; -} - -@end diff --git a/FULiveDemo/Modules/Animoji/Manager/FUAnimojiManager.h b/FULiveDemo/Modules/Animoji/Manager/FUAnimojiManager.h deleted file mode 100644 index aee8528d..00000000 --- a/FULiveDemo/Modules/Animoji/Manager/FUAnimojiManager.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// FUAnimojiManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import "FUStickerProtocol.h" -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUAnimojiManager : FUMetaManager - -@property (nonatomic, strong) FUAnimoji * _Nullable animoji; - -@property (nonatomic, copy) NSArray *animojiItems; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Animoji/Manager/FUAnimojiManager.m b/FULiveDemo/Modules/Animoji/Manager/FUAnimojiManager.m deleted file mode 100644 index c18c40b5..00000000 --- a/FULiveDemo/Modules/Animoji/Manager/FUAnimojiManager.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// FUAnimojiManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUAnimojiManager.h" - -@implementation FUAnimojiManager -@synthesize selectedItem; - -- (instancetype)init { - self = [super init]; - if (self) { - [self loadAntiAliasing]; - } - return self; -} - -//加载抗锯齿道具 -- (void)loadAntiAliasing { - NSString *path = [[NSBundle mainBundle] pathForResource:@"fxaa" ofType:@"bundle"]; - [FURenderKit shareRenderKit].antiAliasing = [[FUItem alloc] initWithPath:path name:@"antiAliasing"]; -} - -- (void)loadItem:(NSString *)itemName - completion:(void (^)(BOOL))completion { - self.selectedItem = itemName; - if (itemName != nil && ![itemName isEqual: @"resetItem"]) { - [self loadItem]; - if (completion) { - completion(YES); - } - } else { - [self releaseItem]; - if (completion) { - completion(NO); - } - } -} - -- (void)loadItem { - NSString *itemName = self.selectedItem; - NSString *path = [[NSBundle mainBundle] pathForResource:itemName ofType:@"bundle"]; - FUAnimoji *newItem = [[FUAnimoji alloc] initWithPath:path name:@"animoji"]; - [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.animoji withSticker:newItem completion:nil]; - self.animoji = newItem; -} - -- (void)releaseItem { - [[FURenderKit shareRenderKit].stickerContainer removeSticker:self.animoji completion:nil];; - _animoji = nil; -} - -- (NSArray *)animojiItems { - if (!_animojiItems) { - _animojiItems = @[@"resetItem", @"cartoon_princess_Animoji", @"qgirl_Animoji", @"kaola_Animoji", @"wuxia_Animoji", @"baihu_Animoji", @"frog_Animoji", @"huangya_Animoji", @"hetun_Animoji", @"douniuquan_Animoji", @"hashiqi_Animoji", @"baimao_Animoji", @"kuloutou_Animoji"]; - } - return _animojiItems; -} - -@end diff --git a/FULiveDemo/Modules/Animoji/Model/FUComicFilterModel.h b/FULiveDemo/Modules/Animoji/Model/FUComicFilterModel.h new file mode 100644 index 00000000..a5957745 --- /dev/null +++ b/FULiveDemo/Modules/Animoji/Model/FUComicFilterModel.h @@ -0,0 +1,20 @@ +// +// FUComicFilterModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/27. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUComicFilterModel : NSObject + +@property (nonatomic, copy) NSString *icon; +@property (nonatomic, assign) FUComicFilterStyle style; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Animoji/Model/FUComicFilterModel.m b/FULiveDemo/Modules/Animoji/Model/FUComicFilterModel.m new file mode 100644 index 00000000..e896cfc8 --- /dev/null +++ b/FULiveDemo/Modules/Animoji/Model/FUComicFilterModel.m @@ -0,0 +1,12 @@ +// +// FUComicFilterModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/27. +// + +#import "FUComicFilterModel.h" + +@implementation FUComicFilterModel + +@end diff --git a/FULiveDemo/Modules/Animoji/VC/FUAnimojiController.h b/FULiveDemo/Modules/Animoji/VC/FUAnimojiController.h deleted file mode 100644 index d76c442c..00000000 --- a/FULiveDemo/Modules/Animoji/VC/FUAnimojiController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// FUAnimojiController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUAnimojiController : FUBaseViewController -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Animoji/VC/FUAnimojiController.m b/FULiveDemo/Modules/Animoji/VC/FUAnimojiController.m deleted file mode 100644 index 485443fc..00000000 --- a/FULiveDemo/Modules/Animoji/VC/FUAnimojiController.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// FUAnimojiController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAnimojiController.h" -#import "FUAnimojiManager.h" -#import "FUAnimationFilterManager.h" - -#import - -@interface FUAnimojiController () -@property (strong,nonatomic) NSString *selAnmoji; -@property (strong,nonatomic) NSString *selComic; -@property (strong, nonatomic) FUItemsView *itemsView; -/* 动漫滤镜分栏*/ -@property (strong, nonatomic) FUSegmentBar *segmentBarView; - -@property (strong, nonatomic) FUAnimojiManager *animojManager; - -@property (strong, nonatomic) FUAnimationFilterManager *animationFilterManager; - -@property (nonatomic) NSInteger currentIndex; - -@end - -@implementation FUAnimojiController -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - self.animojManager = [[FUAnimojiManager alloc] init]; - self.animationFilterManager = [[FUAnimationFilterManager alloc] init]; - - _currentIndex = 0; - - [self setupView]; - -} - --(void)setupView{ - self.segmentBarView = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, 200,[UIScreen mainScreen].bounds.size.width, 49) titles:@[@"Animoji",FUNSLocalizedString(@"动漫滤镜",nil)] configuration:[FUSegmentBarConfigurations new]]; - self.segmentBarView.delegate = self; - [self.view addSubview:self.segmentBarView]; - - [self.segmentBarView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(49 + 34); - }else{ - make.height.mas_equalTo(49); - } - - }]; - - /* anmoji View */ - self.itemsView = [[FUItemsView alloc] init]; - self.itemsView.delegate = self; - [self.view addSubview:self.itemsView]; - [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.segmentBarView.mas_top); - make.left.right.equalTo(self.view); - make.height.mas_equalTo(84); - }]; - - self.itemsView.items = self.animojManager.animojiItems; - /* 初始状态 */ - self.selAnmoji = @"resetItem"; - self.selComic = @"resetItem"; - - self.segmentBarView.selectedIndex = _currentIndex; - - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -90) ; -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - [self.itemsView startAnimation]; - if (self.currentIndex == 1){//动漫 - _selComic = itemsView.items[index]; - NSArray *array = [_selComic componentsSeparatedByString:@"toonfilter"]; - int type = [array.lastObject intValue]; - [self.animationFilterManager loadItem:_selComic type:[self comicStyleIndex:type] completion:^(BOOL flag) { - [self.itemsView stopAnimation]; - }]; - }else{//anmoji - _selAnmoji = itemsView.items[index];; - [self.animojManager loadItem:_selAnmoji completion:^(BOOL finished) { - [self.itemsView stopAnimation]; - }]; - } -} - -#pragma mark - FUSegmentBarDelegate - -- (void)segmentBar:(FUSegmentBar *)segmentsView didSelectItemAtIndex:(NSUInteger)index { - if (index == 0) { - self.itemsView.items = self.animojManager.animojiItems; - self.itemsView.selectedIndex = [self.animojManager.animojiItems indexOfObject:self.selAnmoji]; - }else{ - self.itemsView.items = self.animationFilterManager.comicFilterItems; - self.itemsView.selectedIndex = [self.animationFilterManager.comicFilterItems indexOfObject:self.selComic]; - } - self.currentIndex = index; - NSLog(@"选中---%lu",(unsigned long)index); -} - -#pragma mark - 动漫滤镜顺序 --(int)comicStyleIndex:(NSInteger)index{ - switch (index) { - case 1: - return 0; - break; - case 2: - return 2; - break; - case 3: - return 1; - break; - default: - return (int)index - 1; - break; - } - return 0; -} - - -@end diff --git a/FULiveDemo/Modules/Animoji/ViewController/FUAnimojiViewController.h b/FULiveDemo/Modules/Animoji/ViewController/FUAnimojiViewController.h new file mode 100644 index 00000000..d204d745 --- /dev/null +++ b/FULiveDemo/Modules/Animoji/ViewController/FUAnimojiViewController.h @@ -0,0 +1,18 @@ +// +// FUAnimojiViewController.h +// FULiveDemo +// +// Created by 孙慕 on 2019/1/31. +// Copyright © 2019年 FaceUnity. All rights reserved. +// + +#import "FURenderViewController.h" +#import "FUAnimojiViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUAnimojiViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Animoji/ViewController/FUAnimojiViewController.m b/FULiveDemo/Modules/Animoji/ViewController/FUAnimojiViewController.m new file mode 100644 index 00000000..21a5fd1b --- /dev/null +++ b/FULiveDemo/Modules/Animoji/ViewController/FUAnimojiViewController.m @@ -0,0 +1,88 @@ +// +// FUAnimojiViewController.m +// FULiveDemo +// +// Created by 孙慕 on 2019/1/31. +// Copyright © 2019年 FaceUnity. All rights reserved. +// + +#import "FUAnimojiViewController.h" + +@interface FUAnimojiViewController () + +@property (strong, nonatomic) FUItemsView *itemsView; +/* 动漫滤镜分栏*/ +@property (strong, nonatomic) FUSegmentBar *segmentBarView; + +@property (nonatomic, strong, readonly) FUAnimojiViewModel *viewModel; + +@end + +@implementation FUAnimojiViewController + +@dynamic viewModel; + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.view addSubview:self.segmentBarView]; + [self.view addSubview:self.itemsView]; + + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(133) + 10 animated:NO]; +} + +#pragma mark - FUItemsViewDelegate + +- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { + [self.itemsView startAnimation]; + if (self.segmentBarView.selectedIndex == 1){ + // 动漫滤镜 + [self.viewModel loadComicFilterAtIndex:index completion:^{ + [self.itemsView stopAnimation]; + }]; + } else { + //anmoji + [self.viewModel loadAnimojiAtIndex:index completion:^{ + [self.itemsView stopAnimation]; + }]; + } +} + +#pragma mark - FUSegmentBarDelegate + +- (void)segmentBar:(FUSegmentBar *)segmentsView didSelectItemAtIndex:(NSUInteger)index { + if (index == self.viewModel.currentIndex) { + return; + } + self.viewModel.currentIndex = index; + if (index == 0) { + self.itemsView.items = self.viewModel.animojiItems; + self.itemsView.selectedIndex = self.viewModel.selectedAnimojiIndex; + }else{ + self.itemsView.items = self.viewModel.comicFilterIcons; + self.itemsView.selectedIndex = self.viewModel.selectedComicFilterIndex; + } +} + +#pragma mark - Getters + +- (FUSegmentBar *)segmentBarView { + if (!_segmentBarView) { + _segmentBarView = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(49.f), CGRectGetWidth(self.view.bounds), FUHeightIncludeBottomSafeArea(49.f)) titles:@[FULocalizedString(@"Animoji"), FULocalizedString(@"动漫滤镜")] configuration:[FUSegmentBarConfigurations new]]; + _segmentBarView.delegate = self; + _segmentBarView.selectedIndex = 0; + } + return _segmentBarView; +} + +- (FUItemsView *)itemsView { + if (!_itemsView) { + _itemsView = [[FUItemsView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(49.f) - 84, CGRectGetWidth(self.view.bounds), 84)]; + _itemsView.delegate = self; + _itemsView.items = self.viewModel.animojiItems; + _itemsView.selectedIndex = 0; + } + return _itemsView; +} + +@end diff --git a/FULiveDemo/Modules/Animoji/ViewModel/FUAnimojiViewModel.h b/FULiveDemo/Modules/Animoji/ViewModel/FUAnimojiViewModel.h new file mode 100644 index 00000000..e3d9a089 --- /dev/null +++ b/FULiveDemo/Modules/Animoji/ViewModel/FUAnimojiViewModel.h @@ -0,0 +1,34 @@ +// +// FUAnimojiViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/4. +// + +#import "FURenderViewModel.h" + +@class FUComicFilterModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUAnimojiViewModel : FURenderViewModel + +@property (nonatomic, copy, readonly) NSArray *animojiItems; + +@property (nonatomic, copy, readonly) NSArray *comicFilterItems; + +@property (nonatomic, copy, readonly) NSArray *comicFilterIcons; + +@property (nonatomic, assign, readonly) NSInteger selectedAnimojiIndex; + +@property (nonatomic, assign, readonly) NSInteger selectedComicFilterIndex; +/// 当前特效视图索引 +@property (nonatomic, assign) NSInteger currentIndex; + +- (void)loadAnimojiAtIndex:(NSInteger)index completion:(nullable void (^)(void))complection; + +- (void)loadComicFilterAtIndex:(NSInteger)index completion:(nullable void (^)(void))complection; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Animoji/ViewModel/FUAnimojiViewModel.m b/FULiveDemo/Modules/Animoji/ViewModel/FUAnimojiViewModel.m new file mode 100644 index 00000000..999e0dc8 --- /dev/null +++ b/FULiveDemo/Modules/Animoji/ViewModel/FUAnimojiViewModel.m @@ -0,0 +1,129 @@ +// +// FUAnimojiViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/4. +// + +#import "FUAnimojiViewModel.h" +#import "FUComicFilterModel.h" + +@interface FUAnimojiViewModel () + +@property (nonatomic, copy) NSArray *animojiItems; + +@property (nonatomic, copy) NSArray *comicFilterItems; + +@property (nonatomic, copy) NSArray *comicFilterIcons; + +@property (nonatomic, strong) FUAnimoji *currentAnimoji; + +@end + +@implementation FUAnimojiViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + // 默认加载抗锯齿道具 + NSString *path = [[NSBundle mainBundle] pathForResource:@"fxaa" ofType:@"bundle"]; + [FURenderKit shareRenderKit].antiAliasing = [[FUItem alloc] initWithPath:path name:@"antiAliasing"]; + } + return self; +} + +- (void)loadAnimojiAtIndex:(NSInteger)index completion:(void (^)(void))completion { + if (index < 0 || index >= self.animojiItems.count) { + return; + } + _selectedAnimojiIndex = index; + if (index == 0) { + // 取消 + [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; + self.currentAnimoji = nil; + !completion ?: completion(); + } else { + NSString *path = [[NSBundle mainBundle] pathForResource:self.animojiItems[index] ofType:@"bundle"]; + FUAnimoji *animoji = [[FUAnimoji alloc] initWithPath:path name:@"animoji"]; + if (self.currentAnimoji) { + [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentAnimoji withSticker:animoji completion:^{ + !completion ?: completion(); + self.currentAnimoji = animoji; + }]; + } else { + [[FURenderKit shareRenderKit].stickerContainer addSticker:animoji completion:^{ + !completion ?: completion(); + self.currentAnimoji = animoji; + }]; + } + } +} + +- (void)loadComicFilterAtIndex:(NSInteger)index completion:(void (^)(void))complection { + if (index < 0 || index >= self.comicFilterItems.count) { + return; + } + _selectedComicFilterIndex = index; + if (index == 0) { + [FURenderKit shareRenderKit].comicFilter = nil; + !complection ?: complection(); + } else { + if (![FURenderKit shareRenderKit].comicFilter) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"fuzzytoonfilter" ofType:@"bundle"]; + FUComicFilter *comicFilter = [[FUComicFilter alloc] initWithPath:path name:@"fuzzytoonfilter"]; + [FURenderKit shareRenderKit].comicFilter = comicFilter; + } + [FURenderKit shareRenderKit].comicFilter.style = self.comicFilterItems[index].style; + !complection ?: complection(); + } +} + +- (NSArray *)animojiItems { + if (!_animojiItems) { + _animojiItems = @[ + @"reset_item", + @"cartoon_princess_Animoji", + @"qgirl_Animoji", + @"kaola_Animoji", + @"wuxia_Animoji", + @"baihu_Animoji", + @"frog_Animoji", + @"huangya_Animoji", + @"hetun_Animoji", + @"douniuquan_Animoji", + @"hashiqi_Animoji", + @"baimao_Animoji", + @"kuloutou_Animoji" + ]; + } + return _animojiItems; +} + +- (NSArray *)comicFilterItems { + if (!_comicFilterItems) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"comic_filter" ofType:@"json"]; + NSData *data = [NSData dataWithContentsOfFile:path]; + NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + _comicFilterItems = [FUComicFilterModel mj_objectArrayWithKeyValuesArray:jsonArray]; + } + return _comicFilterItems; +} + +- (NSArray *)comicFilterIcons { + if (!_comicFilterIcons) { + NSMutableArray *temp = [NSMutableArray array]; + for (FUComicFilterModel *model in self.comicFilterItems) { + [temp addObject:model.icon]; + } + _comicFilterIcons = [temp copy]; + } + return _comicFilterIcons; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleAnimoji; +} + +@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Base.lproj/FUAPIDemoBar.xib b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Base.lproj/FUAPIDemoBar.xib deleted file mode 100644 index d7eefcd7..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Base.lproj/FUAPIDemoBar.xib +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUAPIDemoBar.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUAPIDemoBar.h deleted file mode 100644 index ab79950b..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUAPIDemoBar.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// FUDemoBar.h -// FUAPIDemoBar -// -// Created by L on 2018/6/26. -// Copyright © 2018年 L. All rights reserved. -// - -#import -#import "FUBeautyModel.h" - -@protocol FUAPIDemoBarDelegate - -// 滤镜值变化 -- (void)filterValueChange:(FUBeautyModel *)param; -// 美肤、美型值变化 -- (void)beautyParamValueChange:(FUBeautyModel *)param; -// 显示上半部分View --(void)showTopView:(BOOL)shown; -// 重新设置默认值 --(void)resetDefaultValue:(NSUInteger)type; -// 美型是否全部是默认参数 -- (BOOL)isDefaultShapeValue; -// 美肤是否全部是默认参数 -- (BOOL)isDefaultSkinValue; - -@optional - -// 显示提示语 -- (void)filterShowMessage:(NSString *)message; - -@end - -@interface FUAPIDemoBar : UIView - -@property (nonatomic, assign) idmDelegate ; - -// 上半部分 -@property (weak, nonatomic) IBOutlet UIView *topView; - -@property (weak, nonatomic) IBOutlet UIView *bottomView; - -// 上半部是否显示 -@property (nonatomic, assign) BOOL isTopViewShow; - - --(void)reloadSkinView:(NSArray *)skinParams; - --(void)reloadShapView:(NSArray *)shapParams; - --(void)reloadFilterView:(NSArray *)filterParams; - --(void)reloadStyleView:(NSArray *)styleParams defaultStyle:(FUBeautyModel *)selStyle; - -/// 切换底部功能时更新界面 -/// @param beautyItem 美颜类型 -- (void)updateSubviews:(FUBeautyDefine)beautyItem; - -// 关闭上半部分 -- (void)hiddenTopViewWithAnimation:(BOOL)animation; - -// 设置默认滤镜 -- (void)setDefaultFilter:(FUBeautyModel *)filter; - -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUAPIDemoBar.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUAPIDemoBar.m deleted file mode 100644 index 5dddf59c..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUAPIDemoBar.m +++ /dev/null @@ -1,494 +0,0 @@ -// -// FUDemoBar.m -// FUAPIDemoBar -// -// Created by L on 2018/6/26. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUAPIDemoBar.h" -#import "FUFilterView.h" -#import "FUBeautyView.h" -#import "SVProgressHUD.h" - -#import "UIView+FU.h" - - -@interface FUAPIDemoBar () - - -@property (weak, nonatomic) IBOutlet UIButton *skinBtn; -@property (weak, nonatomic) IBOutlet UIButton *shapeBtn; -@property (weak, nonatomic) IBOutlet UIButton *beautyFilterBtn; -@property (weak, nonatomic) IBOutlet UIButton *mStyleBtn; - -// 滤镜页 -@property (weak, nonatomic) IBOutlet FUFilterView *filterView; -// 美颜滤镜页 -@property (weak, nonatomic) IBOutlet FUFilterView *beautyFilterView; - -@property (weak, nonatomic) IBOutlet FUSlider *beautySlider; -// 美型页 -@property (weak, nonatomic) IBOutlet FUBeautyView *shapeView; -// 美肤页 -@property (weak, nonatomic) IBOutlet FUBeautyView *skinView; -// 风格推荐 -@property (weak, nonatomic) IBOutlet FUBeautyView *mStyleView; - -@property (weak, nonatomic) IBOutlet FUSquareButton *recoverButton; - -@property (weak, nonatomic) IBOutlet UIView *sqLine; - -/* 当前选中参数 */ -@property (strong, nonatomic) FUBeautyModel *seletedParam; - -@property (assign, nonatomic) BOOL isEnble; - -@end - -@implementation FUAPIDemoBar - -#pragma mark - Life cycle --(instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - NSBundle *bundle = [NSBundle bundleForClass:[FUAPIDemoBar class]]; - self = (FUAPIDemoBar *)[bundle loadNibNamed:@"FUAPIDemoBar" owner:self options:nil].firstObject; - } - return self ; -} - --(void)awakeFromNib { - [super awakeFromNib]; - - self.filterView.type = FUFilterViewTypeFilter ; - self.filterView.mDelegate = self ; - - self.beautyFilterView.type = FUFilterViewTypeBeautyFilter ; - self.beautyFilterView.mDelegate = self ; - - self.shapeView.mDelegate = self; - - self.skinView.mDelegate = self; - - self.mStyleView.mDelegate = self; - - [self.skinBtn setTitle:FUNSLocalizedString(@"美肤", nil) forState:UIControlStateNormal]; - [self.shapeBtn setTitle:FUNSLocalizedString(@"美型", nil) forState:UIControlStateNormal]; - [self.beautyFilterBtn setTitle:FUNSLocalizedString(@"滤镜", nil) forState:UIControlStateNormal]; - [self.mStyleBtn setTitle:FUNSLocalizedString(@"presets", nil) forState:UIControlStateNormal]; - [self.recoverButton setTitle:FUNSLocalizedString(@"恢复", nil) forState:UIControlStateNormal]; - - self.skinBtn.tag = 101; - self.shapeBtn.tag = 102; - self.beautyFilterBtn.tag = 103 ; - self.mStyleBtn.tag = 104 ; - - _isEnble = YES; -} - --(void)layoutSubviews{ - [super layoutSubviews]; -} - - -#pragma mark - Event response -/// 底部功能选择 -- (IBAction)bottomBtnsSelected:(UIButton *)sender { - if (!_isEnble && sender != self.mStyleBtn) { - if(sender == _skinBtn){ - [self showMessage:[NSString stringWithFormat:FUNSLocalizedString(@"To use, cancel Presets first.", nil),FUNSLocalizedString(@"美肤", nil)]]; - } - if (sender == _shapeBtn) { - [self showMessage:[NSString stringWithFormat:FUNSLocalizedString(@"To use, cancel Presets first.", nil),FUNSLocalizedString(@"美型", nil)]]; - } - if (sender == _beautyFilterBtn) { - [self showMessage:[NSString stringWithFormat:FUNSLocalizedString(@"To use, cancel Presets first.", nil),FUNSLocalizedString(@"滤镜", nil)]]; - } - return; - } - if (sender.selected) { - sender.selected = NO ; - [self hiddenTopViewWithAnimation:YES]; - return ; - } - self.skinBtn.selected = NO; - self.shapeBtn.selected = NO; - self.beautyFilterBtn.selected = NO; - self.mStyleBtn.selected = NO; - - sender.selected = YES; - - self.skinView.hidden = !self.skinBtn.selected ; - self.shapeView.hidden = !self.shapeBtn.selected; - self.beautyFilterView.hidden = !self.beautyFilterBtn.selected ; - self.mStyleView.hidden = !self.mStyleBtn.selected; - - [self resetRecoverButtonStatus:YES]; - if (self.shapeBtn.selected) { - /* 修改当前UI */ - [self resetRecoverButtonStatus:NO]; - [self sliderChangeEnd:nil]; - NSInteger selectedIndex = self.shapeView.selectedIndex; - self.beautySlider.hidden = selectedIndex < 0 ; - - if (selectedIndex >= 0) { - FUBeautyModel *modle = self.shapeView.dataArray[selectedIndex]; - _seletedParam = modle; - self.beautySlider.value = modle.mValue / modle.ratio; - } - } - - if (self.skinBtn.selected) { - NSInteger selectedIndex = self.skinView.selectedIndex; - [self resetRecoverButtonStatus:NO]; - [self sliderChangeEnd:nil]; - self.beautySlider.hidden = selectedIndex < 0 ; - - if (selectedIndex >= 0) { - FUBeautyModel *modle = self.skinView.dataArray[selectedIndex]; - _seletedParam = modle; - self.beautySlider.value = modle.mValue / modle.ratio; - } - } - - // slider 是否显示 - if (self.beautyFilterBtn.selected) { - - NSInteger selectedIndex = self.beautyFilterView.selectedIndex ; - self.beautySlider.bidirection = NO; - self.beautySlider.hidden = selectedIndex <= 0; - if (selectedIndex >= 0) { - FUBeautyModel *modle = self.beautyFilterView.filters[selectedIndex]; - _seletedParam = modle; - self.beautySlider.value = modle.mValue / modle.ratio; - } - } - - if (self.mStyleBtn.selected) { - self.beautySlider.hidden = YES; - } - - [self showTopViewWithAnimation:self.topView.isHidden]; - [self updateSliderType:_seletedParam]; - -} - -/// 滑条滑动 -- (IBAction)filterSliderValueChange:(FUSlider *)sender { - _seletedParam.mValue = sender.value * _seletedParam.ratio; //slider 是归一化过后的所以要乘以比例 - if (_beautyFilterBtn.selected) { - if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) { - [_mDelegate filterValueChange:_seletedParam]; - } - }else{ - if (_mDelegate && [_mDelegate respondsToSelector:@selector(beautyParamValueChange:)]) { - [_mDelegate beautyParamValueChange:_seletedParam]; - } - } -} - -/// 滑条停止滑动 -- (IBAction)sliderChangeEnd:(FUSlider *)sender { - if (self.shapeBtn.selected) { - if ([self.mDelegate respondsToSelector:@selector(isDefaultShapeValue)]) { - if ([self.mDelegate isDefaultShapeValue]) { - self.recoverButton.alpha = 0.7; - } else { - self.recoverButton.alpha = 1.0; - } - } - [self.shapeView reloadData]; - } - - if (self.skinBtn.selected) { - if ([self.mDelegate respondsToSelector:@selector(isDefaultSkinValue)]) { - if ([self.mDelegate isDefaultSkinValue]) { - self.recoverButton.alpha = 0.7; - } else { - self.recoverButton.alpha = 1.0; - } - } - [self.skinView reloadData]; - } - - [self.filterView reloadData]; - -} - -/// 恢复按钮点击 -- (IBAction)recoverAction:(id)sender { - if ([self.mDelegate respondsToSelector:@selector(isDefaultShapeValue)]) { - if ([self.mDelegate isDefaultShapeValue] && self.shapeBtn.selected) { - return ; - } - } - - if ([self.mDelegate respondsToSelector:@selector(isDefaultSkinValue)]) { - if ([self.mDelegate isDefaultSkinValue] && self.skinBtn.selected) { - return ; - } - } - [self recoverBeautyDefaultValue]; -} - -#pragma mark - Instance methods --(void)reloadSkinView:(NSArray *)skinParams{ - _skinView.dataArray = skinParams; - if (_skinView.selectedIndex >= 0) { - FUBeautyModel *model = skinParams[_skinView.selectedIndex]; - if (model) { - _beautySlider.hidden = NO; - _beautySlider.value = model.mValue / model.ratio; - } - } - [_skinView reloadData]; -} - --(void)reloadShapView:(NSArray *)shapParams{ - _shapeView.dataArray = shapParams; - if (_shapeView.selectedIndex >= 0) { - FUBeautyModel *model = shapParams[_shapeView.selectedIndex]; - if (model) { - _beautySlider.hidden = NO; - _beautySlider.value = model.mValue / model.ratio; - } - } - [_shapeView reloadData]; -} - --(void)reloadFilterView:(NSArray *)filterParams{ - _beautyFilterView.filters = filterParams; - [_beautyFilterView reloadData]; -} - --(void)reloadStyleView:(NSArray *)styleParams defaultStyle:(FUBeautyModel *)selStyle { - _mStyleView.dataArray = styleParams; - if (selStyle) { - int indexa = (int)[styleParams indexOfObject:selStyle]; - [self.mStyleView setSelectedIndex:indexa]; - [self changeBottomView]; - }else{ - [self.mStyleView setSelectedIndex:0]; - } - [_mStyleView reloadData]; -} - -- (void)updateSubviews:(FUBeautyDefine)beautyItem { - switch (beautyItem) { - case FUBeautyDefineSkin:{ - [self bottomBtnsSelected:self.skinBtn]; - } - break; - case FUBeautyDefineShape:{ - [self bottomBtnsSelected:self.shapeBtn]; - } - break; - case FUBeautyDefineFilter:{ - [self bottomBtnsSelected:self.beautyFilterBtn]; - } - break; - case FUBeautyDefineStyle:{ - [self bottomBtnsSelected:self.mStyleBtn]; - } - break; - } -} - --(void)setDefaultFilter:(FUBeautyModel *)filter{ - [self.beautyFilterView setDefaultFilter:filter]; -} - --(BOOL)isTopViewShow { - return !self.topView.hidden ; -} - - -#pragma mark - Private methods - -/// 更新Slider类型 --(void)updateSliderType:(FUBeautyModel *)param{ - if (param.iSStyle101) { - self.beautySlider.bidirection = YES; - }else{ - self.beautySlider.bidirection = NO; - } -} - - -// 开启上半部分 -- (void)showTopViewWithAnimation:(BOOL)animation { - - if (animation) { - self.topView.alpha = 0.0 ; - self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ; - self.topView.hidden = NO ; - [UIView animateWithDuration:0.35 animations:^{ - self.topView.transform = CGAffineTransformIdentity ; - self.topView.alpha = 1.0 ; - }]; - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) { - [self.mDelegate showTopView:YES]; - } - }else { - self.topView.transform = CGAffineTransformIdentity ; - self.topView.alpha = 1.0 ; - } -} - -// 关闭上半部分 --(void)hiddenTopViewWithAnimation:(BOOL)animation { - - if (self.topView.hidden) { - return ; - } - if (animation) { - self.topView.alpha = 1.0 ; - self.topView.transform = CGAffineTransformIdentity ; - self.topView.hidden = NO ; - [UIView animateWithDuration:0.35 animations:^{ - self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ; - self.topView.alpha = 0.0 ; - }completion:^(BOOL finished) { - self.topView.hidden = YES ; - self.topView.alpha = 1.0 ; - self.topView.transform = CGAffineTransformIdentity ; - - self.skinBtn.selected = NO ; - self.shapeBtn.selected = NO ; - self.beautyFilterBtn.selected = NO ; - self.mStyleBtn.selected = NO; - }]; - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) { - [self.mDelegate showTopView:NO]; - } - }else { - - self.topView.hidden = YES ; - self.topView.alpha = 1.0 ; - self.topView.transform = CGAffineTransformIdentity ; - } -} - -/// 设置恢复按钮隐藏状态 --(void)resetRecoverButtonStatus:(BOOL)hidden{ - _recoverButton.hidden = hidden; - _sqLine.hidden = hidden; -} - -/// 恢复美肤/美型效果方法 --(void)recoverBeautyDefaultValue{ - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:FUNSLocalizedString(@"是否将所有参数恢复到默认值",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - }]; - [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - self.recoverButton.alpha = 0.7; - if ([self.mDelegate respondsToSelector:@selector(resetDefaultValue:)]) { - if (self.skinBtn.selected) { - //数据修改逻辑不清晰:view和FUManager 都持有同一个model/models 引用,部分数据修改在view,部分在FUManager,这样结果是如果有数据出错不好排查。所以还是建议把数据修改逻辑集中在FUManager里面,然后回调形式刷新model/models - [self.mDelegate resetDefaultValue:FUBeautyDefineSkin]; - [self.skinView reloadData]; - - if (!self.beautySlider.hidden && self.skinView.selectedIndex >= 0) { - FUBeautyModel *param = self.skinView.dataArray[self.skinView.selectedIndex]; - self.beautySlider.value = param.mValue / param.ratio; - } - } - if (self.shapeBtn.selected) { - [self.mDelegate resetDefaultValue:FUBeautyDefineShape]; - [self.shapeView reloadData]; - - if (!self.beautySlider.hidden && self.shapeView.selectedIndex >= 0) { - FUBeautyModel *param = self.shapeView.dataArray[self.shapeView.selectedIndex]; - self.beautySlider.value = param.mValue / param.ratio; - } - - } - } - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [[self fu_targetViewController] presentViewController:alertCon animated:YES completion:^{ - }]; -} - -/// 更新底部功能按钮状态 -- (void)changeBottomView { - if (_mStyleView.selectedIndex == 0) { - self.shapeBtn.alpha = 1.0; - self.skinBtn.alpha = 1.0; - self.beautyFilterBtn.alpha = 1.0; - _isEnble = YES; - }else{ - self.shapeBtn.alpha = 0.6; - self.skinBtn.alpha = 0.6; - self.beautyFilterBtn.alpha = 0.6; - _isEnble = NO; - } -} - -- (void)showMessage:(NSString *)string{ - //设置需要显示的文字 - [SVProgressHUD showImage:[UIImage imageNamed:@"wrt424erte2342rx"] status:string]; - [SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative]; - [SVProgressHUD setForegroundColor:[UIColor whiteColor]]; - [SVProgressHUD setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.74]]; - [SVProgressHUD setBackgroundLayerColor:[UIColor clearColor]]; - [SVProgressHUD setCornerRadius:5]; - [SVProgressHUD dismissWithDelay:1.5]; -} - -#pragma mark - FUFilterViewDelegate -// 开启滤镜 --(void)filterViewDidSelectedFilter:(FUBeautyModel *)param{ - _seletedParam = param; - if (_beautyFilterView.selectedIndex > 0) { - self.beautySlider.value = param.mValue / param.ratio; - self.beautySlider.hidden = NO; - }else{ - self.beautySlider.hidden = YES; - } - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(filterShowMessage:)]) { - [self.mDelegate filterShowMessage:param.mTitle]; - } - [self updateSliderType:_seletedParam]; - - if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) { - [_mDelegate filterValueChange:_seletedParam]; - } -} - -#pragma mark - FUBeautyViewDelegate --(void)beautyCollectionView:(FUBeautyView *)beautyView didSelectedParam:(FUBeautyModel *)param{ - if (beautyView == _mStyleView) { - // 推荐风格 - self.beautySlider.hidden = YES; - if (_mDelegate && [_mDelegate respondsToSelector:@selector(beautyParamValueChange:)]) { - [_mDelegate beautyParamValueChange:param]; - } - [self changeBottomView]; - return; - } - // 选择其他效果 - _seletedParam = param; - self.beautySlider.value = param.mValue / param.ratio; - self.beautySlider.hidden = NO; - [self updateSliderType:_seletedParam]; -} - -#pragma mark - 截断点击事件方法!!!!!! --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - -} - -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyEditView.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyEditView.h deleted file mode 100644 index 56df80fb..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyEditView.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FUBeautyEditView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/11/6. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBeautyEditView : UIView - - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyEditView.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyEditView.m deleted file mode 100644 index 0805ae68..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyEditView.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// FUBeautyEditView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/11/6. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBeautyEditView.h" -#import "FUBottomColletionView.h" -#import "FUBeautyView.h" - -@interface FUBeautyEditView() -/* 美肤View */ -@property (strong, nonatomic) FUBeautyView *colorCollectionView; -// -//@property (strong, nonatomic) FUAvatarContentColletionView *avatarContentColletionView; -/* 底部选择器 */ -@property (strong, nonatomic) FUBottomColletionView *bottomColletionView; - -@end -@implementation FUBeautyEditView - - - -- (id)initWithFrame:(CGRect)frame withData:(NSArray *)dataArray{ - self = [super initWithFrame:frame]; - if (self){ - - - _bottomColletionView = [[FUBottomColletionView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(frame) - 49,[UIScreen mainScreen].bounds.size.width, 49)]; - _bottomColletionView.delegate = self; - _bottomColletionView.backgroundColor = [UIColor whiteColor]; - _bottomColletionView.dataArray = @[@"美肤",@"美型",@"滤镜"]; - [self addSubview:_bottomColletionView]; - } - - return self; -} - - -#pragma mark - FUBottomColletionViewDelegate --(void)bottomColletionDidSelectedIndex:(NSInteger)index{ - -} - -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyParam.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyParam.h deleted file mode 100644 index 33edc994..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyParam.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUBeautyParam.h -// FULiveDemo -// -// Created by 孙慕 on 2020/1/7. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBeautyParam : NSObject -@property (nonatomic,copy)NSString *mTitle; - -@property (nonatomic,copy)NSString *mParam; - -@property (nonatomic,assign) double mValue; - -/* 双向的参数 0.5是原始值*/ -@property (nonatomic,assign) BOOL iSStyle101; - -/* 默认值用于,设置默认和恢复 */ -@property (nonatomic,assign)float defaultValue; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyParam.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyParam.m deleted file mode 100644 index 71c21795..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyParam.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// FUBeautyParam.m -// FULiveDemo -// -// Created by 孙慕 on 2020/1/7. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUBeautyParam.h" - -@implementation FUBeautyParam - -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.h deleted file mode 100644 index 74590568..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// FUBeautyView.h -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -#import -#import "FUDemoBarDefine.h" -#import "FUBeautyModel.h" - -@class FUBeautyView; -@protocol FUBeautyViewDelegate - -- (void)beautyCollectionView:(FUBeautyView *)beautyView didSelectedParam:(FUBeautyModel *)param; - -@end - -@interface FUBeautyView : UICollectionView - -@property (nonatomic, assign) idmDelegate ; - -@property (nonatomic, assign) NSInteger selectedIndex ; - -@property (nonatomic, strong) NSArray *dataArray; - - -@end - - -@interface FUBeautyCell : UICollectionViewCell -@property (nonatomic, strong) UIImageView *imageView ; -@property (nonatomic, strong) UILabel *titleLabel ; -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m deleted file mode 100644 index 7123b564..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBeautyView.m +++ /dev/null @@ -1,129 +0,0 @@ -// -// FUBeautyView.m -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUBeautyView.h" -#import "UIImage+demobar.h" - -@interface FUBeautyView () -@end - -@implementation FUBeautyView - --(void)awakeFromNib { - [super awakeFromNib]; - - self.backgroundColor = [UIColor clearColor]; - self.delegate = self ; - self.dataSource = self ; - [self registerClass:[FUBeautyCell class] forCellWithReuseIdentifier:@"FUBeautyCell"]; - - _selectedIndex = -1; -} - - -#pragma mark ---- UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.dataArray.count ; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - FUBeautyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"FUBeautyCell" forIndexPath:indexPath]; - FUBeautyModel *model = self.dataArray[indexPath.row] ; - NSString *imageName; - UIColor *titleColor; - if (model.disabled) { - // 功能被禁用的情况 - imageName = [model.mTitle stringByAppendingString:@"-0"]; - titleColor = [UIColor whiteColor]; - } else { - BOOL opened = YES; - if (model.iSStyle101) { - opened = fabs(model.mValue - 0.5) > 0.01 ? YES : NO; - }else{ - opened = fabs(model.mValue - 0) > 0.01 ? YES : NO; - } - BOOL selected = _selectedIndex == indexPath.row ; - if (selected) { - imageName = opened ? [model.mTitle stringByAppendingString:@"-3"] : [model.mTitle stringByAppendingString:@"-2"]; - }else { - imageName = opened ? [model.mTitle stringByAppendingString:@"-1"] : [model.mTitle stringByAppendingString:@"-0"] ; - } - titleColor = _selectedIndex == indexPath.row ? [UIColor colorWithHexColorString:@"5EC7FE"] : [UIColor whiteColor]; - - } - /* icon 未找到, 尝试处理 多语言图片 */ - UIImage *imageIcon = [UIImage imageWithName:imageName]; - if (imageIcon == nil) { - imageIcon = [UIImage localizedImageWithName:imageName countrySimple:nil]; - } - cell.imageView.image = imageIcon; - cell.titleLabel.text = FUNSLocalizedString(model.mTitle, nil); - cell.titleLabel.textColor = titleColor; - cell.imageView.alpha = model.disabled ? 0.7 : 1; - cell.titleLabel.alpha = model.disabled ? 0.7 : 1; - return cell; -} - -#pragma mark ---- UICollectionViewDelegate - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { - FUBeautyModel *model = _dataArray[indexPath.row]; - if (model.disabled) { - NSString *tipString = [NSString stringWithFormat:FUNSLocalizedString(@"该功能只支持在高端机使用", nil), FUNSLocalizedString(model.mTitle, nil)]; - [FUTipHUD showTips:tipString dismissWithDelay:1]; - return NO; - } - return YES; -} - --(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - FUBeautyModel *model = _dataArray[indexPath.row]; - if (_selectedIndex == indexPath.row) { - return; - } - _selectedIndex = indexPath.row; - [self reloadData]; - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(beautyCollectionView:didSelectedParam:)]) { - [self.mDelegate beautyCollectionView:self didSelectedParam:model]; - } -} - -#pragma mark ---- UICollectionViewDelegateFlowLayout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { - - return UIEdgeInsetsMake(16, 16, 6, 16) ; -} - -@end - - -@implementation FUBeautyCell - --(instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.width)]; - self.imageView.layer.masksToBounds = YES ; - self.imageView.layer.cornerRadius = frame.size.width / 2.0 ; - [self addSubview:self.imageView]; - - self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(-10, frame.size.width + 2, frame.size.width + 20, frame.size.height - frame.size.width - 2)]; - self.titleLabel.textAlignment = NSTextAlignmentCenter ; - self.titleLabel.textColor = [UIColor whiteColor]; - self.titleLabel.font = [UIFont systemFontOfSize:10]; - self.titleLabel.adjustsFontSizeToFitWidth = YES; - - [self addSubview:self.titleLabel ]; - } - return self ; -} - -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBottomColletionView.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBottomColletionView.h deleted file mode 100644 index 55d0adda..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBottomColletionView.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// FUBottomColletionView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/11/6. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import - - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUBottomColletionViewDelegate - -@optional - -- (void)bottomColletionDidSelectedIndex:(NSInteger)index; -@end - - - -@interface FUBottomBottomCell : UICollectionViewCell - -@property (strong, nonatomic) UILabel *botlabel; - -@property (assign, nonatomic) BOOL isSel; - - -@end - -@interface FUBottomColletionView : UIView - -@property (nonatomic, strong) NSArray *dataArray; - -@property (assign, nonatomic) BOOL isSel; - -@property (nonatomic, assign) iddelegate ; - -@property (assign, nonatomic,readonly) NSInteger selIndex; -@end - -NS_ASSUME_NONNULL_END - diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBottomColletionView.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBottomColletionView.m deleted file mode 100644 index 2233241d..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUBottomColletionView.m +++ /dev/null @@ -1,110 +0,0 @@ -// -// FUBottomColletionView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/11/6. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBottomColletionView.h" - -#pragma mark - FUBottomBottomCell -@implementation FUBottomBottomCell -- (id)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self){ - - _botlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 60, 20)]; - _botlabel.textAlignment = NSTextAlignmentCenter; - _botlabel.textColor = [UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0]; - _botlabel.font = [UIFont systemFontOfSize:13]; - self.botlabel.center = self.contentView.center; - [self.contentView addSubview:_botlabel]; - } - - return self; -} - --(void)setIsSel:(BOOL)isSel{ - _isSel = isSel; - if (isSel) { - _botlabel.textColor = [UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0]; - }else{ - _botlabel.textColor = [UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0]; - } -} -@end - - -#pragma mark - FUBottomColletionView - -@interface FUBottomColletionView() - -@property (strong, nonatomic) UICollectionView *collection; - -@property (assign, nonatomic) NSInteger selIndex; -@end - -@implementation FUBottomColletionView - -static NSString *cellID = @"bottomCell"; - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self){ - self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(60, 49); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, frame.size.height) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - [_collection registerClass:[FUBottomBottomCell class] forCellWithReuseIdentifier:cellID]; - _collection.backgroundColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - - } - - return self; -} - - --(void)setDataArray:(NSArray*)dataArray{ - _dataArray = dataArray; - [self.collection reloadData]; -} - - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _dataArray.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUBottomBottomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - -// cell.botlabel.text = NSLocalizedString(self.dataArray[indexPath.row].title, nil); - cell.isSel = _selIndex == indexPath.row ? YES:NO; - - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - _selIndex = indexPath.row; - [_collection reloadData]; - if ([self.delegate respondsToSelector:@selector(BottomColletionDidSelectedIndex:)]) { - [self.delegate bottomColletionDidSelectedIndex:_selIndex]; - } -} - -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUDemoBarDefine.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUDemoBarDefine.h deleted file mode 100644 index b976fa94..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUDemoBarDefine.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FUDemoBarDefine.h -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -typedef NS_ENUM(NSInteger, FUFilterViewType) { - FUFilterViewTypeFilter = 1,// 滤镜 - FUFilterViewTypeBeautyFilter = 2,// 美颜滤镜 -}; - -typedef NS_ENUM(NSInteger, FUBeautyViewType) { - FUBeautyViewTypeSkin = 1,// 美肤 - FUBeautyViewTypeShape = 2,// 美型 -}; - diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUFilterView.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUFilterView.h deleted file mode 100644 index be2b8ca9..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUFilterView.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// FUFilterView.h -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -#import -#import "FUDemoBarDefine.h" -#import "FUBeautyModel.h" - - -@protocol FUFilterViewDelegate - -// 开启滤镜 -- (void)filterViewDidSelectedFilter:(FUBeautyModel *)param; - -@end - - -@interface FUFilterView : UICollectionView - -@property (nonatomic, assign) FUFilterViewType type ; - -@property (nonatomic, assign) idmDelegate ; - -@property (nonatomic, assign) NSInteger selectedIndex ; - -@property (nonatomic, strong) NSArray *filters; - --(void)setDefaultFilter:(FUBeautyModel *)filter; - -@end - -@interface FUFilterCell : UICollectionViewCell - -@property (nonatomic, strong) UIImageView *imageView ; -@property (nonatomic, strong) UILabel *titleLabel; -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUFilterView.m b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUFilterView.m deleted file mode 100644 index 2cfaacb5..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/FUFilterView.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// FUFilterView.m -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUFilterView.h" -#import "UIImage+demobar.h" - -@interface FUFilterView () - -@end - -@implementation FUFilterView - --(void)awakeFromNib{ - [super awakeFromNib]; - - self.backgroundColor = [UIColor clearColor]; - self.delegate = self; - self.dataSource = self ; - [self registerClass:[FUFilterCell class] forCellWithReuseIdentifier:@"FUFilterCell"]; - - _selectedIndex = 2 ; -} - --(void)setType:(FUFilterViewType)type { - _type = type ; - [self reloadData]; -} - --(void)setSelectedIndex:(NSInteger)selectedIndex { - _selectedIndex = selectedIndex ; - [self reloadData]; -} - --(void)setDefaultFilter:(FUBeautyModel *)filter{ - for (int i = 0; i < _filters.count; i ++) { - FUBeautyModel *model = _filters[i]; - if (model == filter) { - self.selectedIndex = i; - return; - } - } -} - - -#pragma mark ---- UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.filters.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUFilterCell *cell = (FUFilterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"FUFilterCell" forIndexPath:indexPath]; - - FUBeautyModel *model = _filters[indexPath.row]; - - cell.titleLabel.text = FUNSLocalizedString(model.mTitle,nil); - cell.titleLabel.textColor = [UIColor whiteColor]; - cell.imageView.image = [UIImage imageWithName:model.strValue]; - - cell.imageView.layer.borderWidth = 0.0 ; - cell.imageView.layer.borderColor = [UIColor clearColor].CGColor; - - if (_selectedIndex == indexPath.row) { - - cell.imageView.layer.borderWidth = 2.0 ; - cell.imageView.layer.borderColor = [UIColor colorWithHexColorString:@"5EC7FE"].CGColor; - cell.titleLabel.textColor = [UIColor colorWithHexColorString:@"5EC7FE"]; - } - - return cell ; -} - -#pragma mark ---- UICollectionViewDelegate - --(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - _selectedIndex = indexPath.row ; - [self reloadData]; - - FUBeautyModel *model = _filters[indexPath.row]; - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(filterViewDidSelectedFilter:)]) { - [self.mDelegate filterViewDidSelectedFilter:model]; - } -} - -#pragma mark ---- UICollectionViewDelegateFlowLayout - - -@end - - -@implementation FUFilterCell - --(instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 54, 54)]; - self.imageView.layer.masksToBounds = YES ; - self.imageView.layer.cornerRadius = 3.0 ; - self.imageView.layer.borderWidth = 0.0 ; - self.imageView.layer.borderColor = [UIColor clearColor].CGColor ; - [self addSubview:self.imageView]; - - self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(-8, 54, 70, frame.size.height - 54)]; - self.titleLabel.textAlignment = NSTextAlignmentCenter ; - self.titleLabel.font = [UIFont systemFontOfSize:10]; - [self addSubview:self.titleLabel]; - } - return self ; -} -@end diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/Contents.json deleted file mode 100644 index da4a164c..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/Contents.json deleted file mode 100644 index 710c81a3..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/Contents.json deleted file mode 100644 index c34f9f7a..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/Contents.json deleted file mode 100644 index 335a982b..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/Contents.json deleted file mode 100644 index 1e34aa04..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/Contents.json deleted file mode 100644 index bb671b83..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/Contents.json deleted file mode 100644 index 4ef0c5a9..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/Contents.json deleted file mode 100644 index bd8f8b0b..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/bailiang7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "bailiang7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "bailiang7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "bailiang7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/Contents.json deleted file mode 100644 index 53be7d1c..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/Contents.json deleted file mode 100644 index e851c5d9..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/Contents.json deleted file mode 100644 index 56d3a228..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/Contents.json deleted file mode 100644 index f84775cf..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/Contents.json deleted file mode 100644 index ad7a8466..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/Contents.json deleted file mode 100644 index d5a2def7..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/Contents.json deleted file mode 100644 index 58c0cb16..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/Contents.json deleted file mode 100644 index bf726c11..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/fennen8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fennen8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "fennen8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "fennen8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/Contents.json deleted file mode 100644 index 3ee67b23..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/Contents.json deleted file mode 100644 index 8bc40902..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing10.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing10.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing10@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing10@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/Contents.json deleted file mode 100644 index 6d3f24c6..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing11.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_gexing11.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_gexing11@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_gexing11@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/Contents.json deleted file mode 100644 index fe4e5fc1..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/Contents.json deleted file mode 100644 index 2e07f174..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/Contents.json deleted file mode 100644 index aaa62617..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/Contents.json deleted file mode 100644 index bf61702f..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/Contents.json deleted file mode 100644 index 62b00a52..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/Contents.json deleted file mode 100644 index f39c78f1..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/Contents.json deleted file mode 100644 index 447e01db..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/Contents.json deleted file mode 100644 index 767d54fa..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/gexing9.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "gexing9.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "gexing9@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "gexing9@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/Contents.json deleted file mode 100644 index f75c9915..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "heibai1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "heibai1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "heibai1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/Contents.json deleted file mode 100644 index 8256e9cc..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "heibai2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "heibai2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "heibai2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/Contents.json deleted file mode 100644 index dc179f81..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "heibai3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "heibai3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "heibai3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/Contents.json deleted file mode 100644 index a50c4a0e..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "heibai4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "heibai4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "heibai4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/Contents.json deleted file mode 100644 index bab164e8..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/heibai5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "heibai5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "heibai5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "heibai5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/Contents.json deleted file mode 100644 index 53447638..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/Contents.json deleted file mode 100644 index bf88038d..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao10.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao10.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao10@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao10@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/Contents.json deleted file mode 100644 index 012796e1..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao11.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao11.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao11@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao11@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/Contents.json deleted file mode 100644 index 114bff05..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/Contents.json deleted file mode 100644 index b7ec7417..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/Contents.json deleted file mode 100644 index 8540499e..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/Contents.json deleted file mode 100644 index 7b702004..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/Contents.json deleted file mode 100644 index 8c46dc86..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/Contents.json deleted file mode 100644 index c6a88811..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/Contents.json deleted file mode 100644 index ce8aa209..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/Contents.json deleted file mode 100644 index 2470282d..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/lengsediao9.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "lengsediao9.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao9@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "lengsediao9@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/Contents.json deleted file mode 100644 index dcc36b60..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/Contents.json deleted file mode 100644 index 60452f60..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/Contents.json deleted file mode 100644 index 96a81ac4..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/Contents.json deleted file mode 100644 index 96bdcc94..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/Contents.json deleted file mode 100644 index ec719599..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/Contents.json deleted file mode 100644 index eba08364..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/Contents.json deleted file mode 100644 index f78a1857..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/Contents.json deleted file mode 100644 index 0306c182..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/mitao8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_peach8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_peach8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/Contents.json deleted file mode 100644 index 20143672..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "nuansediao1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "nuansediao1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "nuansediao1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/Contents.json deleted file mode 100644 index 6a7b54b8..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "nuansediao2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "nuansediao2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "nuansediao2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/Contents.json deleted file mode 100644 index b8dde5f5..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/nuansediao3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "nuansediao3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "nuansediao3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "nuansediao3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/Contents.json deleted file mode 100644 index 2f43e0b9..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/origin.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "cancel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "cancel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "cancel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/Contents.json deleted file mode 100644 index c12aa4e3..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "xiaoqingxin1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/Contents.json deleted file mode 100644 index 888b3b2f..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "xiaoqingxin2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/Contents.json deleted file mode 100644 index 66b96215..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "xiaoqingxin3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/Contents.json deleted file mode 100644 index 4271e10e..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "xiaoqingxin4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/Contents.json deleted file mode 100644 index c97be2e9..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "xiaoqingxin5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/Contents.json deleted file mode 100644 index 1320c61f..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/xiaoqingxin6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "xiaoqingxin6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "xiaoqingxin6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/Contents.json deleted file mode 100644 index e9de8de6..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/Contents.json deleted file mode 100644 index e9d4bb6c..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/Contents.json deleted file mode 100644 index 02b7981d..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/Contents.json deleted file mode 100644 index 25e45ee1..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/Contents.json deleted file mode 100644 index 6270204a..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/Contents.json deleted file mode 100644 index deea51aa..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/Contents.json deleted file mode 100644 index 7d6cce0e..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/Contents.json deleted file mode 100644 index 7167171c..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/zhiganhui8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "zhiganhui8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "zhiganhui8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/Contents.json deleted file mode 100644 index 23d163a7..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/Contents.json deleted file mode 100644 index 3898c188..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/Contents.json deleted file mode 100644 index 09a10389..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/Contents.json deleted file mode 100644 index a81e7482..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_4.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_4@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_4@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/Contents.json deleted file mode 100644 index c99fcd6a..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran5.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_5.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_5@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/Contents.json deleted file mode 100644 index ab4d1188..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran6.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_6.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_6@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_6@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/Contents.json deleted file mode 100644 index 408abfb8..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran7.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_7.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_7@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_7@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/Contents.json deleted file mode 100644 index 0d3ccecc..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/FilterIcon/ziran8.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_natural_8.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_8@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_natural_8@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/Contents.json deleted file mode 100644 index 8a5b84ab..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_return.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_return@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_return@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return.png deleted file mode 100644 index a59ee7a4..00000000 Binary files a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return.png and /dev/null differ diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return@2x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return@2x.png deleted file mode 100644 index 8091c077..00000000 Binary files a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return@2x.png and /dev/null differ diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return@3x.png b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return@3x.png deleted file mode 100644 index 53c083ee..00000000 Binary files a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/face_shape_back.imageset/demo_icon_return@3x.png and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/Contents.json" deleted file mode 100644 index 261d1346..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "v脸-0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "v脸-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "v脸-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/Contents.json" deleted file mode 100644 index b01837e3..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "v脸-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "v脸-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "v脸-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/Contents.json" deleted file mode 100644 index 5953869a..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "v脸-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "v脸-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "v脸-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/Contents.json" deleted file mode 100644 index 6d82cd75..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/v\350\204\270-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "v脸-3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "v脸-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "v脸-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/Contents.json" deleted file mode 100644 index 69b65317..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "下巴-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "下巴-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/Contents.json" deleted file mode 100644 index bf67e086..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "下巴-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "下巴-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/Contents.json" deleted file mode 100644 index 339f273a..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "下巴-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "下巴-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/Contents.json" deleted file mode 100644 index 92124bc9..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\344\270\213\345\267\264-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "下巴-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "下巴-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/Contents.json" deleted file mode 100644 index e29080e4..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/Contents.json" deleted file mode 100644 index 3503ff1c..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/Contents.json" deleted file mode 100644 index d68ae9b5..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/Contents.json" deleted file mode 100644 index 0b8ae66a..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\230\264\345\236\213-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "嘴型-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/Contents.json" deleted file mode 100644 index 8ee4f4c0..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/Contents.json" deleted file mode 100644 index 3a821607..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/Contents.json" deleted file mode 100644 index 45870e53..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/Contents.json" deleted file mode 100644 index 799b3134..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\234\206\347\234\274-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_round_eye_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/Contents.json" deleted file mode 100644 index 058d6cc0..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "大眼-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "大眼-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/Contents.json" deleted file mode 100644 index fb5aa5e2..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "大眼-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "大眼-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/Contents.json" deleted file mode 100644 index 12efe1f1..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "大眼-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "大眼-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/Contents.json" deleted file mode 100644 index 4db9bade..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\244\247\347\234\274-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "大眼-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "大眼-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/Contents.json" deleted file mode 100644 index a66b84ea..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_goddess_nor.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_goddess_nor@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_goddess_nor@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor.png" deleted file mode 100644 index f7e7366f..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor@2x.png" deleted file mode 100644 index 58b5534e..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor@3x.png" deleted file mode 100644 index d688d55a..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-0.imageset/demo_icon_goddess_nor@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/Contents.json" deleted file mode 100644 index 22139f26..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_goddess_sel.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_goddess_sel@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_goddess_sel@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel.png" deleted file mode 100644 index 3314bdec..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel@2x.png" deleted file mode 100644 index 3c0b2743..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel@3x.png" deleted file mode 100644 index 446ac240..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-1.imageset/demo_icon_goddess_sel@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/Contents.json" deleted file mode 100644 index bffa611b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_goddess_sel_open.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_goddess_sel_open@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_goddess_sel_open@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open.png" deleted file mode 100644 index 87d34d98..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open@2x.png" deleted file mode 100644 index 2495b80d..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open@3x.png" deleted file mode 100644 index 86a8d9bf..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\245\263\347\245\236-2.imageset/demo_icon_goddess_sel_open@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/Contents.json" deleted file mode 100644 index 4dff4e59..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "鹅蛋脸-0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/Contents.json" deleted file mode 100644 index b70799ab..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "鹅蛋脸-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/Contents.json" deleted file mode 100644 index 5adbd6ee..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "鹅蛋脸-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/Contents.json" deleted file mode 100644 index 996f05dc..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\345\260\217\350\204\270-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "鹅蛋脸-3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "鹅蛋脸-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/Contents.json" deleted file mode 100644 index 1d1f6401..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\346\201\242\345\244\215-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "恢复-0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "恢复-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "恢复-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/Contents.json" deleted file mode 100644 index 117bedf6..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/Contents.json" deleted file mode 100644 index 7e874d73..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/Contents.json" deleted file mode 100644 index 018fa8ba..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "瘦脸-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/Contents.json" deleted file mode 100644 index c9d26f36..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\350\204\270-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦脸-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/Contents.json" deleted file mode 100644 index 6e61bc55..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/Contents.json" deleted file mode 100644 index 115bf0f8..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/Contents.json" deleted file mode 100644 index ee1f6ec1..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/Contents.json" deleted file mode 100644 index 4b1bd45c..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\230\246\351\274\273-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "瘦鼻-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/Contents.json" deleted file mode 100644 index 82fe2f1b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "小脸-0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "小脸-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "小脸-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/Contents.json" deleted file mode 100644 index d2644eb9..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "小脸-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "小脸-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "小脸-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/Contents.json" deleted file mode 100644 index d1a3986b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "小脸-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "小脸-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "小脸-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/Contents.json" deleted file mode 100644 index ec497863..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\237\255\350\204\270-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "小脸-3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "小脸-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "小脸-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/Contents.json" deleted file mode 100644 index 40352b99..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "窄脸-0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/Contents.json" deleted file mode 100644 index 3b9d21df..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "窄脸-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/Contents.json" deleted file mode 100644 index d48915cb..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "窄脸-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/Contents.json" deleted file mode 100644 index 4bc35392..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\347\252\204\350\204\270-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "窄脸-3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "窄脸-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/Contents.json" deleted file mode 100644 index 457898e1..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "脸型-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "脸型-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/\350\204\270\345\236\213-0@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/\350\204\270\345\236\213-0@2x.png" deleted file mode 100644 index eac03fa8..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/\350\204\270\345\236\213-0@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/\350\204\270\345\236\213-0@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/\350\204\270\345\236\213-0@3x.png" deleted file mode 100644 index 1b585308..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-0.imageset/\350\204\270\345\236\213-0@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/Contents.json" deleted file mode 100644 index 0954de42..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_face_shape_nor_open.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_face_shape_nor_open@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_face_shape_nor_open@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open.png" deleted file mode 100644 index 75943707..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open@2x.png" deleted file mode 100644 index 94276944..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open@3x.png" deleted file mode 100644 index e18c0d6d..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\204\270\345\236\213-1.imageset/demo_icon_face_shape_nor_open@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/Contents.json" deleted file mode 100644 index 25a0a672..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_natural_nor.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_natural_nor@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_natural_nor@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor.png" deleted file mode 100644 index 7ce0f497..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor@2x.png" deleted file mode 100644 index e5c71c7b..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor@3x.png" deleted file mode 100644 index 8b7fc7fe..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-0.imageset/demo_icon_natural_nor@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/Contents.json" deleted file mode 100644 index 626dacfa..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_natural_sel.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_natural_sel@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_natural_sel@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel.png" deleted file mode 100644 index 77de62af..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel@2x.png" deleted file mode 100644 index cb633747..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel@3x.png" deleted file mode 100644 index 77ea529f..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-1.imageset/demo_icon_natural_sel@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/Contents.json" deleted file mode 100644 index 1ab8b4d3..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "demo_icon_natural_sel_open.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demo_icon_natural_sel_open@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "demo_icon_natural_sel_open@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open.png" deleted file mode 100644 index 8c8d943c..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open@2x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open@2x.png" deleted file mode 100644 index c5462b0b..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open@2x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open@3x.png" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open@3x.png" deleted file mode 100644 index 80257f3a..00000000 Binary files "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\350\207\252\347\204\266-2.imageset/demo_icon_natural_sel_open@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/Contents.json" deleted file mode 100644 index a595d152..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "额头-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "额头-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/Contents.json" deleted file mode 100644 index 8e0f81c9..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "额头-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "额头-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/Contents.json" deleted file mode 100644 index b416c32a..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "额头-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "额头-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/Contents.json" deleted file mode 100644 index 7b7bf203..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/shapView/\351\242\235\345\244\264-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "额头-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "额头-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/Contents.json" deleted file mode 100644 index 05b39441..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/Contents.json" deleted file mode 100644 index 6ff2e40d..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/Contents.json" deleted file mode 100644 index 53f44f0d..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/Contents.json" deleted file mode 100644 index b4e238ef..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\344\272\256\347\234\274-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "亮眼-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/Contents.json" deleted file mode 100644 index 52268c5f..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/Contents.json" deleted file mode 100644 index bbbb3a9a..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/Contents.json" deleted file mode 100644 index ab8109c9..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/Contents.json" deleted file mode 100644 index b411f15e..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\346\263\225\344\273\244\347\272\271-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_wrinkle_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/Contents.json" deleted file mode 100644 index d72b9cb9..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/Contents.json" deleted file mode 100644 index 5331ee98..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/Contents.json" deleted file mode 100644 index e18aba35..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/Contents.json" deleted file mode 100644 index f7e7b359..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\216\273\351\273\221\347\234\274\345\234\210-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_dark_circles_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/Contents.json" deleted file mode 100644 index e08ed693..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/Contents.json" deleted file mode 100644 index 2be3e06b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/Contents.json" deleted file mode 100644 index 066b1fff..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/Contents.json" deleted file mode 100644 index 78452c76..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\274\200\347\234\274\350\247\222-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_open_eyes_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/Contents.json" deleted file mode 100644 index bb186a8e..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/Contents.json" deleted file mode 100644 index 6fd87165..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/Contents.json" deleted file mode 100644 index dcc5b60a..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/Contents.json" deleted file mode 100644 index a7cda61c..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\345\276\256\347\254\221\345\230\264\350\247\222-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_smile_mouth_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/Contents.json" deleted file mode 100644 index 682ebea6..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/Contents.json" deleted file mode 100644 index d4fdf379..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/Contents.json" deleted file mode 100644 index 3a97e0f7..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/Contents.json" deleted file mode 100644 index de9d6420..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\344\270\213\351\242\214\351\252\250-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_lower_jaw_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/Contents.json" deleted file mode 100644 index 1dcd0fd4..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/Contents.json" deleted file mode 100644 index efb23a3b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/Contents.json" deleted file mode 100644 index 015e259f..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/Contents.json" deleted file mode 100644 index 8381f206..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\230\246\351\242\247\351\252\250-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_cheekbones_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/Contents.json" deleted file mode 100644 index ba2a109c..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/Contents.json" deleted file mode 100644 index 97a50eaa..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/Contents.json" deleted file mode 100644 index cdfe1ca3..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/Contents.json" deleted file mode 100644 index f3974d9c..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\347\235\233\350\247\222\345\272\246-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_angle_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/Contents.json" deleted file mode 100644 index c2b7e8e4..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/Contents.json" deleted file mode 100644 index 01b846ab..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/Contents.json" deleted file mode 100644 index 67885caf..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/Contents.json" deleted file mode 100644 index 940f045e..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\234\274\350\267\235-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_eye_distance_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/Contents.json" deleted file mode 100644 index 7bf66064..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "磨皮-0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/Contents.json" deleted file mode 100644 index 492ff3a8..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "磨皮-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/Contents.json" deleted file mode 100644 index 13cc6358..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "磨皮-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/Contents.json" deleted file mode 100644 index 9ab6a3cf..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\243\250\347\232\256-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "磨皮-3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "磨皮-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/Contents.json" deleted file mode 100644 index 151f954b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "红润-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "红润-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/Contents.json" deleted file mode 100644 index 55542d9e..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "红润-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "红润-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/Contents.json" deleted file mode 100644 index ca7a11f8..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "红润-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "红润-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/Contents.json" deleted file mode 100644 index f7126d02..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\272\242\346\266\246-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "红润-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "红润-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/Contents.json" deleted file mode 100644 index 8bbfd921..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/Contents.json" deleted file mode 100644 index dd1a5cbe..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/Contents.json" deleted file mode 100644 index 01256b1b..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/Contents.json" deleted file mode 100644 index 4763e001..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\274\251\344\272\272\344\270\255-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_shrinking_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/Contents.json" deleted file mode 100644 index 42dac1cf..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美牙-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美牙-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/Contents.json" deleted file mode 100644 index f367cf71..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美牙-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美牙-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/Contents.json" deleted file mode 100644 index 5c844598..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美牙-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美牙-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/Contents.json" deleted file mode 100644 index 65b6cf16..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\211\231-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美牙-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美牙-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/Contents.json" deleted file mode 100644 index 5eb7a5c9..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-0.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美白-0@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美白-0@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/Contents.json" deleted file mode 100644 index a777d1ae..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-1.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美白-1@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美白-1@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/Contents.json" deleted file mode 100644 index 44d2fdb3..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-2.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美白-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美白-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/Contents.json" deleted file mode 100644 index 7ca3725e..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\347\276\216\347\231\275-3.imageset/Contents.json" +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "美白-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "美白-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/Contents.json" deleted file mode 100644 index b8208b6c..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/Contents.json" deleted file mode 100644 index 82d05ce1..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/Contents.json" deleted file mode 100644 index 9a8c601f..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/Contents.json" deleted file mode 100644 index eac32bcd..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\224\220\345\214\226-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_sharpen_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/Contents.json" deleted file mode 100644 index edebfa03..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-0.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/Contents.json" deleted file mode 100644 index 7a0536bd..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-1.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_nor_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_nor_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_nor_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/Contents.json" deleted file mode 100644 index b3daa568..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-2.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/Contents.json" "b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/Contents.json" deleted file mode 100644 index 09220518..00000000 --- "a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/skin view/\351\225\277\351\274\273-3.imageset/Contents.json" +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_sel_open.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_sel_open@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_proboscis_sel_open@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/Contents.json deleted file mode 100644 index 79b9495c..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_null _nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_null _nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_null _nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/Contents.json deleted file mode 100644 index 47aefbe3..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/None-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_null _sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_null _sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_null _sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/Contents.json deleted file mode 100644 index 76e83deb..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_1_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_1_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_1_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/Contents.json deleted file mode 100644 index 49268907..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style1-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_1_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_1_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_1_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/Contents.json deleted file mode 100644 index f4fc8f59..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_2_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_2_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_2_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/Contents.json deleted file mode 100644 index 4f601bf6..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style2-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_2_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_2_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_2_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/Contents.json deleted file mode 100644 index 8267f6e0..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_3_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_3_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_3_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/Contents.json deleted file mode 100644 index 0409dd13..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style3-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_3_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_3_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_3_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/Contents.json deleted file mode 100644 index cb6b4dce..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_4_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_4_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_4_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/Contents.json deleted file mode 100644 index 8503a1b8..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style4-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_4_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_4_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_4_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/Contents.json deleted file mode 100644 index a7de24be..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_5_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_5_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_5_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/Contents.json deleted file mode 100644 index f1f3d37f..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style5-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_5_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_5_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_5_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/Contents.json deleted file mode 100644 index 531b28f5..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-0.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_6_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_6_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_6_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/Contents.json deleted file mode 100644 index 75c6cac5..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style6-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_6_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_6_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_6_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/Contents.json deleted file mode 100644 index 1cfa7678..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_en.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_en_style_7_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_en_style_7_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_en_style_7_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/Contents.json deleted file mode 100644 index f7c1fc3d..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-0_zh.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_7_nor.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_7_nor@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_7_nor@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/Contents.json deleted file mode 100644 index ec108ece..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_en.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_en_style_7_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_en_style_7_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_en_style_7_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/Contents.json b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/Contents.json deleted file mode 100644 index 4e65beed..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/Media.xcassets/style/Style7-2_zh.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "demo_icon_style_7_sel.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_7_sel@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "demo_icon_style_7_sel@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h deleted file mode 100644 index ae405765..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// UIImage+demobar.h -// FUAPIDemoBar -// -// Created by 刘洋 on 2017/2/16. -// Copyright © 2017年 刘洋. All rights reserved. -// - -#import - - -@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 deleted file mode 100644 index 1fe843cd..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/UIImage+demobar.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// UIImage+demobar.m -// FUAPIDemoBar -// -// Created by 刘洋 on 2017/2/16. -// Copyright © 2017年 刘洋. All rights reserved. -// - -#import "UIImage+demobar.h" -#import "FUAPIDemoBar.h" - -@implementation UIImage (demobar) - -+ (UIImage *)imageWithName:(NSString *)name { - UIImage *image = [UIImage imageNamed:name inBundle:[NSBundle bundleForClass:FUAPIDemoBar.class] compatibleWithTraitCollection:nil]; - if (image == nil) { - image = [UIImage imageNamed: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/FULiveDemo/Modules/Beauty/FUAPIDemoBar/en.lproj/FUDemoBar.strings b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/en.lproj/FUDemoBar.strings deleted file mode 100644 index d25e3513..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/en.lproj/FUDemoBar.strings +++ /dev/null @@ -1,15 +0,0 @@ - -/* Class = "UIButton"; normalTitle = "美颜滤镜"; ObjectID = "0jq-Oa-c5T"; */ -"0jq-Oa-c5T.normalTitle" = "Beauty Filter"; - -/* Class = "UIButton"; normalTitle = "美肤"; ObjectID = "Pt2-fx-Wpc"; */ -"Pt2-fx-Wpc.normalTitle" = "Skin"; - -/* Class = "UIButton"; normalTitle = "滤镜"; ObjectID = "RCj-vX-Kw2"; */ -"RCj-vX-Kw2.normalTitle" = "Filter"; - -/* Class = "UIButton"; normalTitle = "美型"; ObjectID = "UdX-KP-ajT"; */ -"UdX-KP-ajT.normalTitle" = "Style"; - -/* Class = "UIButton"; normalTitle = "贴纸"; ObjectID = "qcS-JC-xSy"; */ -"qcS-JC-xSy.normalTitle" = "Sticker"; diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/en.lproj/Localizable.strings b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/en.lproj/Localizable.strings deleted file mode 100644 index deacd305..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/en.lproj/Localizable.strings +++ /dev/null @@ -1,44 +0,0 @@ -/* - Localizable.strings - FUAPIDemoBar - - Created by L on 2018/7/10. - Copyright © 2018年 刘洋. All rights reserved. -*/ - - -"精准美肤" = "Skin Detect" ; -"清晰磨皮" = "Light Blur" ; -"朦胧磨皮" = "Heavy Blur" ; -"磨皮" = "Blur" ; -"美白" = "Whiten" ; -"红润" = "Ruddy" ; -"亮眼" = "Eye Brighten" ; -"美牙" = "Tooth Whiten" ; - -"脸型" = "Face Shape" ; -"大眼" = "Eye Enlarge" ; -"瘦脸" = "Cheek Thin" ; -"下巴" = "Chin" ; -"额头" = "Forehead" ; -"瘦鼻" = "Nose" ; -"嘴型" = "Mouth" ; - -"原图" = "Origin" ; -"自然" = "Nature" ; -"淡雅" = "Elegant" ; -"粉嫩" = "Pink" ; -"清新" = "Fresh" ; -"红润" = "Ruddy" ; - -"自定义" = "Customize" ; -"默认" = "Default" ; -"女神" = "Fairy" ; -"网红" = "Belle" ; -"自然" = "Nature" ; - - -"精准美肤 开启" = "Skin Detect ON" ; -"精准美肤 关闭" = "Skin Detect OFF" ; -"当前为清晰磨皮模式" = "Light Blur mode" ; -"当前为朦胧磨皮模式" = "Heavy Blur mode" ; diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/zh-Hans.lproj/FUDemoBar.strings b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/zh-Hans.lproj/FUDemoBar.strings deleted file mode 100644 index 4dd6c551..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/zh-Hans.lproj/FUDemoBar.strings +++ /dev/null @@ -1,15 +0,0 @@ - -/* Class = "UIButton"; normalTitle = "美颜滤镜"; ObjectID = "0jq-Oa-c5T"; */ -"0jq-Oa-c5T.normalTitle" = "美颜滤镜"; - -/* Class = "UIButton"; normalTitle = "美肤"; ObjectID = "Pt2-fx-Wpc"; */ -"Pt2-fx-Wpc.normalTitle" = "美肤"; - -/* Class = "UIButton"; normalTitle = "滤镜"; ObjectID = "RCj-vX-Kw2"; */ -"RCj-vX-Kw2.normalTitle" = "滤镜"; - -/* Class = "UIButton"; normalTitle = "美型"; ObjectID = "UdX-KP-ajT"; */ -"UdX-KP-ajT.normalTitle" = "美型"; - -/* Class = "UIButton"; normalTitle = "贴纸"; ObjectID = "qcS-JC-xSy"; */ -"qcS-JC-xSy.normalTitle" = "贴纸"; diff --git a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/zh-Hans.lproj/Localizable.strings b/FULiveDemo/Modules/Beauty/FUAPIDemoBar/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index b8806d17..00000000 --- a/FULiveDemo/Modules/Beauty/FUAPIDemoBar/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,42 +0,0 @@ -/* - Localizable.strings - FUAPIDemoBar - - Created by L on 2018/7/10. - Copyright © 2018年 刘洋. All rights reserved. -*/ -"精准美肤" = "精准美肤" ; -"清晰磨皮" = "清晰磨皮" ; -"朦胧磨皮" = "朦胧磨皮" ; -"磨皮" = "磨皮" ; -"美白" = "美白" ; -"红润" = "红润" ; -"亮眼" = "亮眼" ; -"美牙" = "美牙" ; - -"脸型" = "脸型" ; -"大眼" = "大眼" ; -"瘦脸" = "瘦脸" ; -"下巴" = "下巴" ; -"额头" = "额头" ; -"瘦鼻" = "瘦鼻" ; -"嘴型" = "嘴型" ; - -"原图" = "原图" ; -"自然" = "自然" ; -"淡雅" = "淡雅" ; -"粉嫩" = "粉嫩" ; -"清新" = "清新" ; -"红润" = "红润" ; - -"自定义" = "自定义" ; -"默认" = "默认" ; -"女神" = "女神" ; -"网红" = "网红" ; -"自然" = "自然" ; - - -"精准美肤 开启" = "精准美肤 开启" ; -"精准美肤 关闭" = "精准美肤 关闭" ; -"当前为清晰磨皮模式" = "当前为清晰磨皮模式" ; -"当前为朦胧磨皮模式" = "当前为朦胧磨皮模式" ; diff --git a/FULiveDemo/Modules/Beauty/FUBeautyDefine.h b/FULiveDemo/Modules/Beauty/FUBeautyDefine.h deleted file mode 100644 index 7b10efe7..00000000 --- a/FULiveDemo/Modules/Beauty/FUBeautyDefine.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// FUBeautyDefine.h -// FUSDKDemo -// -// Created by Chen on 2020/11/23. -// Copyright © 2020 liu. All rights reserved. -// - -#ifndef FUBeautyDefine_h -#define FUBeautyDefine_h - -typedef NS_ENUM(NSUInteger, FUBeautyDefine) { - FUBeautyDefineSkin = 0, //美肤 - FUBeautyDefineShape = 1, //美型 - FUBeautyDefineFilter = 2, //滤镜 - FUBeautyDefineStyle = 3 //风格化 -}; - -typedef NS_ENUM(NSUInteger, FUBeautifyShape) { -// FUBeautifyShapeFaceShape, //"face_shape" - FUBeautifyShapeCheekThinning, //"cheek_thinning" - FUBeautifyShapeCheekV, //"cheek_v" - FUBeautifyShapeCheekNarrow, //"cheek_narrow" - FUBeautifyShapeCheekShort, //"cheek_short" - FUBeautifyShapeCheekSmall, //"cheek_small" - FUBeautifyShapeIntensityCheekbones, //"intensity_cheekbones" - FUBeautifyShapeIntensityLowerJaw, //"intensity_lower_jaw" - FUBeautifyShapeEyeEnlarging, //"eye_enlarging" - FUBeautifyShapeEyeCircle, //eye_circle - FUBeautifyShapeIntensityChin, //"intensity_chin" - FUBeautifyShapeIntensityForehead, //"intensity_forehead" - FUBeautifyShapeIntensityNose, //"intensity_nose" - FUBeautifyShapeIntensityMouth, //"intensity_mouth" - FUBeautifyShapeIntensityCanthus, //"intensity_canthus" - FUBeautifyShapeIntensityEyeSpace, //"intensity_eye_space" - FUBeautifyShapeIntensityEyeRotate, //"intensity_eye_rotate" - FUBeautifyShapeIntensityLongNose, //"intensity_long_nose" - FUBeautifyShapeIntensityPhiltrum, //"intensity_philtrum" - FUBeautifyShapeIntensitySmile, //"intensity_smile" - FUBeautifyShapeIntensityBrowHeight, //"intensity_brow_hight" - FUBeautifyShapeIntensityBrowSpace, //"intensity_brow_space" - FUBeautifyShapeMax -}; - -typedef NS_ENUM(NSUInteger, FUBeautifySkin) { - FUBeautifySkinBlurLevel, //"blur_level" - FUBeautifySkinColorLevel, //"color_level" - FUBeautifySkinRedLevel, //"red_level" - FUBeautifySkinSharpen, //"sharpen" - FUBeautifySkinEyeBright, //"eye_bright" - FUBeautifySkinToothWhiten, //"tooth_whiten" - FUBeautifySkinRemovePouchStrength, //"remove_pouch_strength", - FUBeautifySkinRemoveNasolabialFoldsStrength, //"remove_nasolabial_folds_strength" - FUBeautifySkinMax -}; - -typedef NS_ENUM(NSUInteger, FUBeautyStyleType) { - FUBeautyStyleTypeNone = 0, - FUBeautyStyleType1, - FUBeautyStyleType2, - FUBeautyStyleType3, - FUBeautyStyleType4, - FUBeautyStyleType5, - FUBeautyStyleType6, - FUBeautyStyleType7, - - FUBeautyStyleMax -}; - -///// 脸型 -//typedef NS_ENUM(NSUInteger, FUFaceShapeType) { -// FUFaceShapeTypeNatural, // 自然 -// FUFaceShapeTypeGoddess, // 女神 -// FUFaceShapeTypeLong, // 长脸专属 -// FUFaceShapeTypeCircle, // 圆脸专属 -// FUFaceShapeTypeMax -//}; - -#endif /* FUBeautyDefine_h */ diff --git a/FULiveDemo/Modules/Beauty/Model/FUBeautyModel.h b/FULiveDemo/Modules/Beauty/Model/FUBeautyModel.h deleted file mode 100644 index be379139..00000000 --- a/FULiveDemo/Modules/Beauty/Model/FUBeautyModel.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// FUBeautyModel.h -// FULiveDemo -// -// Created by Chen on 2021/2/24. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import -#import "FUBeautyDefine.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBeautyModel : NSObject -@property (nonatomic,copy)NSString *mTitle; - -@property (nonatomic, assign) NSUInteger mParam; - -@property (nonatomic,assign) double mValue; - -@property (nonatomic, strong) NSString *strValue; - -/// 双向的参数 0.5是原始值 -@property (nonatomic,assign) BOOL iSStyle101; - -/// 默认值用于,设置默认和恢复 -@property (nonatomic, assign)float defaultValue; - -/// 参数强度取值比例 进度条因为是归一化 所以要除以ratio -@property (nonatomic, assign) float ratio; - -/// 标识类型 -@property (nonatomic, assign) FUBeautyDefine type; - -/// 是否禁用 -@property (nonatomic, assign) BOOL disabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/Model/FUBeautyModel.m b/FULiveDemo/Modules/Beauty/Model/FUBeautyModel.m deleted file mode 100644 index 568e1528..00000000 --- a/FULiveDemo/Modules/Beauty/Model/FUBeautyModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// FUBeautyModel.m -// FULiveDemo -// -// Created by Chen on 2021/2/24. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBeautyModel.h" - -@implementation FUBeautyModel - -@end diff --git a/FULiveDemo/Modules/Beauty/Model/FUPersistentBeautyModel.h b/FULiveDemo/Modules/Beauty/Model/FUPersistentBeautyModel.h deleted file mode 100644 index 247a7501..00000000 --- a/FULiveDemo/Modules/Beauty/Model/FUPersistentBeautyModel.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUPersistentBeautyModel.h -// FULiveDemo -// -// Created by 项林平 on 2022/6/13. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import - -@class FUBeautyModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUPersistentBeautyModel : NSObject - -@property (nonatomic, copy) NSArray *beautySkins; -@property (nonatomic, copy) NSArray *beautyShapes; -@property (nonatomic, copy) NSArray *beautyFilters; -/// 选中的滤镜索引 -@property (nonatomic, assign) NSInteger selectedFilterIndex; -/// 选中的风格推荐索引 -@property (nonatomic, assign) NSInteger selectedStyleIndex; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/Model/FUPersistentBeautyModel.m b/FULiveDemo/Modules/Beauty/Model/FUPersistentBeautyModel.m deleted file mode 100644 index 1c291bbb..00000000 --- a/FULiveDemo/Modules/Beauty/Model/FUPersistentBeautyModel.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// FUPersistentBeautyModel.m -// FULiveDemo -// -// Created by 项林平 on 2022/6/13. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FUPersistentBeautyModel.h" -#import - -@implementation FUPersistentBeautyModel - -+ (NSDictionary *)mj_objectClassInArray { - return @{ - @"beautySkins" : @"FUBeautyModel", - @"beautyShapes" : @"FUBeautyModel", - @"beautyFilters" : @"FUBeautyModel" - }; -} - -@end diff --git a/FULiveDemo/Modules/Beauty/Model/FUStyleModel.h b/FULiveDemo/Modules/Beauty/Model/FUStyleModel.h deleted file mode 100644 index 5e72ed79..00000000 --- a/FULiveDemo/Modules/Beauty/Model/FUStyleModel.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// FUStyleModel.h -// FULiveDemo -// -// Created by Chen on 2021/3/23. -// Copyright © 2021 FaceUnity. All rights reserved. -// 风格其实就是 美肤、美型、滤镜三种组合的合集 -// - -#import "FUBeautyModel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUStyleModel : FUBeautyModel -/// 美肤效果 -@property (nonatomic, copy) NSArray *skins; -/// 美型普通效果 -@property (nonatomic, copy) NSArray *shapes; -/// 滤镜效果 -@property (nonatomic, strong) FUBeautyModel *filter; - -+ (FUStyleModel *)defaultParams; - -- (void)styleWithType:(FUBeautyStyleType)type; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/Model/FUStyleModel.m b/FULiveDemo/Modules/Beauty/Model/FUStyleModel.m deleted file mode 100644 index 25a13238..00000000 --- a/FULiveDemo/Modules/Beauty/Model/FUStyleModel.m +++ /dev/null @@ -1,198 +0,0 @@ -// -// FUStyleModel.m -// FULiveDemo -// -// Created by Chen on 2021/3/23. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUStyleModel.h" - -@implementation FUStyleModel - -+ (FUStyleModel *)defaultParams { - FUStyleModel *defaultModel = [[FUStyleModel alloc] init]; - - //美肤 - NSMutableArray *skinArr = [NSMutableArray array]; - NSArray *skinTitles = @[@"磨皮",@"美白",@"红润",@"锐化",@"亮眼",@"美牙",@"去黑眼圈",@"去法令纹"];// - float ratio[FUBeautifySkinMax] = {6.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; - for (NSUInteger i = 0; i < FUBeautifySkinMax; i ++) { - FUBeautyModel *model = [[FUBeautyModel alloc] init]; - model.type = FUBeautyDefineSkin; - model.mParam = i; - model.mTitle = [skinTitles objectAtIndex:i]; - model.mValue = 0.0; - model.defaultValue = model.mValue; - model.ratio = ratio[i]; - [skinArr addObject:model]; - } - defaultModel.skins = [NSArray arrayWithArray: skinArr]; - - //美型 - NSMutableArray *shapArr = [NSMutableArray array]; - NSArray *titleAndValues = @[@{@"key": @"瘦脸",@"value":@0.0}, - @{@"key": @"v脸",@"value":@0.0}, - @{@"key": @"窄脸",@"value":@0.0}, - @{@"key": @"短脸",@"value":@0.0}, - @{@"key": @"小脸",@"value":@0.0}, - @{@"key": @"瘦颧骨",@"value":@0.0}, - @{@"key": @"瘦下颌骨",@"value":@0.0}, - @{@"key": @"大眼",@"value":@0.0}, - @{@"key": @"圆眼",@"value":@(0.0)}, - @{@"key": @"下巴",@"value":@0.5}, - @{@"key": @"额头",@"value":@0.5}, - @{@"key": @"瘦鼻",@"value":@0.0}, - @{@"key": @"嘴型",@"value":@0.5}, - @{@"key": @"开眼角",@"value":@0.0}, - @{@"key": @"眼距",@"value":@0.5}, - @{@"key": @"眼睛角度",@"value":@0.5}, - @{@"key": @"长鼻",@"value":@0.5}, - @{@"key": @"缩人中",@"value":@0.5}, - @{@"key": @"微笑嘴角",@"value":@0.0}, - @{@"key": @"眉毛上下",@"value":@0.5}, - @{@"key": @"眉间距",@"value":@0.5}]; - float shapeRatio[FUBeautifyShapeMax] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; - for (NSUInteger i = 0; i < FUBeautifyShapeMax; i ++) { - NSDictionary *keyValues = [titleAndValues objectAtIndex:i]; - FUBeautyModel *model = [[FUBeautyModel alloc] init]; - model.type = FUBeautyDefineShape; - model.mParam = i; - model.mTitle = [keyValues objectForKey:@"key"]; - model.mValue = [[keyValues objectForKey:@"value"] doubleValue]; - model.defaultValue = model.mValue; - model.ratio = shapeRatio[i]; - [shapArr addObject:model]; - } - defaultModel.shapes = [NSArray arrayWithArray:shapArr]; - - //滤镜 - FUBeautyModel *filterModel = [[FUBeautyModel alloc] init]; - filterModel.type = FUBeautyDefineFilter; - filterModel.strValue = @"origin"; - filterModel.mTitle = @"无"; - filterModel.mValue = 0.4; - - defaultModel.filter = filterModel; - - return defaultModel; -} - -- (void)styleWithType:(FUBeautyStyleType)type { - if (type == FUBeautyStyleType1) { - [self style1]; - } - if (type == FUBeautyStyleType2) { - [self style2]; - } - if (type == FUBeautyStyleType3) { - [self style3]; - } - if (type == FUBeautyStyleType4) { - [self style4]; - } - if (type == FUBeautyStyleType5) { - [self style5]; - } - if (type == FUBeautyStyleType6) { - [self style6]; - } - if (type == FUBeautyStyleType7) { - [self style7]; - } -} - -//设置美肤程度值 -- (void)setSkinModelWithIndex:(NSUInteger)index value:(float)value { - if (index < self.skins.count) { - FUBeautyModel *skin = [self.skins objectAtIndex:index]; - skin.mValue = value; - } -} - -//设置美型程度值 -- (void)setShapeModelWithIndex:(NSUInteger)index value:(float)value { - if (index < self.shapes.count) { - FUBeautyModel *shape = [self.shapes objectAtIndex:index]; - shape.mValue = value; - } -} - - -- (void)style1 { - self.filter.strValue = @"bailiang1"; - self.filter.mValue = 0.2; - - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.5]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:3.0]; - [self setSkinModelWithIndex:FUBeautifySkinEyeBright value:0.35]; - [self setSkinModelWithIndex:FUBeautifySkinToothWhiten value:0.25]; - - [self setShapeModelWithIndex:FUBeautifyShapeCheekThinning value:0.45]; - [self setShapeModelWithIndex:FUBeautifyShapeCheekV value:0.08]; - [self setShapeModelWithIndex:FUBeautifyShapeCheekShort value:0.05]; - [self setShapeModelWithIndex:FUBeautifyShapeEyeEnlarging value:0.3]; -} - -- (void)style2 { - self.filter.strValue = @"ziran3"; - self.filter.mValue = 0.35; - - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.7]; - [self setSkinModelWithIndex:FUBeautifySkinRedLevel value:0.3]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:3.0]; - [self setSkinModelWithIndex:FUBeautifySkinEyeBright value:0.5]; - [self setSkinModelWithIndex:FUBeautifySkinToothWhiten value:0.4]; - - [self setShapeModelWithIndex:FUBeautifyShapeCheekThinning value:0.3]; - [self setShapeModelWithIndex:FUBeautifyShapeIntensityNose value:0.5]; - [self setShapeModelWithIndex:FUBeautifyShapeEyeEnlarging value:0.25]; -} - -- (void)style3 { - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.6]; - [self setSkinModelWithIndex:FUBeautifySkinRedLevel value:0.1]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:1.8]; - - [self setShapeModelWithIndex:FUBeautifyShapeCheekThinning value:0.3]; - [self setShapeModelWithIndex:FUBeautifyShapeCheekShort value:0.15]; - [self setShapeModelWithIndex:FUBeautifyShapeEyeEnlarging value:0.65]; - [self setShapeModelWithIndex:FUBeautifyShapeIntensityNose value:0.3]; -} - -- (void)style4 { - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.25]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:3.0]; -} - -- (void)style5 { - self.filter.strValue = @"fennen1"; - self.filter.mValue = 0.4; - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.7]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:3]; - - [self setShapeModelWithIndex:FUBeautifyShapeCheekThinning value:0.35]; - [self setShapeModelWithIndex:FUBeautifyShapeEyeEnlarging value:0.65]; -} - -- (void)style6 { - self.filter.strValue = @"fennen1"; - self.filter.mValue = 0.4; - - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.5]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:3.0]; -} - -- (void)style7 { - self.filter.strValue = @"ziran5"; - self.filter.mValue = 0.55; - - [self setSkinModelWithIndex:FUBeautifySkinColorLevel value:0.2]; - [self setSkinModelWithIndex:FUBeautifySkinRedLevel value:0.65]; - [self setSkinModelWithIndex:FUBeautifySkinBlurLevel value:3.3]; - - [self setShapeModelWithIndex:FUBeautifyShapeCheekThinning value:0.1]; - [self setShapeModelWithIndex:FUBeautifyShapeCheekShort value:0.05]; -} - -@end diff --git a/FULiveDemo/Modules/Beauty/VC/FUBeautyController.h b/FULiveDemo/Modules/Beauty/VC/FUBeautyController.h deleted file mode 100644 index b0d9e2b0..00000000 --- a/FULiveDemo/Modules/Beauty/VC/FUBeautyController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBeautyController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/28. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBeautyController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/VC/FUBeautyController.m b/FULiveDemo/Modules/Beauty/VC/FUBeautyController.m deleted file mode 100644 index 05120391..00000000 --- a/FULiveDemo/Modules/Beauty/VC/FUBeautyController.m +++ /dev/null @@ -1,238 +0,0 @@ -// -// FUBeautyController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/28. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBeautyController.h" -#import "FUAPIDemoBar.h" -#import "FUSelectedImageController.h" -#import "SVProgressHUD.h" - -@interface FUBeautyController () - -@property (strong, nonatomic) FUAPIDemoBar *demoBar; -/* 比对按钮 */ -@property (strong, nonatomic) UIButton *compBtn; -@end - -@implementation FUBeautyController - - -- (void)viewDidLoad { - [super viewDidLoad]; - - /* 在基类控制器中,已经加载了美颜 */ - // [[FUManager shareManager] loadFilter]; - - [self setupView]; - - self.headButtonView.selectedImageBtn.hidden = NO; - [self.view bringSubviewToFront:self.photoBtn]; - -} - --(void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - if (self.isFromOtherPage) { - [self.baseManager reloadBeautyParams]; - } - [_demoBar reloadShapView:self.baseManager.shapeParams]; - [_demoBar reloadSkinView:self.baseManager.skinParams]; - [_demoBar reloadFilterView:self.baseManager.filters]; - [_demoBar reloadStyleView:self.baseManager.styleParams defaultStyle:self.baseManager.currentStyle]; - [_demoBar setDefaultFilter:self.baseManager.seletedFliter]; - - if (self.baseManager.currentStyle && ![self.baseManager.currentStyle.mTitle isEqualToString:@"None"]) { - // 当前已经选中了风格推荐时需要调整界面 - [self.demoBar updateSubviews:FUBeautyDefineStyle]; - } - - // 添加点位测试开关 - if (FUShowLandmark) { - [FULandmarkManager show]; - } -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - // 移除点位测试开关 - if (FUShowLandmark) { - [FULandmarkManager dismiss]; - } -} - --(void)setupView{ - _demoBar = [[FUAPIDemoBar alloc] init]; - _demoBar.mDelegate = self; - [self.view insertSubview:_demoBar atIndex:1]; - - [_demoBar mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } else { - make.bottom.equalTo(self.view.mas_bottom); - } - make.left.right.equalTo(self.view); - make.height.mas_equalTo(50); - }]; - - /* 比对按钮 */ - _compBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_compBtn setImage:[UIImage imageNamed:@"demo_icon_contrast"] forState:UIControlStateNormal]; - [_compBtn addTarget:self action:@selector(TouchDown) forControlEvents:UIControlEventTouchDown]; - [_compBtn addTarget:self action:@selector(TouchUp) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; - _compBtn.hidden = YES; - [self.view addSubview:_compBtn]; - if (iPhoneXStyle) { - _compBtn.frame = CGRectMake(15 , self.view.frame.size.height - 60 - 182 - 34, 44, 44); - }else{ - _compBtn.frame = CGRectMake(15 , self.view.frame.size.height - 60 - 182, 44, 44); - } - - _demoBar.backgroundColor = [UIColor clearColor]; - _demoBar.bottomView.backgroundColor = [UIColor clearColor]; - _demoBar.topView.backgroundColor = [UIColor clearColor]; - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - [_demoBar addSubview:effectview]; - [_demoBar sendSubviewToBack:effectview]; - /* 磨玻璃 */ - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(_demoBar); - }]; - - if(iPhoneXStyle){ - UIBlurEffect *blur2 = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview2 = [[UIVisualEffectView alloc] initWithEffect:blur2]; - [self.view addSubview:effectview2]; - [self.view sendSubviewToBack:effectview2]; - [effectview2 mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - make.height.mas_equalTo(34); - }]; - } - -} - -#pragma mark - 按钮点击 --(void)didClickSelPhoto{ - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - vc.type = FUModuleTypeBeauty; - [self.navigationController pushViewController:vc animated:YES]; -} - -- (void)headButtonViewBackAction:(UIButton *)btn { - [super headButtonViewBackAction:btn]; - [self.baseManager updateBeautyCache:YES]; -} - -- (void)TouchDown{ - self.openComp = YES; -} - -- (void)TouchUp{ - self.openComp = NO; -} - -#pragma mark - FUAPIDemoBarDelegate - --(void)resetDefaultValue:(NSUInteger)type { - [self.baseManager resetDefaultParams:type]; -} - -//美型是否全部是默认参数 -- (BOOL)isDefaultShapeValue { - return [self.baseManager isDefaultShapeValue]; -} - -//美肤是否全部是默认参数 -- (BOOL)isDefaultSkinValue { - return [self.baseManager isDefaultSkinValue]; -} - --(void)showTopView:(BOOL)shown{ - float h = shown?190:49; - [_demoBar mas_updateConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } else { - make.bottom.equalTo(self.view.mas_bottom); - } - make.left.right.equalTo(self.view); - make.height.mas_equalTo(h); - }]; - - [self setPhotoScaleWithHeight:h show:shown]; -} - --(void)filterShowMessage:(NSString *)message{ - self.tipLabel.hidden = NO; - self.tipLabel.text = message; - [FUBeautyController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; - [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1 ]; -} - --(void)filterValueChange:(FUBeautyModel *)param { - [self.baseManager setFilterkey:[param.strValue lowercaseString]]; - self.baseManager.beauty.filterLevel = param.mValue; - self.baseManager.seletedFliter = param; -} - --(void)beautyParamValueChange:(FUBeautyModel *)param { - switch (param.type) { - case FUBeautyDefineShape: { - [self.baseManager setShap:param.mValue forKey:param.mParam]; - } - break; - case FUBeautyDefineSkin: { - [self.baseManager setSkin:param.mValue forKey:param.mParam]; - } - break; - case FUBeautyDefineStyle: { - [self.baseManager setStyleBeautyParams:(FUStyleModel *)param]; - } - break; - default: - break; - } -} - - -- (void)setPhotoScaleWithHeight:(CGFloat)height show:(BOOL)shown { - if (shown) { - _compBtn.hidden = NO; - CGAffineTransform photoTransform0 = CGAffineTransformMakeTranslation(0, height * -0.8) ; - CGAffineTransform photoTransform1 = CGAffineTransformMakeScale(0.9, 0.9); - - [UIView animateWithDuration:0.35 animations:^{ - - self.photoBtn.transform = CGAffineTransformConcat(photoTransform0, photoTransform1) ; - }]; - } else { - _compBtn.hidden = YES; - [UIView animateWithDuration:0.35 animations:^{ - - self.photoBtn.transform = CGAffineTransformIdentity ; - }]; - } -} - - - -- (void)dismissTipLabel{ - self.tipLabel.hidden = YES; -} - - --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - - [self.demoBar hiddenTopViewWithAnimation:YES]; -} - - -@end diff --git a/FULiveDemo/Modules/Beauty/VC/FUBeautyRenderMediaViewController.h b/FULiveDemo/Modules/Beauty/VC/FUBeautyRenderMediaViewController.h deleted file mode 100644 index ca20cdf2..00000000 --- a/FULiveDemo/Modules/Beauty/VC/FUBeautyRenderMediaViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBeautyRenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2021/12/9. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBeautyRenderMediaViewController : FURenderMediaViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/VC/FUBeautyRenderMediaViewController.m b/FULiveDemo/Modules/Beauty/VC/FUBeautyRenderMediaViewController.m deleted file mode 100644 index 08f7c89e..00000000 --- a/FULiveDemo/Modules/Beauty/VC/FUBeautyRenderMediaViewController.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// FUBeautyRenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2021/12/9. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBeautyRenderMediaViewController.h" -#import "FUAPIDemoBar.h" - -@interface FUBeautyRenderMediaViewController () - -@property (nonatomic, strong) FUAPIDemoBar *beautyDemoBar; -/// 效果比对按钮 -@property (nonatomic, strong) UIButton *compareButton; - -@end - -@implementation FUBeautyRenderMediaViewController - -#pragma mark - Life cycle - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.view addSubview:self.beautyDemoBar]; - [self.beautyDemoBar mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } else { - make.bottom.equalTo(self.view.mas_bottom); - } - make.leading.trailing.equalTo(self.view); - make.height.mas_equalTo(190); - }]; - - [self.view addSubview:self.compareButton]; - [self.compareButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.view.mas_leading).mas_offset(15); - make.bottom.equalTo(self.beautyDemoBar.mas_top).mas_offset(-10); - make.size.mas_offset(CGSizeMake(44, 44)); - }]; - -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [self showTopView:NO]; - - [self bringFunctionButtonToFront]; -} - -#pragma mark - Event response - -- (void)compareTouchDownAction { - self.stopRendering = YES; -} - -- (void)compareTouchUpAction { - self.stopRendering = NO; -} - -#pragma mark - FURenderMediaProtocol - -- (BOOL)isNeedTrack { - return YES; -} - -- (FUTrackType)trackType { - return FUTrackTypeFace; -} - -#pragma mark - FUAPIDemoBarDelegate - -- (void)resetDefaultValue:(NSUInteger)type { - [self.baseManager resetDefaultParams:type]; -} - -/// 美型是否全部是默认参数 -- (BOOL)isDefaultShapeValue { - return [self.baseManager isDefaultShapeValue]; -} - -/// 美肤是否全部是默认参数 -- (BOOL)isDefaultSkinValue { - return [self.baseManager isDefaultSkinValue]; -} - -- (void)showTopView:(BOOL)shown{ - self.compareButton.hidden = !shown; - [self refreshDownloadButtonTransformWithHeight:shown ? 190 : 49 show:shown]; -} - -- (void)filterValueChange:(FUBeautyModel *)param{ - [self.baseManager setFilterkey:[param.strValue lowercaseString]]; - self.baseManager.beauty.filterLevel = param.mValue; - self.baseManager.seletedFliter = param; -} - -- (void)beautyParamValueChange:(FUBeautyModel *)param{ - switch (param.type) { - case FUBeautyDefineShape: { - [self.baseManager setShap:param.mValue forKey:param.mParam]; - } - break; - case FUBeautyDefineSkin: { - [self.baseManager setSkin:param.mValue forKey:param.mParam]; - } - break; - case FUBeautyDefineStyle: { - [self.baseManager setStyleBeautyParams:(FUStyleModel *)param]; - } - break; - default: - break; - } -} - -#pragma mark - Getters - -- (FUAPIDemoBar *)beautyDemoBar { - if (!_beautyDemoBar) { - _beautyDemoBar = [[FUAPIDemoBar alloc] init]; - _beautyDemoBar.mDelegate = self; - [_beautyDemoBar reloadShapView:self.baseManager.shapeParams]; - [_beautyDemoBar reloadSkinView:self.baseManager.skinParams]; - [_beautyDemoBar reloadFilterView:self.baseManager.filters]; - [_beautyDemoBar reloadStyleView:self.baseManager.styleParams defaultStyle:self.baseManager.currentStyle]; - [_beautyDemoBar setDefaultFilter:self.baseManager.seletedFliter]; - } - return _beautyDemoBar; -} - -- (UIButton *)compareButton { - if (!_compareButton) { - _compareButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_compareButton setImage:[UIImage imageNamed:@"demo_icon_contrast"] forState:UIControlStateNormal]; - [_compareButton addTarget:self action:@selector(compareTouchDownAction) forControlEvents:UIControlEventTouchDown]; - [_compareButton addTarget:self action:@selector(compareTouchUpAction) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; - _compareButton.hidden = YES; - } - return _compareButton; -} - -@end diff --git a/FULiveDemo/Modules/Beauty/ViewController/FUBeautyImageRenderViewController.h b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyImageRenderViewController.h new file mode 100644 index 00000000..f93d2f9f --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyImageRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUBeautyImageRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUImageRenderViewController.h" +#import "FUBeautyImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyImageRenderViewController : FUImageRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/ViewController/FUBeautyImageRenderViewController.m b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyImageRenderViewController.m new file mode 100644 index 00000000..55f12114 --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyImageRenderViewController.m @@ -0,0 +1,72 @@ +// +// FUBeautyImageRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUBeautyImageRenderViewController.h" + +@interface FUBeautyImageRenderViewController () + +@end + +@implementation FUBeautyImageRenderViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // // 添加美颜视图 + [[FUBeautyComponentManager sharedManager] addComponentViewToView:self.view]; + [FUBeautyComponentManager sharedManager].delegate = self; + + // 更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:[FUBeautyComponentManager sharedManager].componentViewHeight + 10 hidden:[FUBeautyComponentManager sharedManager].selectedIndex == -1 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + [[FUBeautyComponentManager sharedManager] removeComponentView]; + [FUBeautyComponentManager sharedManager].delegate = nil; +} + +#pragma mark - Event response + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + + +#pragma mark - FUBeautyComponentDelegate + +- (void)beautyComponentViewHeightDidChange:(CGFloat)height { + // 美颜视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfDownloadButton:height + 10 hidden:[FUBeautyComponentManager sharedManager].selectedIndex == -1 animated:YES]; +} + +- (void)beautyComponentDidTouchDownComparison { + self.viewModel.rendering = NO; +} + +- (void)beautyComponentDidTouchUpComparison { + self.viewModel.rendering = YES; +} + +- (void)beautyComponentNeedsDisplayPromptContent:(NSString *)content { + if (content.length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.text = content; + self.tipLabel.hidden = NO; + [FUBeautyImageRenderViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); +} + +@end diff --git a/FULiveDemo/Modules/Beauty/ViewController/FUBeautyVideoRenderViewController.h b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyVideoRenderViewController.h new file mode 100644 index 00000000..abb1d8eb --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyVideoRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUBeautyVideoRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUVideoRenderViewController.h" +#import "FUBeautyVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyVideoRenderViewController : FUVideoRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/ViewController/FUBeautyVideoRenderViewController.m b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyVideoRenderViewController.m new file mode 100644 index 00000000..35f2767c --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyVideoRenderViewController.m @@ -0,0 +1,71 @@ +// +// FUBeautyVideoRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUBeautyVideoRenderViewController.h" + +@interface FUBeautyVideoRenderViewController () + +@end + +@implementation FUBeautyVideoRenderViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // // 添加美颜视图 + [[FUBeautyComponentManager sharedManager] addComponentViewToView:self.view]; + [FUBeautyComponentManager sharedManager].delegate = self; + + // 更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:[FUBeautyComponentManager sharedManager].componentViewHeight + 10 hidden:[FUBeautyComponentManager sharedManager].selectedIndex == -1 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + [[FUBeautyComponentManager sharedManager] removeComponentView]; + [FUBeautyComponentManager sharedManager].delegate = nil; +} + +#pragma mark - Event response + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + + +#pragma mark - FUBeautyComponentDelegate + +- (void)beautyComponentViewHeightDidChange:(CGFloat)height { + // 美颜视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfDownloadButton:height + 10 hidden:[FUBeautyComponentManager sharedManager].selectedIndex == -1 animated:YES]; +} + +- (void)beautyComponentDidTouchDownComparison { + self.viewModel.rendering = NO; +} + +- (void)beautyComponentDidTouchUpComparison { + self.viewModel.rendering = YES; +} + +- (void)beautyComponentNeedsDisplayPromptContent:(NSString *)content { + if (content.length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.text = content; + self.tipLabel.hidden = NO; + [FUBeautyVideoRenderViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); +} + +@end diff --git a/FULiveDemo/Modules/Beauty/ViewController/FUBeautyViewController.h b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyViewController.h new file mode 100644 index 00000000..0c34fdd3 --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyViewController.h @@ -0,0 +1,17 @@ +// +// FUBeautyViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/26. +// + +#import "FURenderViewController.h" +#import "FUBeautyViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/ViewController/FUBeautyViewController.m b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyViewController.m new file mode 100644 index 00000000..596f4792 --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewController/FUBeautyViewController.m @@ -0,0 +1,82 @@ +// +// FUBeautyViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/26. +// + +#import "FUBeautyViewController.h" + +@interface FUBeautyViewController () + +@property (nonatomic, strong, readonly) FUBeautyViewModel *viewModel; + +@end + +@implementation FUBeautyViewController + +@dynamic viewModel; + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // 添加美颜视图 + [[FUBeautyComponentManager sharedManager] addComponentViewToView:self.view]; + [FUBeautyComponentManager sharedManager].delegate = self; + // 更新拍照/录制按钮位置 + [self updateBottomConstraintsOfCaptureButton:[FUBeautyComponentManager sharedManager].componentViewHeight + 10 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + // 移除美颜视图 + [[FUBeautyComponentManager sharedManager] removeComponentView]; + [FUBeautyComponentManager sharedManager].delegate = nil; +} + +- (void)dealloc { + // 保存美颜数据到本地 + [[FUBeautyComponentManager sharedManager] saveBeauty]; +} + +#pragma mark - Event response + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + +#pragma mark - FUBeautyComponentDelegate + +- (void)beautyComponentViewHeightDidChange:(CGFloat)height { + // 美颜视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfCaptureButton:height + 10 animated:YES]; +} + +- (void)beautyComponentDidTouchDownComparison { + self.viewModel.rendering = NO; +} + +- (void)beautyComponentDidTouchUpComparison { + self.viewModel.rendering = YES; +} + +- (void)beautyComponentNeedsDisplayPromptContent:(NSString *)content { + if (content.length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.text = content; + self.tipLabel.hidden = NO; + [FUBeautyViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); +} + +@end diff --git a/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyImageRenderViewModel.h b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyImageRenderViewModel.h new file mode 100644 index 00000000..6688bd2e --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyImageRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUBeautyImageRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyImageRenderViewModel : FUImageRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyImageRenderViewModel.m b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyImageRenderViewModel.m new file mode 100644 index 00000000..fdd4dd5b --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyImageRenderViewModel.m @@ -0,0 +1,12 @@ +// +// FUBeautyImageRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUBeautyImageRenderViewModel.h" + +@implementation FUBeautyImageRenderViewModel + +@end diff --git a/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyVideoRenderViewModel.h b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyVideoRenderViewModel.h new file mode 100644 index 00000000..04df1bed --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyVideoRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUBeautyVideoRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyVideoRenderViewModel : FUVideoRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyVideoRenderViewModel.m b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyVideoRenderViewModel.m new file mode 100644 index 00000000..31badd77 --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyVideoRenderViewModel.m @@ -0,0 +1,12 @@ +// +// FUBeautyVideoRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUBeautyVideoRenderViewModel.h" + +@implementation FUBeautyVideoRenderViewModel + +@end diff --git a/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyViewModel.h b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyViewModel.h new file mode 100644 index 00000000..275410ec --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyViewModel.h @@ -0,0 +1,16 @@ +// +// FUBeautyViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/26. +// + +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBeautyViewModel : FURenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyViewModel.m b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyViewModel.m new file mode 100644 index 00000000..ac4a2dc5 --- /dev/null +++ b/FULiveDemo/Modules/Beauty/ViewModel/FUBeautyViewModel.m @@ -0,0 +1,26 @@ +// +// FUBeautyViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/26. +// + +#import "FUBeautyViewModel.h" + +@implementation FUBeautyViewModel + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleBeauty; +} + +- (BOOL)supportMediaRendering { + return YES; +} + +- (BOOL)supportPresetSelection { + return YES; +} + +@end diff --git a/FULiveDemo/Helpers/UI/FUSwitch.h b/FULiveDemo/Modules/BodyAvatar/View/FUSwitch.h similarity index 100% rename from FULiveDemo/Helpers/UI/FUSwitch.h rename to FULiveDemo/Modules/BodyAvatar/View/FUSwitch.h diff --git a/FULiveDemo/Helpers/UI/FUSwitch.m b/FULiveDemo/Modules/BodyAvatar/View/FUSwitch.m similarity index 100% rename from FULiveDemo/Helpers/UI/FUSwitch.m rename to FULiveDemo/Modules/BodyAvatar/View/FUSwitch.m diff --git a/FULiveDemo/Modules/BodyAvatar/ViewController/FUBodyAvatarViewController.h b/FULiveDemo/Modules/BodyAvatar/ViewController/FUBodyAvatarViewController.h new file mode 100644 index 00000000..a31f8401 --- /dev/null +++ b/FULiveDemo/Modules/BodyAvatar/ViewController/FUBodyAvatarViewController.h @@ -0,0 +1,17 @@ +// +// FUBodyAvatarViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FURenderViewController.h" +#import "FUBodyAvatarViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBodyAvatarViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyAvatar/ViewController/FUBodyAvatarViewController.m b/FULiveDemo/Modules/BodyAvatar/ViewController/FUBodyAvatarViewController.m new file mode 100644 index 00000000..c7ef4ecb --- /dev/null +++ b/FULiveDemo/Modules/BodyAvatar/ViewController/FUBodyAvatarViewController.m @@ -0,0 +1,137 @@ +// +// FUBodyAvatarViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FUBodyAvatarViewController.h" +#import "FUSwitch.h" + +@interface FUBodyAvatarViewController () + +@property(nonatomic, strong) FUItemsView *itemsView; +@property (nonatomic, strong) FUGLDisplayView *preview; +@property (nonatomic, strong) FUSwitch *positionSwitch; + +@property (nonatomic, strong, readonly) FUBodyAvatarViewModel *viewModel; + +@end + +@implementation FUBodyAvatarViewController + +@dynamic viewModel; + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.view insertSubview:self.preview belowSubview:self.headButtonView]; + + [self.view addSubview:self.itemsView]; + [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.view); + make.height.mas_offset(FUHeightIncludeBottomSafeArea(80)); + }]; + + [self.view addSubview:self.positionSwitch]; + [self.positionSwitch mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.itemsView.mas_top).mas_offset(-17); + make.leading.equalTo(self.view.mas_leading).mas_offset(17); + make.size.mas_offset(CGSizeMake(86, 32)); + }]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + // 默认后置摄像头 + [self.viewModel switchCameraBetweenFrontAndRear:NO unsupportedPresetHandler:nil]; +} + +#pragma mark - Event response + +- (void)postionSwitchAction:(FUSwitch *)sender { + self.viewModel.wholeBody = sender.isOn; +} + +- (void)previewPanAction:(UIPanGestureRecognizer *)sender { + CGPoint point = [sender translationInView:sender.view.superview]; + CGFloat senderHalfViewWidth = CGRectGetWidth(sender.view.frame) / 2.0; + CGFloat senderHalfViewHeight = CGRectGetHeight(sender.view.frame) / 2.0; + __block CGPoint viewCenter = CGPointMake(sender.view.center.x + point.x, sender.view.center.y + point.y); + if (sender.state == UIGestureRecognizerStateEnded) { + // 拖拽状态结束 + [UIView animateWithDuration:0.4 animations:^{ + CGFloat viewWidth = CGRectGetWidth(self.view.bounds); + CGFloat viewHeight = CGRectGetHeight(self.view.bounds); + if ((sender.view.center.x + point.x - senderHalfViewWidth) <= 5 || sender.view.center.x < viewWidth/2.0) { + viewCenter.x = senderHalfViewWidth + 5; + } + if ((sender.view.center.x + point.x + senderHalfViewWidth) >= viewWidth - 5 || sender.view.center.x >= viewWidth/2) { + viewCenter.x = viewWidth - senderHalfViewWidth - 5; + } + if ((sender.view.center.y + point.y - senderHalfViewHeight) <= FUHeightIncludeTopSafeArea(75)) { + viewCenter.y = senderHalfViewHeight + FUHeightIncludeTopSafeArea(75); + } + if ((sender.view.center.y + point.y + senderHalfViewHeight) >= (FUScreenHeight - 90 - 34)) { + viewCenter.y = viewHeight - senderHalfViewHeight - 90 - 34; + } + sender.view.center = viewCenter; + } completion:^(BOOL finished) { + }]; + [sender setTranslation:CGPointMake(0, 0) inView:[sender.view superview]]; + } else if (sender.state == UIGestureRecognizerStateBegan || sender.state == UIGestureRecognizerStateChanged) { + viewCenter.x = sender.view.center.x + point.x; + viewCenter.y = sender.view.center.y + point.y; + sender.view.center = viewCenter; + [sender setTranslation:CGPointMake(0, 0) inView:[sender.view superview]]; + } +} + +#pragma mark - FUItemsViewDelegate + +- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { + self.viewModel.selectedIndex = index; +} + +#pragma mark - FURenderViewModelDelegate + +- (void)renderWillInputPixelBuffer:(CVPixelBufferRef)pixelBuffer { + [self.preview displayPixelBuffer:pixelBuffer]; +} + +#pragma mark - Getters + +- (FUItemsView *)itemsView { + if (!_itemsView) { + _itemsView = [[FUItemsView alloc] init]; + _itemsView.delegate = self; + _itemsView.items = self.viewModel.avatarItems; + _itemsView.selectedIndex = 0; + } + return _itemsView; +} + +- (FUGLDisplayView *)preview { + if (!_preview) { + _preview = [[FUGLDisplayView alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.view.bounds) - 95, CGRectGetHeight(self.view.bounds) - 149 - FUHeightIncludeBottomSafeArea(80), 90, 144)]; + UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(previewPanAction:)]; + [_preview addGestureRecognizer:panGestureRecognizer]; + } + return _preview; +} + +- (FUSwitch *)positionSwitch { + if (!_positionSwitch) { + _positionSwitch = [[FUSwitch alloc] initWithFrame:CGRectMake(60, 150, 86, 32) onColor:[UIColor colorWithRed:31 / 255.0 green:178 / 255.0 blue:255 / 255.0 alpha:1.0] offColor:[UIColor whiteColor] font:[UIFont systemFontOfSize:12] ballSize:30]; + _positionSwitch.onText = FULocalizedString(@"全身驱动"); + _positionSwitch.offText = FULocalizedString(@"半身驱动"); + _positionSwitch.offLabel.textColor = [UIColor colorWithRed:31 / 255.0 green:178 / 255.0 blue:255 / 255.0 alpha:1.0]; + _positionSwitch.on = YES; + [_positionSwitch addTarget:self action:@selector(postionSwitchAction:) forControlEvents:UIControlEventValueChanged]; + } + return _positionSwitch; +} + +@end diff --git a/FULiveDemo/Modules/BodyAvatar/ViewModel/FUBodyAvatarViewModel.h b/FULiveDemo/Modules/BodyAvatar/ViewModel/FUBodyAvatarViewModel.h new file mode 100644 index 00000000..efcc78b2 --- /dev/null +++ b/FULiveDemo/Modules/BodyAvatar/ViewModel/FUBodyAvatarViewModel.h @@ -0,0 +1,22 @@ +// +// FUBodyAvatarViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBodyAvatarViewModel : FURenderViewModel + +@property (nonatomic, copy, readonly) NSArray *avatarItems; +/// 选中Avatar索引,默认为-1 +@property (nonatomic, assign) NSInteger selectedIndex; +/// 是否全身效果,默认为YES +@property (nonatomic, assign) BOOL wholeBody; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyAvatar/ViewModel/FUBodyAvatarViewModel.m b/FULiveDemo/Modules/BodyAvatar/ViewModel/FUBodyAvatarViewModel.m new file mode 100644 index 00000000..27245d26 --- /dev/null +++ b/FULiveDemo/Modules/BodyAvatar/ViewModel/FUBodyAvatarViewModel.m @@ -0,0 +1,187 @@ +// +// FUBodyAvatarViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FUBodyAvatarViewModel.h" + +@interface FUBodyAvatarViewModel () + +@property (nonatomic, copy) NSArray *avatarItems; +@property (nonatomic, copy) NSArray *avatars; + +@property (nonatomic, strong) FUScene *scene; +@property (nonatomic, strong) FUBackground *sceneBackground; +@property (nonatomic, strong) FUAvatar *currentAvatar; + +@end + +@implementation FUBodyAvatarViewModel { + FUPosition halfBodyPosition; + FUPosition wholeBodyPosition; +} + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (self) { + // 加载抗锯齿道具 + NSString *path = [[NSBundle mainBundle] pathForResource:@"fxaa" ofType:@"bundle"]; + [FURenderKit shareRenderKit].antiAliasing = [[FUItem alloc] initWithPath:path name:@"antiAliasing"]; + + // 初始化FUScene背景 + self.sceneBackground = [[FUBackground alloc] initWithPath:[[NSBundle mainBundle] pathForResource:@"default_bg" ofType:@"bundle"] name:@"scene_background"]; + + // 初始化FUScene + self.scene = [[FUScene alloc] init]; + self.scene.AIConfig.bodyTrackEnable = YES; + self.scene.AIConfig.avatarTranslationScale = FUPositionMake(0, 0, 0); + [self.scene.AIConfig setAvatarAnimFilter:5 pos:0 angle:0]; + + // 半身和全身位置参考值 + halfBodyPosition = FUPositionMake(0.0, 0.0, FUDeviceIsiPhoneXStyle() ? -200 : -183.89); + wholeBodyPosition = FUPositionMake(0.0, 53.14, FUDeviceIsiPhoneXStyle() ? -600 : -537.94); + + _selectedIndex = -1; + + self.wholeBody = YES; + } + return self; +} + +#pragma mark - Private methods + +- (void)loadAvatar:(FUAvatar *)avatar { + if (self.currentAvatar) { + self.currentAvatar.visible = NO; + [self.scene replaceAvatar:self.currentAvatar withNewAvatar:avatar]; + } else { + [self.scene addAvatar:avatar]; + } + avatar.position = self.wholeBody ? wholeBodyPosition : halfBodyPosition; + avatar.humanProcessorType = 0; + [avatar setEnableHumanAnimDriver:YES]; + avatar.visible = YES; + self.currentAvatar = avatar; +} + +#pragma mark - Setters + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex == _selectedIndex) { + return; + } + if (![FURenderKit shareRenderKit].currentScene) { + // 先添加scene到FURenderKit + [[FURenderKit shareRenderKit] addScene:self.scene completion:^(BOOL success) { + // 再设置currentScene + [FURenderKit shareRenderKit].currentScene = self.scene; + self.scene.background = self.sceneBackground; + // 加载Avatar + [self loadAvatar:self.avatars[selectedIndex]]; + self->_selectedIndex = selectedIndex; + }]; + } else { + // 直接加载Avatar + [self loadAvatar:self.avatars[selectedIndex]]; + _selectedIndex = selectedIndex; + } +} + +- (void)setWholeBody:(BOOL)wholeBody { + _wholeBody = wholeBody; + self.currentAvatar.position = wholeBody ? wholeBodyPosition : halfBodyPosition; + self.scene.AIConfig.bodyTrackMode = wholeBody ? FUBodyTrackModeFull : FUBodyTrackModeHalf; +} + +#pragma mark - Getters + +- (NSArray *)avatars { + if (!_avatars) { + // setup female + FUAvatar *femaleAvatar = [[FUAvatar alloc] init]; + + // components + NSArray *femaleComponents = @[@"female_hair_23", @"headnv", @"midBody_female", @"taozhuang_12", @"toushi_5", @"xiezi_danxie"]; + for (NSString *component in femaleComponents) { + NSString *path = [[NSBundle mainBundle] pathForResource:component ofType:@"bundle"]; + FUItem *item = [FUItem itemWithPath:path name:component]; + if ([component isEqualToString:@"midBody_female"]) { + item.bodyInvisibleList = [NSSet setWithObjects:@2, @3, @4, nil]; + } + [femaleAvatar addComponent:item]; + } + + // avatar makeup + NSString *path = [[NSBundle mainBundle] pathForResource:@"facemakeup_3" ofType:@"bundle"]; + FUAvatarMakeup *avatarMakeup = [FUAvatarMakeup itemWithPath:path name:@"facemakeup_3"]; + [femaleAvatar addComponent:avatarMakeup]; + + // animation + FUAnimation *femaleAnimation = [FUAnimation animationWithPath:[[NSBundle mainBundle] pathForResource:@"anim_idle" ofType:@"bundle"] name:@"anim_idle"]; + [femaleAvatar addAnimation:femaleAnimation]; + + [femaleAvatar setColor:FURGBColorMake(255, 202, 186) forKey:@"skin_color"]; + + // setup male + FUAvatar *maleAvatar = [[FUAvatar alloc] init]; + + // components + NSArray *maleComponents = @[@"headnan", @"kuzi_changku_5", @"male_hair_5", @"midBody_male", @"peishi_erding_2", @"toushi_7", @"waitao_3", @"xiezi_tuoxie_2"]; + for (NSString *component in maleComponents) { + NSString *path = [[NSBundle mainBundle] pathForResource:component ofType:@"bundle"]; + FUItem *item = [FUItem itemWithPath:path name:component]; + if ([component isEqualToString:@"midBody_male"]) { + item.bodyInvisibleList = [NSSet setWithObjects:@2, @3, @4, nil]; + } + [maleAvatar addComponent:item]; + } + + // animation + FUAnimation *maleAnimation = [FUAnimation animationWithPath:[[NSBundle mainBundle] pathForResource:@"anim_idle" ofType:@"bundle"] name:@"anim_idle"]; + [maleAvatar addAnimation:maleAnimation]; + + [maleAvatar setColor:FURGBColorMake(227, 158, 132) forKey:@"skin_color"]; + + _avatars = @[femaleAvatar, maleAvatar]; + } + return _avatars; +} + +- (NSArray *)avatarItems { + if (!_avatarItems) { + _avatarItems = @[@"avatar_female", @"avatar_male"]; + } + return _avatarItems; +} + +#pragma mark - Overriding + +- (BOOL)needsLoadingBeauty { + return NO; +} + +- (BOOL)supportCaptureAndRecording { + return NO; +} + +- (BOOL)supportSwitchingOutputFormat { + return NO; +} + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace | FUAIModelTypeHuman; +} + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsHuman; +} + +- (FUModule)module { + return FUModuleBodyAvatar; +} + +@end diff --git a/FULiveDemo/Modules/BodyAvtar/FUBodyAvatarController.h b/FULiveDemo/Modules/BodyAvtar/FUBodyAvatarController.h deleted file mode 100644 index a8720b5b..00000000 --- a/FULiveDemo/Modules/BodyAvtar/FUBodyAvatarController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBodyAvtarController.h -// FULiveDemo -// -// Created by 孙慕 on 2020/6/17. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBodyAvatarController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyAvtar/FUBodyAvatarController.m b/FULiveDemo/Modules/BodyAvtar/FUBodyAvatarController.m deleted file mode 100644 index 0e40d25f..00000000 --- a/FULiveDemo/Modules/BodyAvtar/FUBodyAvatarController.m +++ /dev/null @@ -1,181 +0,0 @@ -// -// FUBodyAvtarController.m -// FULiveDemo -// -// Created by 孙慕 on 2020/6/17. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUBodyAvatarController.h" -#import "FUSwitch.h" -// #import "FUBodyCollectionView.h" -#import "FUBodyAvatarManager.h" - -#import - -@interface FUBodyAvatarController () - -@property(nonatomic,strong)NSMutableDictionary *itemsHache; - -@property (strong, nonatomic) FUGLDisplayView *mPerView; - -@property (strong, nonatomic) FUSwitch *mSwitch; - -@property(strong, nonatomic) NSArray *mItmsArray; -@property(strong, nonatomic) FUItemsView *bodyItemsView; - -@property (nonatomic, strong) FUBodyAvatarManager *bodyAvatarManager; -@end - -@implementation FUBodyAvatarController - -- (BOOL)needsLoadingBeauty { - return NO; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - self.bodyAvatarManager = [[FUBodyAvatarManager alloc] init]; - - self.headButtonView.inputSegm.hidden = YES; - - /* 待绑定的道具 */ - _mItmsArray = @[@"avatar_female",@"avatar_male"]; - - /* 句柄缓存对象 */ - _itemsHache = [NSMutableDictionary dictionary]; - - - [self setupBodySubView]; - - [self itemsView:self.bodyItemsView didSelectItemAtIndex:0]; - -} - --(void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - self.headButtonView.switchBtn.selected = YES; - [self.mCamera changeCameraInputDeviceisFront:NO]; - [FURenderKit shareRenderKit].internalCameraSetting.position = AVCaptureDevicePositionBack; -} - --(void)setupBodySubView{ - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; - self.photoBtn.hidden = YES; - - _mPerView = [[FUGLDisplayView alloc] initWithFrame:CGRectMake(FUScreenWidth - 90 - 5, FUScreenHeight - 144 - 5 - 80 - (iPhoneXStyle ? 34:0), 90, 144)]; - UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanAction:)]; - [_mPerView addGestureRecognizer:panGestureRecognizer]; - [self.view addSubview:_mPerView]; - - _bodyItemsView = [[FUItemsView alloc] init]; - _bodyItemsView.delegate = self; - _bodyItemsView.items = self.mItmsArray; - _bodyItemsView.selectedIndex = 0; - [self.view addSubview:_bodyItemsView]; - [_bodyItemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(80 + 34); - }else{ - make.height.mas_equalTo(80); - } - }]; - - _mSwitch = [[FUSwitch alloc] initWithFrame:CGRectMake(60, 150, 86, 32) onColor:[UIColor colorWithRed:31 / 255.0 green:178 / 255.0 blue:255 / 255.0 alpha:1.0] offColor:[UIColor whiteColor] font:[UIFont systemFontOfSize:12] ballSize:30]; - _mSwitch.onText = FUNSLocalizedString(@"全身驱动", nil); - _mSwitch.offText = FUNSLocalizedString(@"半身驱动", nil); - _mSwitch.offLabel.textColor = [UIColor colorWithRed:31 / 255.0 green:178 / 255.0 blue:255 / 255.0 alpha:1.0]; - _mSwitch.on = YES; - [_mSwitch addTarget:self action:@selector(switchSex:) forControlEvents:UIControlEventValueChanged]; - [self.view addSubview:_mSwitch]; - [_mSwitch mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.bodyItemsView.mas_top).offset(-17); - make.left.equalTo(self.view).offset(17); - make.width.mas_equalTo(86); - make.height.mas_equalTo(32); - }]; - -} - -#pragma mark - Overriding - -- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput { - [super renderKitWillRenderFromRenderInput:renderInput]; - CVPixelBufferRef pixelBuffer = renderInput.pixelBuffer; - [self.mPerView displayPixelBuffer:pixelBuffer]; -} - -- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput { - [super renderKitDidRenderToOutput:renderOutput]; -} - --(void)displayPromptText{ - BOOL result = [self.baseManager bodyTrace]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"未检测到人体",nil); - self.noTrackLabel.hidden = result; - }) ; -} - -- (FUAIModelType)necessaryAIModelTypes { - return FUAIModelTypeFace | FUAIModelTypeHuman; -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - [self switchSex:self.mSwitch]; - [self.bodyAvatarManager loadAvatarWithIndex:(int)index]; -} - -#pragma mark - UI Action - --(void)switchSex:(FUSwitch *)mSwitch{ - if (mSwitch.on) {//全 - [self.bodyAvatarManager switchBodyTrackMode:FUBodyTrackModeFull]; - }else{//半身 - [self.bodyAvatarManager switchBodyTrackMode:FUBodyTrackModeHalf]; - } -} - -#pragma mark - 手势 -- (void)handlePanAction:(UIPanGestureRecognizer *)sender { - CGPoint point = [sender translationInView:[sender.view superview]]; - - CGFloat senderHalfViewWidth = sender.view.frame.size.width / 2; - CGFloat senderHalfViewHeight = sender.view.frame.size.height / 2; - - __block CGPoint viewCenter = CGPointMake(sender.view.center.x + point.x, sender.view.center.y + point.y); - // 拖拽状态结束 - if (sender.state == UIGestureRecognizerStateEnded) { - [UIView animateWithDuration:0.4 animations:^{ - if ((sender.view.center.x + point.x - senderHalfViewWidth) <= 5 || sender.view.center.x < FUScreenWidth/2) { - viewCenter.x = senderHalfViewWidth + 5; - } - if ((sender.view.center.x + point.x + senderHalfViewWidth) >= FUScreenWidth - 5 || sender.view.center.x >= FUScreenWidth/2) { - viewCenter.x = FUScreenWidth - senderHalfViewWidth - 5; - } - if ((sender.view.center.y + point.y - senderHalfViewHeight) <= 75) { - viewCenter.y = senderHalfViewHeight + 75; - } - if ((sender.view.center.y + point.y + senderHalfViewHeight) >= (FUScreenHeight -90 - 34)) { - viewCenter.y = FUScreenHeight - senderHalfViewHeight - 90 - 34; - } - sender.view.center = viewCenter; - } completion:^(BOOL finished) { - - }]; - [sender setTranslation:CGPointMake(0, 0) inView:[sender.view superview]]; - } else { - // UIGestureRecognizerStateBegan || UIGestureRecognizerStateChanged - viewCenter.x = sender.view.center.x + point.x; - viewCenter.y = sender.view.center.y + point.y; - sender.view.center = viewCenter; - [sender setTranslation:CGPointMake(0, 0) inView:[sender.view superview]]; - } -} - -@end diff --git a/FULiveDemo/Modules/BodyAvtar/FUBodyAvtarController.h b/FULiveDemo/Modules/BodyAvtar/FUBodyAvtarController.h deleted file mode 100644 index 40dd24e5..00000000 --- a/FULiveDemo/Modules/BodyAvtar/FUBodyAvtarController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBodyAvtarController.h -// FULiveDemo -// -// Created by 孙慕 on 2020/6/17. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUNormalItemController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBodyAvatarController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyAvtar/Manager/FUBodyAvatarManager.h b/FULiveDemo/Modules/BodyAvtar/Manager/FUBodyAvatarManager.h deleted file mode 100644 index 0f17bb1b..00000000 --- a/FULiveDemo/Modules/BodyAvtar/Manager/FUBodyAvatarManager.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// FUBodyAvatarManager.h -// FULiveDemo -// -// Created by Chen on 2021/3/9. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -NS_ASSUME_NONNULL_BEGIN - -@interface FUBodyAvatarManager : FUMetaManager - -//加载身体组件 -- (void)loadAvatarWithIndex:(int)index; - -//切换模式: 半身还是全身 -- (void)switchBodyTrackMode:(FUBodyTrackMode)mode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyAvtar/Manager/FUBodyAvatarManager.m b/FULiveDemo/Modules/BodyAvtar/Manager/FUBodyAvatarManager.m deleted file mode 100644 index 79f47180..00000000 --- a/FULiveDemo/Modules/BodyAvtar/Manager/FUBodyAvatarManager.m +++ /dev/null @@ -1,156 +0,0 @@ -// -// FUBodyAvatarManager.m -// FULiveDemo -// -// Created by Chen on 2021/3/9. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBodyAvatarManager.h" - -@interface FUBodyAvatarManager () { - int _index; - FUPosition halfPosition; - FUPosition fullPosition; -} - -@property (nonatomic, strong, nullable) FUScene *scene; -@property (nonatomic, strong) FUBackground *sceneBackground; -@property (nonatomic, copy) NSArray *avatars; -@property (nonatomic, strong) FUAvatar *currentAvatar; - -@end - -@implementation FUBodyAvatarManager - -- (instancetype)init { - self = [super init]; - if (self) { - _index = -1; - [self setupPosition]; - [self loadAntiAliasing]; - - // 初始化FUScene背景 - self.sceneBackground = [[FUBackground alloc] initWithPath:[[NSBundle mainBundle] pathForResource:@"default_bg.bundle" ofType:nil] name:@"bg"]; - // 初始化FUScene - self.scene = [[FUScene alloc] init]; - self.scene.AIConfig.bodyTrackEnable = YES; - self.scene.AIConfig.avatarTranslationScale = FUPositionMake(0, 0, 0); - [self.scene.AIConfig setAvatarAnimFilter:5 pos:0 angle:0]; - } - return self; -} - -- (void)setupPosition{ - fullPosition = FUPositionMake(0.0, 53.14, -537.94); - halfPosition = FUPositionMake(0.0, 0, -183.89); - if (iPhoneXStyle) { - fullPosition.z = -600; - halfPosition.z = -200; - } -} - -- (void)loadAvatarWithIndex:(int)index { - if (_index == index && index == -1) { - return ; - } - if (![FURenderKit shareRenderKit].currentScene) { - // 先添加scene到FURenderKit - [[FURenderKit shareRenderKit] addScene:self.scene completion:^(BOOL success) { - // 再设置currentScene - [FURenderKit shareRenderKit].currentScene = self.scene; - self.scene.background = self.sceneBackground; - [self loadAvatar:self.avatars[index]]; - _index = index; - }]; - } else { - [self loadAvatar:self.avatars[index]]; - _index = index; - } -} - -- (void)loadAvatar:(FUAvatar *)avatar { - if (self.currentAvatar) { - self.currentAvatar.visible = NO; - [self.scene replaceAvatar:self.currentAvatar withNewAvatar:avatar]; - } else { - [self.scene addAvatar:avatar]; - } - avatar.position = self.scene.AIConfig.bodyTrackMode == FUBodyTrackModeFull ? fullPosition:halfPosition; - avatar.humanProcessorType = 0; - [avatar setEnableHumanAnimDriver:YES]; - avatar.visible = YES; - self.currentAvatar = avatar; -} - -//切换模式: 半身还是全身 -- (void)switchBodyTrackMode:(FUBodyTrackMode)mode { - self.currentAvatar.position = mode == FUBodyTrackModeFull ? fullPosition:halfPosition; - self.scene.AIConfig.bodyTrackMode = mode; -} - -//加载抗锯齿道具 -- (void)loadAntiAliasing { - NSString *path = [[NSBundle mainBundle] pathForResource:@"fxaa" ofType:@"bundle"]; - [FURenderKit shareRenderKit].antiAliasing = [[FUItem alloc] initWithPath:path name:@"antiAliasing"]; -} - -- (NSArray *)avatars { - if (!_avatars) { - - // setup female - FUAvatar *femaleAvatar = [[FUAvatar alloc] init]; - - // components - NSArray *femaleComponents = @[@"female_hair_23",@"headnv" ,@"midBody_female",@"taozhuang_12",@"toushi_5",@"xiezi_danxie"]; - for (NSString *component in femaleComponents) { - NSString *path = [[NSBundle mainBundle] pathForResource:component ofType:@"bundle"]; - FUItem *item = [FUItem itemWithPath:path name:component]; - if ([component isEqualToString:@"midBody_female"]) { - item.bodyInvisibleList = [NSSet setWithObjects:@2, @3, @4, nil]; - } - [femaleAvatar addComponent:item]; - } - - // avatar makeup - NSString *path = [[NSBundle mainBundle] pathForResource:@"facemakeup_3" ofType:@"bundle"]; - FUAvatarMakeup *avatarMakeup = [FUAvatarMakeup itemWithPath:path name:@"facemakeup_3"]; - [femaleAvatar addComponent:avatarMakeup]; - - // animation - FUAnimation *femaleAnimation = [FUAnimation animationWithPath:[[NSBundle mainBundle] pathForResource:@"anim_idle" ofType:@"bundle"] name:@"anim_idle"]; - [femaleAvatar addAnimation:femaleAnimation]; - - [femaleAvatar setColor:FURGBColorMake(255, 202, 186) forKey:@"skin_color"]; - - - // setup male - FUAvatar *maleAvatar = [[FUAvatar alloc] init]; - - // components - NSArray *maleComponents = @[@"headnan",@"kuzi_changku_5",@"male_hair_5",@"midBody_male",@"peishi_erding_2",@"toushi_7",@"waitao_3",@"xiezi_tuoxie_2"]; - for (NSString *component in maleComponents) { - NSString *path = [[NSBundle mainBundle] pathForResource:component ofType:@"bundle"]; - FUItem *item = [FUItem itemWithPath:path name:component]; - if ([component isEqualToString:@"midBody_male"]) { - item.bodyInvisibleList = [NSSet setWithObjects:@2, @3, @4, nil]; - } - [maleAvatar addComponent:item]; - } - - // animation - FUAnimation *maleAnimation = [FUAnimation animationWithPath:[[NSBundle mainBundle] pathForResource:@"anim_idle" ofType:@"bundle"] name:@"anim_idle"]; - [maleAvatar addAnimation:maleAnimation]; - - [maleAvatar setColor:FURGBColorMake(227, 158, 132) forKey:@"skin_color"]; - - maleAvatar.position = fullPosition; - femaleAvatar.position = fullPosition; - - _avatars = @[femaleAvatar, maleAvatar]; - } - return _avatars; -} - - -@end diff --git a/FULiveDemo/Modules/BodyAvtar/View/FUBodyCollectionView.h b/FULiveDemo/Modules/BodyAvtar/View/FUBodyCollectionView.h deleted file mode 100644 index f92040a9..00000000 --- a/FULiveDemo/Modules/BodyAvtar/View/FUBodyCollectionView.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// FUBodyCollectionView.h -// FULiveDemo -// -// Created by 孙慕 on 2020/6/22. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUBodyItemsDelegate - -@optional - -- (void)bodyDidSelectedItemsIndex:(int )index; - -@end - -@interface FUBodyCollectionView : UIView - - - -@property (nonatomic, assign) int selIndex; - -@property (nonatomic, assign) iddelegate ; - - --(void)setItemsArray:(NSArray *)itemsArray; --(void)updateCollectionAndSel:(int)index; - -- (void)stopAnimation ; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyAvtar/View/FUBodyCollectionView.m b/FULiveDemo/Modules/BodyAvtar/View/FUBodyCollectionView.m deleted file mode 100644 index 2d1eff03..00000000 --- a/FULiveDemo/Modules/BodyAvtar/View/FUBodyCollectionView.m +++ /dev/null @@ -1,141 +0,0 @@ -// -// FUBodyCollectionView.m -// FULiveDemo -// -// Created by 孙慕 on 2020/6/22. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUBodyCollectionView.h" -// #import "FUItemsViewCell.h" - -@interface FUBodyCollectionView () - -@property (strong, nonatomic) UICollectionView *collection; -@property (nonatomic, strong) NSArray *itemsArray; - -@end - -@implementation FUBodyCollectionView -{ - BOOL loading ; -} - - --(instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - loading = NO ; - } - return self ; -} - - --(void)awakeFromNib{ - [super awakeFromNib]; - [self setupView]; -} - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - [self setupView]; - } - return self; -} - --(void)layoutSubviews { - [super layoutSubviews]; -} - --(void)setupView{ - loading = NO ; - - self.itemsArray = @[@"icon_yitu_add"];//,@"icon_yitu_delete" - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(60, 60); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - CGRect frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 80); - _collection = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - [_collection registerNib:[UINib nibWithNibName:@"FUItemsViewCell" bundle:nil] forCellWithReuseIdentifier:@"FUItemsViewCell"]; - -} - - --(void)setItemsArray:(NSArray *)itemsArray { - _itemsArray = itemsArray; - [self.collection reloadData]; - -} - --(void)updateCollectionAndSel:(int)index{ - _selIndex = index; - [self.collection reloadData]; -} - -//-(void)setSelectedItem:(NSString *)selectedItem { -// -// _selectedItem = selectedItem ; -// -// [self.collection reloadData]; -//} - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.itemsArray.count; -} - -//- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { -// -// FUItemsViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"FUItemsViewCell" forIndexPath:indexPath]; -// -// NSString *imageName = self.itemsArray[indexPath.row]; -// cell.imageView.image = [UIImage imageNamed:imageName] ; -// -// if (_selIndex == (int)indexPath.row) { -// cell.imageView.layer.borderWidth = 3.0 ; -// cell.imageView.layer.borderColor = [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0].CGColor; -// } else { -// cell.imageView.layer.borderWidth = 0.0 ; -// cell.imageView.layer.borderColor = [UIColor clearColor].CGColor; -// } -// -// return cell; -//} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake(60, 60) ; -} - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(12, 16, 12, 16); -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - [collectionView deselectItemAtIndexPath:indexPath animated:YES]; - _selIndex = (int)indexPath.row; - [collectionView reloadData]; - if (self.delegate && [self.delegate respondsToSelector:@selector(bodyDidSelectedItemsIndex:)]) { - [self.delegate bodyDidSelectedItemsIndex:(int)indexPath.row]; - } -} - - -- (void)stopAnimation { - dispatch_async(dispatch_get_main_queue(), ^{ - loading = NO ; - [self.collection reloadData]; - self.collection.userInteractionEnabled = YES ; - }); -} - -@end diff --git a/FULiveDemo/Modules/BodyBeauty/FUBodyBeautyDefine.h b/FULiveDemo/Modules/BodyBeauty/FUBodyBeautyDefine.h deleted file mode 100644 index f07d9155..00000000 --- a/FULiveDemo/Modules/BodyBeauty/FUBodyBeautyDefine.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// FUBodyBeautyDefine.h -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#ifndef FUBodyBeautyDefine_h -#define FUBodyBeautyDefine_h - -typedef NS_ENUM(NSUInteger, BODYBEAUTYTYPE) { - BODYBEAUTYTYPE_bodySlimStrength, //瘦身 - BODYBEAUTYTYPE_legSlimStrength, //长腿 - BODYBEAUTYTYPE_waistSlimStrength, //瘦腰: - BODYBEAUTYTYPE_shoulderSlimStrength, //美肩 - BODYBEAUTYTYPE_hipSlimStrength, //美臀 - BODYBEAUTYTYPE_headSlim, //小头 - BODYBEAUTYTYPE_legSlim, //瘦腿 - BODYBEAUTYTYPE_debug, //是否开启debug点位 - BODYBEAUTYTYPE_clearSlim //重置:清空所有的美体效果,恢复为默认值 -}; -#endif /* FUBodyBeautyDefine_h */ diff --git a/FULiveDemo/Modules/BodyBeauty/Manager/FUBodyBeautyManager.h b/FULiveDemo/Modules/BodyBeauty/Manager/FUBodyBeautyManager.h deleted file mode 100644 index 762a4e73..00000000 --- a/FULiveDemo/Modules/BodyBeauty/Manager/FUBodyBeautyManager.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// FUBodyBeautyManager.h -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -#import "FUBodyBeautyDefine.h" - -@class FUPositionInfo; -NS_ASSUME_NONNULL_BEGIN - -@interface FUBodyBeautyManager : FUMetaManager -@property (nonatomic, strong, nullable) FUBodyBeauty *bodyBeauty; - -@property (nonatomic, strong, readonly) NSArray *dataArray; - -//调整人体数据 -- (void)setBodyBeautyModel:(FUPositionInfo *)model; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/Manager/FUBodyBeautyManager.m b/FULiveDemo/Modules/BodyBeauty/Manager/FUBodyBeautyManager.m deleted file mode 100644 index d9991173..00000000 --- a/FULiveDemo/Modules/BodyBeauty/Manager/FUBodyBeautyManager.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// FUBodyBeautyManager.m -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBodyBeautyManager.h" -#import "FUPositionInfo.h" -#import "FULocalDataManager.h" -#import - -@interface FUBodyBeautyManager () -@property (nonatomic, strong) NSArray *dataArray; -@end - -@implementation FUBodyBeautyManager - -- (instancetype)init { - self = [super init]; - if (self) { - NSString *filePath = [[NSBundle mainBundle] pathForResource:@"body_slim" ofType:@"bundle"]; - self.bodyBeauty = [[FUBodyBeauty alloc] initWithPath:filePath name:@"body_slim"]; - self.bodyBeauty.debug = 0; - [self loadItem]; - NSArray *par = [FULocalDataManager bodyBeautyJsonData]; - self.dataArray = [FUPositionInfo mj_objectArrayWithKeyValuesArray: par]; - } - return self; -} - -//调整人体数据 -- (void)setBodyBeautyModel:(FUPositionInfo *)model { - switch (model.type) { - case FUPositionInfoTypeSlimming: - self.bodyBeauty.bodySlimStrength = model.value; - break; - case FUPositionInfoTypeLegged: - self.bodyBeauty.legSlimStrength = model.value; - break; - case FUPositionInfoTypeWaist: - self.bodyBeauty.waistSlimStrength = model.value; - break; - case FUPositionInfoTypeshoulder: - self.bodyBeauty.shoulderSlimStrength = model.value; - break; - case FUPositionInfoTypeHip: - self.bodyBeauty.hipSlimStrength = model.value; - break; - case FUPositionInfoTypeHeadSlim: - self.bodyBeauty.headSlim = model.value; - break; - case FUPositionInfoTypeLegSlim: - self.bodyBeauty.legSlim = model.value; - break; - default: - break; - } -} - -- (void)loadItem { - [FURenderKit shareRenderKit].bodyBeauty = self.bodyBeauty; -} - -@end diff --git a/FULiveDemo/Modules/BodyBeauty/Model/FUBodyBeautyModel.h b/FULiveDemo/Modules/BodyBeauty/Model/FUBodyBeautyModel.h new file mode 100644 index 00000000..32fb8aa7 --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/Model/FUBodyBeautyModel.h @@ -0,0 +1,32 @@ +// +// FUBodyBeautyModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import + +typedef NS_ENUM(NSUInteger, FUBodyBeautyParts) { + FUBodyBeautyPartsSlimming = 0, + FUBodyBeautyPartsLongLegs, + FUBodyBeautyPartsWaist, + FUBodyBeautyPartsShoulder, + FUBodyBeautyPartsHip, + FUBodyBeautyPartsHeadSlim, + FUBodyBeautyPartsLegSlim +}; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBodyBeautyModel : NSObject + +@property (nonatomic, assign) FUBodyBeautyParts parts; +@property (nonatomic, copy) NSString* name; +@property (nonatomic, assign) double defaultValue; +@property (nonatomic, assign) double currentValue; +@property (nonatomic, assign) BOOL defaultValueInMiddle; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/Model/FUBodyBeautyModel.m b/FULiveDemo/Modules/BodyBeauty/Model/FUBodyBeautyModel.m new file mode 100644 index 00000000..a4da56ee --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/Model/FUBodyBeautyModel.m @@ -0,0 +1,12 @@ +// +// FUBodyBeautyModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUBodyBeautyModel.h" + +@implementation FUBodyBeautyModel + +@end diff --git a/FULiveDemo/Modules/BodyBeauty/Model/FUPositionInfo.h b/FULiveDemo/Modules/BodyBeauty/Model/FUPositionInfo.h deleted file mode 100644 index a290baab..00000000 --- a/FULiveDemo/Modules/BodyBeauty/Model/FUPositionInfo.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// FUPositionInfo.h -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, FUPositionInfoType) { - FUPositionInfoTypeSlimming = 0, - FUPositionInfoTypeLegged = 1, - FUPositionInfoTypeWaist = 2, - FUPositionInfoTypeshoulder = 3, - FUPositionInfoTypeHip = 4, - FUPositionInfoTypeHeadSlim = 5, - FUPositionInfoTypeLegSlim = 6 -}; - -@interface FUPositionInfo : NSObject - -@property (nonatomic, copy) NSString* name; -@property (nonatomic, copy) NSString* iconName; -@property (nonatomic, assign) FUPositionInfoType type; -@property (nonatomic, assign) float value; -@property (nonatomic, assign) BOOL isSel; -@property (nonatomic, copy) NSString* bundleKey; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/Model/FUPositionInfo.m b/FULiveDemo/Modules/BodyBeauty/Model/FUPositionInfo.m deleted file mode 100644 index 73af0975..00000000 --- a/FULiveDemo/Modules/BodyBeauty/Model/FUPositionInfo.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// FUPositionInfo.m -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUPositionInfo.h" - -@implementation FUPositionInfo - -@end diff --git a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyController.h b/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyController.h deleted file mode 100644 index 5d26cf58..00000000 --- a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBodyBeautyController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBodyBeautyController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyController.m b/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyController.m deleted file mode 100644 index b8fec42d..00000000 --- a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyController.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// FUBodyBeautyController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBodyBeautyController.h" -#import "FUBodyBeautyView.h" -#import "FUPositionInfo.h" -#import -#import "FUSelectedImageController.h" -#import "FUBodyBeautyManager.h" - -@interface FUBodyBeautyController () -@property(nonatomic,strong)FUBodyBeautyView *mBodyBeautyView; -@property (nonatomic, strong) FUBodyBeautyManager *bodyBeautyManager; -@end - -@implementation FUBodyBeautyController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - self.bodyBeautyManager = [[FUBodyBeautyManager alloc] init]; - - [self setupView]; - - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -100); - - // self.headButtonView.selectedImageBtn.hidden = NO; -} - -- (void)viewWillAppear:(BOOL)animated { - [self.bodyBeautyManager loadItem]; - [super viewWillAppear:animated]; -} - --(void)setupView{ - NSArray *dataArray = self.bodyBeautyManager.dataArray; - - _mBodyBeautyView = [[FUBodyBeautyView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 134, [UIScreen mainScreen].bounds.size.width, 134) dataArray:dataArray]; - _mBodyBeautyView.delegate = self; - [self.view addSubview:_mBodyBeautyView]; - - [_mBodyBeautyView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(134 + 34); - }else{ - make.height.mas_equalTo(134); - } - - }]; - - _mBodyBeautyView.backgroundColor = [UIColor clearColor]; - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - [_mBodyBeautyView insertSubview:effectview atIndex:0]; - /* 磨玻璃 */ - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(_mBodyBeautyView); - }]; - -} - -#pragma mark - Overriding - --(void)displayPromptText{ - BOOL result = [self.baseManager bodyTrace]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"未检测到人体",nil); - self.noTrackLabel.hidden = result; - }) ; -} - -- (FUAIModelType)necessaryAIModelTypes { - return FUAIModelTypeFace | FUAIModelTypeHuman; -} - -#pragma mark - 按钮点击 --(void)didClickSelPhoto{ - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - vc.type = FUModuleTypeBody; - [self.navigationController pushViewController:vc animated:YES]; - -} - -#pragma mark - FUBodyBeautyViewDelegate --(void)bodyBeautyViewDidSelectPosition:(FUPositionInfo *)position{ - if (!position.bundleKey) { - return; - } - - NSLog(@"------%@------%lf",position.bundleKey,position.value); - [self.bodyBeautyManager setBodyBeautyModel:position]; -} - - -@end diff --git a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyRenderMediaViewController.h b/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyRenderMediaViewController.h deleted file mode 100644 index 06e94543..00000000 --- a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyRenderMediaViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBodyBeautyRenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2021/12/28. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBodyBeautyRenderMediaViewController : FURenderMediaViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyRenderMediaViewController.m b/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyRenderMediaViewController.m deleted file mode 100644 index 1a98bc4e..00000000 --- a/FULiveDemo/Modules/BodyBeauty/VC/FUBodyBeautyRenderMediaViewController.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// FUBodyBeautyRenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2021/12/28. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBodyBeautyRenderMediaViewController.h" -#import "FUBodyBeautyView.h" -#import "FUBodyBeautyManager.h" -#import "FUPositionInfo.h" - -@interface FUBodyBeautyRenderMediaViewController () - -@property (nonatomic, strong) FUBodyBeautyView *bodyBeautyView; - -@property (nonatomic, strong) FUBodyBeautyManager *bodyBeautyManager; - -@end - -@implementation FUBodyBeautyRenderMediaViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.view addSubview:self.bodyBeautyView]; - - [self refreshDownloadButtonTransformWithHeight:98 show:YES]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - [self.bodyBeautyManager releaseItem]; -} - -#pragma mark - FUBodyBeautyViewDelegate - -- (void)bodyBeautyViewDidSelectPosition:(FUPositionInfo *)position { - if (!position.bundleKey) { - return; - } - [self.bodyBeautyManager setBodyBeautyModel:position]; -} - -#pragma mark - Getters - -- (FUBodyBeautyView *)bodyBeautyView { - if (!_bodyBeautyView) { - NSString *bodyBeautyPath = [[NSBundle mainBundle] pathForResource:@"BodyBeautyDefault" ofType:@"json"]; - NSData *bodyData = [[NSData alloc] initWithContentsOfFile:bodyBeautyPath]; - NSDictionary *bodyDic = [NSJSONSerialization JSONObjectWithData:bodyData options:NSJSONReadingMutableContainers error:nil]; - NSArray *dataArray = [FUPositionInfo mj_objectArrayWithKeyValuesArray:bodyDic]; - _bodyBeautyView = [[FUBodyBeautyView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - 134, CGRectGetWidth(self.view.bounds), 134) dataArray:dataArray]; - _bodyBeautyView.delegate = self; - } - return _bodyBeautyView; -} - -- (FUBodyBeautyManager *)bodyBeautyManager { - if (!_bodyBeautyManager) { - _bodyBeautyManager = [[FUBodyBeautyManager alloc] init]; - } - return _bodyBeautyManager; -} - -@end diff --git a/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyCell.h b/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyCell.h new file mode 100644 index 00000000..b9ab44ee --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyCell.h @@ -0,0 +1,26 @@ +// +// FUBodyBeautyCell.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBodyBeautyCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@property (nonatomic, assign) BOOL defaultInMiddle; + +@property (nonatomic, assign) double currentValue; + +@property (nonatomic, copy) NSString *imageName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyCell.m b/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyCell.m new file mode 100644 index 00000000..ec2b01f7 --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyCell.m @@ -0,0 +1,75 @@ +// +// FUBodyBeautyCell.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUBodyBeautyCell.h" + +@interface FUBodyBeautyCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@property (nonatomic, strong) UILabel *textLabel; + +@end + +@implementation FUBodyBeautyCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + NSLayoutConstraint *imageTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *imageLeading = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *imageTrailing = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *imageHeight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; + [self.contentView addConstraints:@[imageTop, imageLeading, imageTrailing]]; + [self.imageView addConstraint:imageHeight]; + + [self.contentView addSubview:self.textLabel]; + NSLayoutConstraint *textTop = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:7]; + + NSLayoutConstraint *textCenterX = [NSLayoutConstraint constraintWithItem:self.textLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [self.contentView addConstraints:@[textTop, textCenterX]]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + BOOL changed = NO; + if (self.defaultInMiddle) { + changed = fabs(self.currentValue - 0.5) > 0.01; + }else{ + changed = self.currentValue > 0.01; + } + if (selected) { + self.imageView.image = changed ? [UIImage imageNamed:[NSString stringWithFormat:@"%@-3", self.imageName]] : [UIImage imageNamed:[NSString stringWithFormat:@"%@-2", self.imageName]]; + self.textLabel.textColor = [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1]; + } else { + self.imageView.image = changed ? [UIImage imageNamed:[NSString stringWithFormat:@"%@-1", self.imageName]] : [UIImage imageNamed:[NSString stringWithFormat:@"%@-0", self.imageName]]; + self.textLabel.textColor = [UIColor whiteColor]; + } +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] init]; + _textLabel.font = [UIFont systemFontOfSize:10]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _textLabel; +} + +@end diff --git a/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyView.h b/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyView.h deleted file mode 100644 index c02c5fc9..00000000 --- a/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyView.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// FUBodyBeautyView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import -#import "FUPositionInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUBodyBeautyViewDelegate -@optional -- (void)bodyBeautyViewDidSelectPosition:(FUPositionInfo *)position; - -@end - -@interface FUBodyBeautyView : UIView - -@property (weak,nonatomic) id delegate; - --(instancetype)initWithFrame:(CGRect)frame dataArray:(NSArray *)dataArray; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyView.m b/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyView.m deleted file mode 100644 index a8ce1a31..00000000 --- a/FULiveDemo/Modules/BodyBeauty/View/FUBodyBeautyView.m +++ /dev/null @@ -1,247 +0,0 @@ -// -// FUBodyBeautyView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBodyBeautyView.h" -#import "FUPositionCell.h" - -#import "UIView+FU.h" - -@interface FUBodyBeautyView() -@property(nonatomic,strong)NSArray *dataArray; - -@property(nonatomic,strong) UICollectionView *collection; - -@property(nonatomic,strong) FUSlider *slider; - -@property(nonatomic,strong) FUPositionInfo * currentPosition; - -@property(nonatomic,strong) FUSquareButton *btn; - -@end -@implementation FUBodyBeautyView - -static NSString *positionCellID = @"positionCell"; - --(instancetype)initWithFrame:(CGRect)frame dataArray:(NSArray *)dataArray{ - if (self = [super initWithFrame:frame]) { - _dataArray = dataArray; - - for (FUPositionInfo *modle0 in _dataArray) { - if (modle0.isSel) { - _currentPosition = modle0; - [self setSliderState:_currentPosition]; - break; - } - } - [self setupView]; - - } - return self; -} - - --(void)setupView{ - self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(50, 60); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 20, [UIScreen mainScreen].bounds.size.width - 112, 20)]; - [_slider addTarget:self action:@selector(sliderChangeValue:) forControlEvents:UIControlEventValueChanged]; - [_slider addTarget:self action:@selector(sliderChangeEnd:) forControlEvents:UIControlEventTouchUpInside]; - _slider.bidirection = NO; - [_slider setMaximumTrackTintColor:UIColor.whiteColor]; - [self addSubview:_slider]; - - _btn = [[FUSquareButton alloc] initWithFrame:CGRectMake(17, CGRectGetMaxY(_slider.frame) + 18, 50, 60) interval:6]; - [_btn setTitle:FUNSLocalizedString(@"恢复",nil) forState:UIControlStateNormal]; - [_btn setImage:[UIImage imageNamed:@"恢复-0"] forState:UIControlStateNormal]; - [_btn addTarget:self action:@selector(restAcetion:) forControlEvents:UIControlEventTouchUpInside]; - self.btn.alpha = 0.5; - [self addSubview:_btn]; - - UIView *sqView = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_btn.frame) + 12, CGRectGetMaxY(_slider.frame) + 8 + 20, 1/[UIScreen mainScreen].scale, 20)]; - sqView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.2]; - [self addSubview:sqView]; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_btn.frame) + 12, CGRectGetMaxY(_slider.frame), [UIScreen mainScreen].bounds.size.width - CGRectGetMaxX(_btn.frame) - 20, 94) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - - [_collection registerClass:[FUPositionCell class] forCellWithReuseIdentifier:positionCellID]; -} - -#pragma mark - UI事件 - --(void)sliderChangeValue:(FUSlider *)slider{ - _currentPosition.value = slider.value; - if ([self.delegate respondsToSelector:@selector(bodyBeautyViewDidSelectPosition:)]) { - [self.delegate bodyBeautyViewDidSelectPosition:_currentPosition]; - } - - if (fabs(slider.value - 0.5) < 0.05 || fabs(slider.value - 0) < 0.05) { - [_collection reloadData]; - } - -} - --(void)sliderChangeEnd:(FUSlider *)slider{ - self.btn.alpha = [self isChangeValue]? 1.0:0.5; -} - --(void)restAcetion:(FUSquareButton *)btn{ - self.btn.alpha = 0.5; - if(![self isChangeValue]){ - return; - } - - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:FUNSLocalizedString(@"是否将所有参数恢复到默认值",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - self.btn.alpha = 1.0; - }]; - [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - __weak typeof(self)weakSelf = self ; - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - for (FUPositionInfo *position in _dataArray) { - if (position.type == FUPositionInfoTypeshoulder) {//不同的样式 - position.value = 0.5; - }else{ - position.value = 0; - } - if ([weakSelf.delegate respondsToSelector:@selector(bodyBeautyViewDidSelectPosition:)]) { - [weakSelf.delegate bodyBeautyViewDidSelectPosition:position]; - } - } - weakSelf.slider.value = _currentPosition.value; - [weakSelf.collection reloadData]; - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [[self fu_targetViewController] presentViewController:alertCon animated:YES completion:^{ - }]; - return; -} - - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _dataArray.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUPositionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:positionCellID forIndexPath:indexPath]; - FUPositionInfo *modle = _dataArray[indexPath.row]; - cell.topImage.image = [self getIconImage:modle]; - cell.botlabel.text = FUNSLocalizedString(modle.name,nil); - - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(0, 12, 0, 17); -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - FUPositionInfo *modle = _dataArray[indexPath.row]; - if(_currentPosition == modle){ - return; - } - for (FUPositionInfo *modle0 in _dataArray) { - modle0.isSel = NO; - } - modle.isSel = YES; - _currentPosition = modle; - [self setSliderState:_currentPosition]; - - [self.collection reloadData]; -// if ([self.delegate respondsToSelector:@selector(bodyBeautyViewDidSelectPosition:)]) { -// [self.delegate bodyBeautyViewDidSelectPosition:modle]; -// } -} - -#pragma mark - private - --(void)setSliderState:(FUPositionInfo *)position{ - _slider.hidden = NO; - if (position.type == FUPositionInfoTypeshoulder) {//不同的样式 - _slider.bidirection = YES; - }else{ - _slider.bidirection = NO; - } - - _slider.value = position.value; -} - -/* 根据数据不同icon */ --(UIImage *)getIconImage:(FUPositionInfo *)position{ - NSString *behindStr = nil; - if (position.isSel) { - if (position.type == FUPositionInfoTypeshoulder) { - if (fabs(position.value - 0.5) < 0.01) { - behindStr = @"_sel"; - }else{ - behindStr = @"_sel_open"; - } - }else{ - if (position.value < 0.01) { - behindStr = @"_sel"; - }else{ - behindStr = @"_sel_open"; - } - } - }else{ - if (position.type == FUPositionInfoTypeshoulder) { - if (fabs(position.value - 0.5) < 0.01) { - behindStr = @"_nor"; - }else{ - behindStr = @"_nor_open"; - } - }else{ - if (position.value < 0.01) { - behindStr = @"_nor"; - }else{ - behindStr = @"_nor_open"; - } - } - } - return [UIImage imageNamed:[position.iconName stringByAppendingString:behindStr]]; -} - - -/** - value 是否有改动 - */ --(BOOL)isChangeValue{ - for (FUPositionInfo *position in _dataArray) { - if (position.type == FUPositionInfoTypeshoulder) {//不同的样式 - - if (position.value != 0.5) { - return YES; - } - }else{ - if (position.value != 0) { - return YES; - } - } - } - return NO; -} - -@end diff --git a/FULiveDemo/Modules/BodyBeauty/View/FUPositionCell.h b/FULiveDemo/Modules/BodyBeauty/View/FUPositionCell.h deleted file mode 100644 index 7e098a2c..00000000 --- a/FULiveDemo/Modules/BodyBeauty/View/FUPositionCell.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FUPositionCell.h -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUPositionCell : UICollectionViewCell -@property (strong, nonatomic) UIImageView *topImage; - -@property (strong, nonatomic) UILabel *botlabel; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/View/FUPositionCell.m b/FULiveDemo/Modules/BodyBeauty/View/FUPositionCell.m deleted file mode 100644 index 43fa5cd6..00000000 --- a/FULiveDemo/Modules/BodyBeauty/View/FUPositionCell.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// FUPositionCell.m -// FULiveDemo -// -// Created by 孙慕 on 2019/8/2. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUPositionCell.h" - -@implementation FUPositionCell -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - _topImage = [[UIImageView alloc] initWithFrame:CGRectMake(3, 0, 44, 44)]; - [self.contentView addSubview:_topImage]; - - _botlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 46, 50, 20)]; - _botlabel.textAlignment = NSTextAlignmentCenter; - _botlabel.textColor = [UIColor whiteColor]; - _botlabel.font = [UIFont systemFontOfSize:10]; - [self.contentView addSubview:_botlabel]; - } - - return self; -} -@end diff --git a/FULiveDemo/Modules/BodyBeauty/ViewController/FUBodyBeautyViewController.h b/FULiveDemo/Modules/BodyBeauty/ViewController/FUBodyBeautyViewController.h new file mode 100644 index 00000000..9e053ddf --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/ViewController/FUBodyBeautyViewController.h @@ -0,0 +1,17 @@ +// +// FUBodyBeautyViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FURenderViewController.h" +#import "FUBodyBeautyViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBodyBeautyViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/ViewController/FUBodyBeautyViewController.m b/FULiveDemo/Modules/BodyBeauty/ViewController/FUBodyBeautyViewController.m new file mode 100644 index 00000000..127a3255 --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/ViewController/FUBodyBeautyViewController.m @@ -0,0 +1,193 @@ +// +// FUBodyBeautyViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUBodyBeautyViewController.h" +#import "FUBodyBeautyCell.h" + +static NSString * const kFUBodyBeautyCellIdentifier = @"FUBodyBeautyCell"; + +@interface FUBodyBeautyViewController () + +@property (nonatomic, strong) UICollectionView *collectionView; +@property (nonatomic, strong) FUSlider *slider; +@property (nonatomic, strong) FUSquareButton *recoverButton; + +@property (nonatomic, strong, readonly) FUBodyBeautyViewModel *viewModel; + +@end + +@implementation FUBodyBeautyViewController + +@dynamic viewModel; + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureSubviews]; + [self refreshSubviews]; + + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(141) + 10 animated:NO]; +} + +#pragma mark - UI + +- (void)configureSubviews { + UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(141), CGRectGetWidth(self.view.bounds), FUHeightIncludeBottomSafeArea(141))]; + [self.view addSubview:bottomView]; + [bottomView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.view); + make.height.mas_offset(FUHeightIncludeBottomSafeArea(141)); + }]; + + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(bottomView.frame), CGRectGetHeight(bottomView.frame)); + [bottomView addSubview:effectView]; + + [bottomView addSubview:self.slider]; + [bottomView addSubview:self.recoverButton]; + [self.recoverButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(bottomView.mas_leading).mas_offset(17); + make.top.equalTo(bottomView.mas_top).mas_offset(55); + make.size.mas_offset(CGSizeMake(44, 74)); + }]; + + // 分割线 + UIView *verticalLine = [[UIView alloc] init]; + verticalLine.backgroundColor = [UIColor colorWithRed:229/255.f green:229/255.f blue:229/255.f alpha:0.2]; + [bottomView addSubview:verticalLine]; + [verticalLine mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(self.recoverButton.mas_trailing).mas_offset(14); + make.centerY.equalTo(self.recoverButton.mas_centerY).mas_offset(-15); + make.size.mas_offset(CGSizeMake(1, 24)); + }]; + + [bottomView addSubview:self.collectionView]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(bottomView.mas_leading).mas_offset(76); + make.trailing.equalTo(bottomView); + make.top.equalTo(bottomView.mas_top).mas_offset(43); + make.height.mas_offset(98); + }]; +} + +- (void)refreshSubviews { + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.viewModel.isDefaultValue) { + self.recoverButton.alpha = 0.6; + self.recoverButton.userInteractionEnabled = NO; + } else { + self.recoverButton.alpha = 1; + self.recoverButton.userInteractionEnabled = YES; + } + if (!self.slider.hidden && self.viewModel.selectedIndex >= 0) { + self.slider.bidirection = self.viewModel.bodyBeautyItems[self.viewModel.selectedIndex].defaultValueInMiddle; + self.slider.value = self.viewModel.bodyBeautyItems[self.viewModel.selectedIndex].currentValue; + } + [self.collectionView reloadData]; + if (self.viewModel.selectedIndex >= 0) { + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + +#pragma mark - Event response + +- (void)recoverAction { + [FUAlertManager showAlertWithTitle:nil message:FULocalizedString(@"是否将所有参数恢复到默认值") cancel:FULocalizedString(@"取消") confirm:FULocalizedString(@"确定") inController:self confirmHandler:^{ + [self.viewModel recoverToDefault]; + [self refreshSubviews]; + } cancelHandler:nil]; +} + +- (void)sliderValueChanged { + [self.viewModel setCurrentValue:self.slider.value]; +} + +- (void)sliderChangeEnded { + [self refreshSubviews]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.bodyBeautyItems.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUBodyBeautyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUBodyBeautyCellIdentifier forIndexPath:indexPath]; + FUBodyBeautyModel *model = self.viewModel.bodyBeautyItems[indexPath.item]; + cell.textLabel.text = FULocalizedString(model.name); + cell.imageName = model.name; + cell.defaultInMiddle = model.defaultValueInMiddle; + cell.currentValue = model.currentValue; + cell.selected = indexPath.item == self.viewModel.selectedIndex; + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.item == self.viewModel.selectedIndex) { + return; + } + self.viewModel.selectedIndex = indexPath.item; + FUBodyBeautyModel *bodyBeauty = self.viewModel.bodyBeautyItems[indexPath.item]; + if (self.slider.hidden) { + self.slider.hidden = NO; + } + self.slider.bidirection = bodyBeauty.defaultValueInMiddle; + self.slider.value = bodyBeauty.currentValue; +} + +#pragma mark - Getters + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(44, 74); + layout.minimumLineSpacing = 22; + layout.minimumInteritemSpacing = 22; + layout.sectionInset = UIEdgeInsetsMake(6, 16, 6, 16); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.translatesAutoresizingMaskIntoConstraints = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.showsVerticalScrollIndicator = NO; + _collectionView.showsHorizontalScrollIndicator = NO; + _collectionView.dataSource = self; + _collectionView.delegate = self; + [_collectionView registerClass:[FUBodyBeautyCell class] forCellWithReuseIdentifier:kFUBodyBeautyCellIdentifier]; + } + return _collectionView; +} + +- (FUSquareButton *)recoverButton { + if (!_recoverButton) { + _recoverButton = [[FUSquareButton alloc] initWithFrame:CGRectMake(0, 0, 44, 74)]; + [_recoverButton setTitle:FULocalizedString(@"恢复") forState:UIControlStateNormal]; + [_recoverButton setImage:[UIImage imageNamed:@"recover_item"] forState:UIControlStateNormal]; + _recoverButton.alpha = 0.6; + _recoverButton.userInteractionEnabled = NO; + [_recoverButton addTarget:self action:@selector(recoverAction) forControlEvents:UIControlEventTouchUpInside]; + _recoverButton.translatesAutoresizingMaskIntoConstraints = NO; + } + return _recoverButton; +} + +-(FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 16, CGRectGetWidth(self.view.bounds) - 116, 30)]; + [_slider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + [_slider addTarget:self action:@selector(sliderChangeEnded) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; + } + return _slider; +} + +@end diff --git a/FULiveDemo/Modules/BodyBeauty/ViewModel/FUBodyBeautyViewModel.h b/FULiveDemo/Modules/BodyBeauty/ViewModel/FUBodyBeautyViewModel.h new file mode 100644 index 00000000..e4b2c648 --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/ViewModel/FUBodyBeautyViewModel.h @@ -0,0 +1,30 @@ +// +// FUBodyBeautyViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FURenderViewModel.h" +#import "FUBodyBeautyModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUBodyBeautyViewModel : FURenderViewModel + +@property (nonatomic, copy, readonly) NSArray *bodyBeautyItems; +/// 是否所有值都是默认 +@property (nonatomic, assign, readonly) BOOL isDefaultValue; +/// 当前选中索引,默认为0 +@property (nonatomic, assign) NSInteger selectedIndex; + +/// 设置单项美体值 +/// @param value 当前选中单项的值 +- (void)setCurrentValue:(double)value; + +/// 恢复所有美肤值为默认 +- (void)recoverToDefault; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/BodyBeauty/ViewModel/FUBodyBeautyViewModel.m b/FULiveDemo/Modules/BodyBeauty/ViewModel/FUBodyBeautyViewModel.m new file mode 100644 index 00000000..25970738 --- /dev/null +++ b/FULiveDemo/Modules/BodyBeauty/ViewModel/FUBodyBeautyViewModel.m @@ -0,0 +1,118 @@ +// +// FUBodyBeautyViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUBodyBeautyViewModel.h" + +@interface FUBodyBeautyViewModel () + +@property (nonatomic, copy) NSArray *bodyBeautyItems; + +@end + +@implementation FUBodyBeautyViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"body_slim" ofType:@"bundle"]; + FUBodyBeauty *bodyBeauty = [[FUBodyBeauty alloc] initWithPath:path name:@"body_slim"]; + [FURenderKit shareRenderKit].bodyBeauty = bodyBeauty; + self.selectedIndex = 0; + } + return self; +} + +#pragma mark - Instance methods + +- (void)setCurrentValue:(double)value { + if (self.selectedIndex < 0 || self.selectedIndex >= self.bodyBeautyItems.count) { + return; + } + FUBodyBeautyModel *model = self.bodyBeautyItems[self.selectedIndex]; + model.currentValue = value; + [self setValue:model.currentValue forParts:model.parts]; +} + +- (void)recoverToDefault { + for (FUBodyBeautyModel *bodyBeauty in self.bodyBeautyItems) { + bodyBeauty.currentValue = bodyBeauty.defaultValue; + [self setValue:bodyBeauty.currentValue forParts:bodyBeauty.parts]; + } +} + +#pragma mark - Private methods + +- (void)setValue:(double)value forParts:(FUBodyBeautyParts)parts { + switch (parts) { + case FUBodyBeautyPartsSlimming:{ + [FURenderKit shareRenderKit].bodyBeauty.bodySlimStrength = value; + } + break; + case FUBodyBeautyPartsLongLegs:{ + [FURenderKit shareRenderKit].bodyBeauty.legSlimStrength = value; + } + break; + case FUBodyBeautyPartsWaist:{ + [FURenderKit shareRenderKit].bodyBeauty.waistSlimStrength = value; + } + break; + case FUBodyBeautyPartsShoulder:{ + [FURenderKit shareRenderKit].bodyBeauty.shoulderSlimStrength = value; + } + break; + case FUBodyBeautyPartsHip:{ + [FURenderKit shareRenderKit].bodyBeauty.hipSlimStrength = value; + } + break; + case FUBodyBeautyPartsHeadSlim:{ + [FURenderKit shareRenderKit].bodyBeauty.headSlim = value; + } + break; + case FUBodyBeautyPartsLegSlim:{ + [FURenderKit shareRenderKit].bodyBeauty.legSlim = value; + } + } +} + +#pragma mark - Getters + +- (NSArray *)bodyBeautyItems { + if (!_bodyBeautyItems) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"body_beauty" ofType:@"json"]; + NSData *data = [NSData dataWithContentsOfFile:path]; + NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + _bodyBeautyItems = [FUBodyBeautyModel mj_objectArrayWithKeyValuesArray:jsonArray]; + } + return _bodyBeautyItems; +} + +- (BOOL)isDefaultValue { + for (FUBodyBeautyModel *bodyBeauty in self.bodyBeautyItems) { + int currentIntValue = bodyBeauty.defaultValueInMiddle ? (int)(bodyBeauty.currentValue * 100 - 50) : (int)(bodyBeauty.currentValue * 100); + int defaultIntValue = bodyBeauty.defaultValueInMiddle ? (int)(bodyBeauty.defaultValue * 100 - 50) : (int)(bodyBeauty.defaultValue * 100); + if (currentIntValue != defaultIntValue) { + return NO; + } + } + return YES; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleBodyBeauty; +} + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace | FUAIModelTypeHuman;; +} + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsHuman; +} + +@end diff --git a/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.h b/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.h index 1b9fee25..78f55484 100644 --- a/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.h +++ b/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.h @@ -6,11 +6,12 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import "FUBaseViewController.h" +#import "FURenderViewController.h" +#import "FUDistortingMirrorViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUDistortingMirrorViewController : FUBaseViewController +@interface FUDistortingMirrorViewController : FURenderViewController @end diff --git a/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.m b/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.m index e24d0969..d0e552f8 100644 --- a/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.m +++ b/FULiveDemo/Modules/DistortingMirror/ViewController/FUDistortingMirrorViewController.m @@ -7,19 +7,19 @@ // #import "FUDistortingMirrorViewController.h" -#import "FUDistortingMirrorViewModel.h" -#import "FULocalDataManager.h" -#import @interface FUDistortingMirrorViewController () @property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUDistortingMirrorViewModel *viewModel; + +@property (nonatomic, strong, readonly) FUDistortingMirrorViewModel *viewModel; @end @implementation FUDistortingMirrorViewController +@dynamic viewModel; + - (void)viewDidLoad { [super viewDidLoad]; @@ -27,19 +27,13 @@ - (void)viewDidLoad { [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.view.mas_bottom); make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } + make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(84)); }]; self.itemsView.items = self.viewModel.distortingMirrorItems; self.itemsView.selectedIndex = 1; - - [self.viewModel loadItem:self.viewModel.distortingMirrorItems[1] completion:nil]; - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; } - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { @@ -62,12 +56,4 @@ - (FUItemsView *)itemsView { } return _itemsView; } - -- (FUDistortingMirrorViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUDistortingMirrorViewModel alloc] init]; - } - return _viewModel; -} - @end diff --git a/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.h b/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.h index 68676995..c6969b28 100644 --- a/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.h +++ b/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.h @@ -6,13 +6,13 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import +#import "FURenderViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUDistortingMirrorViewModel : NSObject +@interface FUDistortingMirrorViewModel : FURenderViewModel -@property (nonatomic, copy) NSArray *distortingMirrorItems; +@property (nonatomic, copy, readonly) NSArray *distortingMirrorItems; - (void)loadItem:(NSString *)item completion:(nullable void(^)(void))completion; diff --git a/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.m b/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.m index ab742e65..aa783ebb 100644 --- a/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.m +++ b/FULiveDemo/Modules/DistortingMirror/ViewModel/FUDistortingMirrorViewModel.m @@ -10,6 +10,8 @@ @interface FUDistortingMirrorViewModel () +@property (nonatomic, copy) NSArray *distortingMirrorItems; + @property (nonatomic, strong) FUSticker *currentItem; @end @@ -37,9 +39,15 @@ - (void)releaseItem { - (NSArray *)distortingMirrorItems { if (!_distortingMirrorItems) { - _distortingMirrorItems = @[@"resetItem", @"facewarp2", @"facewarp3", @"facewarp4", @"facewarp5", @"facewarp6"]; + _distortingMirrorItems = @[@"reset_item", @"facewarp2", @"facewarp3", @"facewarp4", @"facewarp5", @"facewarp6"]; } return _distortingMirrorItems; } +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleDistortingMirror; +} + @end diff --git a/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.h b/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.h index b0fc449f..7b7e4362 100644 --- a/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.h +++ b/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.h @@ -6,11 +6,12 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import "FUBaseViewController.h" +#import "FURenderViewController.h" +#import "FUExpressionRecognitionViewModel.h"" NS_ASSUME_NONNULL_BEGIN -@interface FUExpressionRecognitionViewController : FUBaseViewController +@interface FUExpressionRecognitionViewController : FURenderViewController @end diff --git a/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.m b/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.m index ee6ce97c..a0b96742 100644 --- a/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.m +++ b/FULiveDemo/Modules/ExpressionRecognition/ViewController/FUExpressionRecognitionViewController.m @@ -7,19 +7,18 @@ // #import "FUExpressionRecognitionViewController.h" -#import "FUExpressionRecognitionViewModel.h" -#import "FULocalDataManager.h" -#import @interface FUExpressionRecognitionViewController () @property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUExpressionRecognitionViewModel *viewModel; +@property (nonatomic, strong, readonly) FUExpressionRecognitionViewModel *viewModel; @end @implementation FUExpressionRecognitionViewController +@dynamic viewModel; + - (void)viewDidLoad { [super viewDidLoad]; @@ -27,19 +26,13 @@ - (void)viewDidLoad { [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.view.mas_bottom); make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } + make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(84)); }]; self.itemsView.items = self.viewModel.expressionRecognitionItems; self.itemsView.selectedIndex = 1; - - [self.viewModel loadItem:self.viewModel.expressionRecognitionItems[1] completion:nil]; - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; } - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { @@ -54,11 +47,11 @@ - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index }]; } // 道具提示处理 - NSString *hint = [FULocalDataManager stickerTipsJsonData][item]; - if (hint && hint.length != 0) { + if (self.viewModel.expressionRecognitionTips[item]) { + NSString *hint = self.viewModel.expressionRecognitionTips[item]; dispatch_async(dispatch_get_main_queue(), ^{ self.tipLabel.hidden = NO; - self.tipLabel.text = FUNSLocalizedString(hint, nil); + self.tipLabel.text = FULocalizedString(hint); [FUExpressionRecognitionViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; }); @@ -77,11 +70,4 @@ - (FUItemsView *)itemsView { return _itemsView; } -- (FUExpressionRecognitionViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUExpressionRecognitionViewModel alloc] init]; - } - return _viewModel; -} - @end diff --git a/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.h b/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.h index 9831967d..148f0a24 100644 --- a/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.h +++ b/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.h @@ -6,13 +6,15 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import +#import "FURenderViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUExpressionRecognitionViewModel : NSObject +@interface FUExpressionRecognitionViewModel : FURenderViewModel -@property (nonatomic, copy) NSArray *expressionRecognitionItems; +@property (nonatomic, copy, readonly) NSArray *expressionRecognitionItems; + +@property (nonatomic, copy, readonly) NSDictionary *expressionRecognitionTips; - (void)loadItem:(NSString *)item completion:(nullable void(^)(void))completion; diff --git a/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.m b/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.m index 54b45594..2cd8d777 100644 --- a/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.m +++ b/FULiveDemo/Modules/ExpressionRecognition/ViewModel/FUExpressionRecognitionViewModel.m @@ -10,6 +10,10 @@ @interface FUExpressionRecognitionViewModel () +@property (nonatomic, copy) NSArray *expressionRecognitionItems; + +@property (nonatomic, copy) NSDictionary *expressionRecognitionTips; + @property (nonatomic, strong) FUSticker *currentItem; @end @@ -37,9 +41,30 @@ - (void)releaseItem { - (NSArray *)expressionRecognitionItems { if (!_expressionRecognitionItems) { - _expressionRecognitionItems = @[@"resetItem", @"future_warrior", @"jet_mask", @"sdx2", @"luhantongkuan_ztt_fu", @"qingqing_ztt_fu", @"xiaobianzi_zh_fu", @"xiaoxueshen_ztt_fu"]; + _expressionRecognitionItems = @[@"reset_item", @"future_warrior", @"jet_mask", @"sdx2", @"luhantongkuan_ztt_fu", @"qingqing_ztt_fu", @"xiaobianzi_zh_fu", @"xiaoxueshen_ztt_fu"]; } return _expressionRecognitionItems; } +- (NSDictionary *)expressionRecognitionTips { + if (!_expressionRecognitionTips) { + _expressionRecognitionTips = @{ + @"future_warrior" : @"张嘴试试", + @"jet_mask" : @"鼓腮帮子", + @"sdx2" : @"皱眉触发", + @"luhantongkuan_ztt_fu" : @"眨一眨眼", + @"qingqing_ztt_fu" : @"嘟嘴试试", + @"xiaobianzi_zh_fu" : @"微笑触发", + @"xiaoxueshen_ztt_fu" : @"吹气触发" + }; + } + return _expressionRecognitionTips; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleExpressionRecognition; +} + @end diff --git a/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionCell.h b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionCell.h new file mode 100644 index 00000000..9e918ba1 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionCell.h @@ -0,0 +1,18 @@ +// +// FUFaceFusionCell.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/17. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUFaceFusionCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *imageView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionCell.m b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionCell.m new file mode 100644 index 00000000..714dcb4e --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionCell.m @@ -0,0 +1,37 @@ +// +// FUFaceFusionCell.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/17. +// + +#import "FUFaceFusionCell.h" + +@interface FUFaceFusionCell () + +@property (nonatomic, strong) UIImageView *imageView; + +@end + +@implementation FUFaceFusionCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.imageView]; + [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.contentView); + }]; + } + return self; +} + +- (UIImageView *)imageView { + if (!_imageView) { + _imageView = [[UIImageView alloc] init]; + _imageView.contentMode = UIViewContentModeScaleAspectFill; + } + return _imageView; +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionTipView.h b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionTipView.h new file mode 100644 index 00000000..1062ec91 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionTipView.h @@ -0,0 +1,26 @@ +// +// FUFaceFusionTipView.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/5. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUFaceFusionTipViewDelegate + +- (void)faceFusionTipViewDidClickComfirm; + +@end + +@interface FUFaceFusionTipView : UIView + +@property (nonatomic, strong, readonly) UILabel *tipLabel; + +@property (nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionTipView.m b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionTipView.m new file mode 100644 index 00000000..a56128c7 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/View/FUFaceFusionTipView.m @@ -0,0 +1,94 @@ +// +// FUFaceFusionTipView.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/5. +// + +#import "FUFaceFusionTipView.h" + +@interface FUFaceFusionTipView () + +@property (nonatomic, strong) UILabel *tipLabel; +@property (nonatomic, strong) UIImageView *tipImageView; +@property (nonatomic, strong) UIButton *tipButton; + +@end + +@implementation FUFaceFusionTipView + +- (instancetype)init { + self = [super init]; + if (self) { + [self configureUI]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self configureUI]; + } + return self; +} + +- (void)configureUI { + self.backgroundColor = [UIColor whiteColor]; + self.layer.masksToBounds = YES; + self.layer.cornerRadius = 10; + + [self addSubview:self.tipButton]; + [self.tipButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self); + make.height.mas_offset(45); + }]; + + [self addSubview:self.tipLabel]; + [self.tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.tipButton.mas_top).mas_offset(-12); + make.centerX.equalTo(self); + }]; + + [self addSubview:self.tipImageView]; + [self.tipImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.mas_top).mas_offset(40); + make.centerX.equalTo(self); + }]; +} + +- (void)tipAction { + if (self.delegate && [self.delegate respondsToSelector:@selector(faceFusionTipViewDidClickComfirm)]) { + [self.delegate faceFusionTipViewDidClickComfirm]; + } +} + +#pragma mark - Getters + +- (UIImageView *)tipImageView { + if (!_tipImageView) { + _tipImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face_fusion_no_tracked"]]; + } + return _tipImageView; +} + +- (UILabel *)tipLabel { + if (!_tipLabel) { + _tipLabel = [[UILabel alloc] init]; + _tipLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; + _tipLabel.textColor = FUColorFromHex(0x495562); + } + return _tipLabel; +} + +- (UIButton *)tipButton { + if (!_tipButton) { + _tipButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _tipButton.backgroundColor = FUColorFromHex(0x5E2EAA); + [_tipButton setTitle:FULocalizedString(@"知道了") forState:UIControlStateNormal]; + [_tipButton addTarget:self action:@selector(tipAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _tipButton; +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureResultViewController.h b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureResultViewController.h new file mode 100644 index 00000000..b9e6d29a --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureResultViewController.h @@ -0,0 +1,16 @@ +// +// FUFaceFusionCaptureResultViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUFaceFusionCaptureResultViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureResultViewController.m b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureResultViewController.m new file mode 100644 index 00000000..7b51fb98 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureResultViewController.m @@ -0,0 +1,69 @@ +// +// FUFaceFusionCaptureResultViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FUFaceFusionCaptureResultViewController.h" +#import "FUFaceFusionEffectViewController.h" +#import "FUFaceFusionManager.h" + +@interface FUFaceFusionCaptureResultViewController () + +@end + +@implementation FUFaceFusionCaptureResultViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; + imageView.contentMode = UIViewContentModeScaleAspectFit; + imageView.image = [FUFaceFusionManager sharedManager].image; + [self.view addSubview:imageView]; + + UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [cancelButton setImage:[UIImage imageNamed:@"face_fusion_save_close"] forState:UIControlStateNormal]; + [cancelButton addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:cancelButton]; + [cancelButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(self.view.mas_centerX).mas_offset(-86); + if (@available(iOS 11.0, *)) { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-33); + } else { + make.bottom.equalTo(self.view.mas_bottom).mas_offset(-33); + } + make.size.mas_offset(CGSizeMake(67, 67)); + }]; + + UIButton *confirmButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [confirmButton setImage:[UIImage imageNamed:@"face_fusion_save_done"] forState:UIControlStateNormal]; + [confirmButton addTarget:self action:@selector(confirmAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:confirmButton]; + [confirmButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(self.view.mas_centerX).mas_offset(86); + if (@available(iOS 11.0, *)) { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-33); + } else { + make.bottom.equalTo(self.view.mas_bottom).mas_offset(-33); + } + make.size.mas_offset(CGSizeMake(67, 67)); + }]; +} + +#pragma mark - Event response + +- (void)cancelAction:(UIButton *)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)confirmAction:(UIButton *)sender { + [FUFaceFusionManager sharedManager].imageSource = FUFaceFusionImageSourceCamera; + FUFaceFusionEffectViewController *effectController = [[FUFaceFusionEffectViewController alloc] init]; + [self.navigationController pushViewController:effectController animated:YES]; + // 保存到相册 + UIImageWriteToSavedPhotosAlbum([FUFaceFusionManager sharedManager].image, self, nil, NULL); +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureViewController.h b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureViewController.h new file mode 100644 index 00000000..61da5ba0 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureViewController.h @@ -0,0 +1,17 @@ +// +// FUFaceFusionCaptureViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FURenderViewController.h" +#import "FUFaceFusionCaptureViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUFaceFusionCaptureViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureViewController.m b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureViewController.m new file mode 100644 index 00000000..40f3c6e3 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCaptureViewController.m @@ -0,0 +1,93 @@ +// +// FUFaceFusionCaptureViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FUFaceFusionCaptureViewController.h" +#import "FUFaceFusionCaptureResultViewController.h" +#import "FUFaceFusionEffectViewController.h" + +#import "FUFaceFusionManager.h" +#import "UIImage+FU.h" + +#import + +@interface FUFaceFusionCaptureViewController () + +@end + +@implementation FUFaceFusionCaptureViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 人脸区域视图 + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face_fusion_contour"]]; + imageView.contentMode = UIViewContentModeScaleAspectFill; + imageView.frame = self.view.bounds; + [self.view insertSubview:imageView atIndex:1]; + + UILabel *tips = [[UILabel alloc] init]; + tips.text = FULocalizedString(@"对准线框 正脸拍摄"); + tips.textColor = [UIColor whiteColor]; + tips.font = [UIFont systemFontOfSize:13]; + [self.view addSubview:tips]; + [tips mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(self.view); + make.top.equalTo(self.noTrackLabel.mas_bottom).mas_offset(100); + }]; +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:nil]; + + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + // 图片处理 + image = [image fu_processedImage]; + [FUFaceFusionManager sharedManager].image = image; + [FUFaceFusionManager sharedManager].imageSource = FUFaceFusionImageSourceAlbum; + // 相册选择直接进入人脸融合效果页面 + FUFaceFusionEffectViewController *effectController = [[FUFaceFusionEffectViewController alloc] init]; + [self.navigationController pushViewController:effectController animated:YES]; +} + +#pragma mark - Overriding + +- (void)renderShouldCheckDetectingStatus:(FUDetectingParts)parts { + dispatch_async(dispatch_get_main_queue(), ^{ + BOOL result = [FURenderKitManager faceTracked]; + if (!result) { + self.noTrackLabel.text = FULocalizedString(@"未检测到人脸"); + } else { + if (self.viewModel.trackedCompleteFace) { + self.noTrackLabel.hidden = YES; + } else { + self.noTrackLabel.text = FULocalizedString(@"Incomplete_face"); + self.noTrackLabel.hidden = NO; + } + } + }); +} + +- (void)captureButtonDidTakePhoto { + UIImage *image = [FURenderKit captureImage]; + [FUFaceFusionManager sharedManager].image = image; + // 拍照需要先进入拍照结果页面 + FUFaceFusionCaptureResultViewController *controller = [[FUFaceFusionCaptureResultViewController alloc] init]; + [self.navigationController pushViewController:controller animated:YES]; +} + +- (void)headButtonViewSelImageAction:(UIButton *)btn { + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; + picker.allowsEditing = NO; + picker.mediaTypes = @[(NSString *)kUTTypeImage]; + [self presentViewController:picker animated:YES completion:nil]; +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCollectionViewController.h b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCollectionViewController.h new file mode 100644 index 00000000..37696051 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCollectionViewController.h @@ -0,0 +1,16 @@ +// +// FUFaceFusionCollectionViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/17. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUFaceFusionCollectionViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCollectionViewController.m b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCollectionViewController.m new file mode 100644 index 00000000..590fd24a --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionCollectionViewController.m @@ -0,0 +1,145 @@ +// +// FUFaceFusionCollectionViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/17. +// + +#import "FUFaceFusionCollectionViewController.h" +#import "FUFaceFusionCaptureViewController.h" +#import "FUFaceFusionCell.h" +#import "FUFaceFusionManager.h" + +@interface FUFaceFusionCollectionViewController () + +@property (nonatomic, strong) UIView *navigationView; + +@property (nonatomic, strong) UICollectionView *collectionView; + +@end + +@implementation FUFaceFusionCollectionViewController + +static NSString * const kFUFaceFusionCellIdentifier = @"FUFaceFusionCell"; + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureUI]; +} + +- (void)dealloc { + [FUFaceFusionManager destory]; +} + +#pragma mark - UI + +- (void)configureUI { + self.view.backgroundColor = [UIColor colorWithRed:9/255 green:0 blue:23/255 alpha:1.0]; + + [self.view addSubview:self.navigationView]; + + [self.view addSubview:self.collectionView]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.navigationView.mas_bottom); + make.leading.trailing.bottom.equalTo(self.view); + }]; +} + +#pragma mark - Event response + +- (void)backAction:(UIButton *)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +#pragma mark - UICollectionViewDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return [FUFaceFusionManager sharedManager].listItems.count; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUFaceFusionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUFaceFusionCellIdentifier forIndexPath:indexPath]; + cell.imageView.image = [UIImage imageNamed:[FUFaceFusionManager sharedManager].listItems[indexPath.item]]; + return cell; +} + +#pragma mark - UICollectionViewDelegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + [FUFaceFusionManager sharedManager].selectedIndex = indexPath.item; + FUFaceFusionCaptureViewController *controller = [[FUFaceFusionCaptureViewController alloc] initWithViewModel:[[FUFaceFusionCaptureViewModel alloc] init]]; + [self.navigationController pushViewController:controller animated:YES]; +} + + +#pragma mark - Getters + +- (UIView *)navigationView { + if (!_navigationView) { + _navigationView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 44 + FUStatusBarHeight)]; + _navigationView.backgroundColor = FUColorFromHex(0x030010); + + UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [backButton setImage:[UIImage imageNamed:@"back_item"] forState:UIControlStateNormal]; + [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; + [_navigationView addSubview:backButton]; + [backButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(_navigationView); + make.leading.equalTo(_navigationView); + make.size.mas_offset(CGSizeMake(54, 44)); + }]; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.text = FULocalizedString(@"海报换脸"); + titleLabel.font = [UIFont boldSystemFontOfSize:17]; + titleLabel.textColor = [UIColor whiteColor]; + [_navigationView addSubview:titleLabel]; + [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(_navigationView); + make.bottom.equalTo(_navigationView); + make.height.mas_offset(44); + }]; + + UIView *line = [[UIView alloc] init]; + line.backgroundColor = FUColorFromHex(0x302D33); + [_navigationView addSubview:line]; + [line mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(_navigationView); + make.height.mas_offset(1); + }]; + } + return _navigationView; +} + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + CGFloat width = (CGRectGetWidth(self.view.bounds) - 51) / 2.0; + CGFloat height = width * 1.105; + layout.itemSize = CGSizeMake(width, height); + layout.sectionInset = UIEdgeInsetsMake(17, 17, 17, 17); + layout.minimumLineSpacing = 17; + layout.minimumInteritemSpacing = 10; + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.backgroundColor = [UIColor colorWithRed:9/255 green:0 blue:23/255 alpha:1.0]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + [_collectionView registerClass:[FUFaceFusionCell class] forCellWithReuseIdentifier:kFUFaceFusionCellIdentifier]; + } + return _collectionView; +} + +#pragma mark - Overriding + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (BOOL)prefersStatusBarHidden { + return NO; +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionEffectViewController.h b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionEffectViewController.h new file mode 100644 index 00000000..400b2c79 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionEffectViewController.h @@ -0,0 +1,16 @@ +// +// FUFaceFusionEffectViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUFaceFusionEffectViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionEffectViewController.m b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionEffectViewController.m new file mode 100644 index 00000000..c029d9b7 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewController/FUFaceFusionEffectViewController.m @@ -0,0 +1,357 @@ +// +// FUFaceFusionEffectViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FUFaceFusionEffectViewController.h" +#import "FUFaceFusionTipView.h" + +#import "FUFaceFusionManager.h" + +@interface FUFaceFusionEffectViewController () + +@property (nonatomic, strong) UIButton *backButton; +@property (nonatomic, strong) UIButton *saveButton; +@property (nonatomic, strong) UIImageView *effectImageView; +@property (nonatomic, strong) FUItemsView *itemsView; +@property (nonatomic, strong) FUFaceFusionTipView *tipView; +@property (nonatomic, strong) UIView *maskView; + +@property (nonatomic, strong) FUPoster *faceFusion; +/// 多个人脸信息 +@property (nonatomic, strong) NSMutableArray *faceInformations; +/// 是否不完整人脸 +@property (nonatomic, assign) BOOL incompleteFace; + +@end + +@implementation FUFaceFusionEffectViewController + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureUI]; + + self.effectImageView.image = [FUFaceFusionManager sharedManager].image; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self startFusion]; +} + +#pragma mark - UI + +- (void)configureUI { + self.view.backgroundColor = [UIColor whiteColor]; + + [self.view addSubview:self.effectImageView]; + + [self.view addSubview:self.backButton]; + [self.backButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(self.view.mas_leading).mas_offset(15); + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).mas_offset(10); + } else { + make.top.equalTo(self.view.mas_top).mas_offset(10); + } + make.size.mas_offset(CGSizeMake(44, 44)); + }]; + + [self.view addSubview:self.saveButton]; + [self.saveButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.trailing.equalTo(self.view.mas_trailing).mas_offset(-15); + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).mas_offset(10); + } else { + make.top.equalTo(self.view.mas_top).mas_offset(10); + } + make.size.mas_offset(CGSizeMake(44, 44)); + }]; + + [self.view addSubview:self.itemsView]; + [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.view); + make.height.mas_offset(FUHeightIncludeBottomSafeArea(84)); + }]; + + [self.view addSubview:self.tipView]; + [self.tipView mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.view); + make.size.mas_offset(CGSizeMake(245, 225)); + }]; +} + +#pragma mark - Private methods + +- (void)startFusion { + [FURenderKitManager resetTrackedResult]; + NSString *imageName = [FUFaceFusionManager sharedManager].items[[FUFaceFusionManager sharedManager].selectedIndex]; + UIImage *templateImage = [UIImage imageNamed:imageName]; + [self.faceFusion renderWithInputImage:[FUFaceFusionManager sharedManager].image templateImage:templateImage]; +} + +- (void)replaceFusionWithIndex:(NSInteger)index { + if (index == [FUFaceFusionManager sharedManager].selectedIndex) { + return; + } + NSString *imageName = [FUFaceFusionManager sharedManager].items[[FUFaceFusionManager sharedManager].selectedIndex]; + UIImage *templateImage = [UIImage imageNamed:imageName]; + [self.faceFusion changeTempImage:templateImage]; +} + +/// 多人脸时添加选择蒙版 +- (void)addMasksWithFaces:(NSArray *)infos { + [self.view addSubview:self.maskView]; + + UIButton *tipButton = [[UIButton alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.maskView.frame) - 200)/2, 0, 200, 40)]; + [tipButton setTitle:FULocalizedString(@"检测到多人,请选择一人进行换脸") forState:UIControlStateNormal]; + [tipButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + tipButton.titleLabel.font = [UIFont systemFontOfSize:12]; + tipButton.contentEdgeInsets = UIEdgeInsetsMake(6, 0, 0, 0); + [tipButton setBackgroundImage:[UIImage imageNamed:@"face_fusion_tip"] forState:UIControlStateNormal]; + tipButton.enabled = NO; + [self.maskView addSubview:tipButton]; + + UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.maskView.bounds]; + for (NSInteger i = 0; i < infos.count; i++) { + FUFaceRectInfo *info = infos[i]; + CGRect rect = [self faceRectWithRect:info.rect]; + UIBezierPath *path1 = [[UIBezierPath bezierPathWithOvalInRect:rect] bezierPathByReversingPath]; + [path appendPath:path1]; + if (CGRectGetMaxY(rect) > tipButton.frame.origin.y) { + tipButton.frame = CGRectMake((self.maskView.frame.size.width - 200)/2, CGRectGetMaxY(rect) + 20, 200, 40); + } + info.rect = rect; + [self.faceInformations addObject:info]; + } + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + shapeLayer.path = path.CGPath; + self.maskView.layer.mask = shapeLayer; +} + + +/// 获取人脸框在手机屏幕上的位置 +- (CGRect)faceRectWithRect:(CGRect)rect { + //rect 是人脸在图片上的位置 所以人脸中心点x = (rect.origin.x + (rect.originx + rect.size.width))/2 , (originx + size.width) 为人脸x最大坐标,y最大坐标同理可得 + CGFloat centerX = (rect.origin.x + (rect.origin.x + rect.size.width)) * 0.5; + CGFloat centerY = (rect.origin.y + (rect.origin.y + rect.size.height)) * 0.5; + + CGFloat width = rect.size.width; + CGFloat height = rect.size.height; + + UIImage *image = [FUFaceFusionManager sharedManager].image; + + CGRect imageAspectRect = AVMakeRectWithAspectRatioInsideRect(image.size, self.effectImageView.bounds); + + CGFloat scaleW = imageAspectRect.size.width / image.size.width; + CGFloat scaleH = imageAspectRect.size.height / image.size.height; + + width = width * scaleW; + height = height * scaleH; + + /** + * centerY * scaleH 在图片centerY 相对坐标, + * centerY * scaleH - height / 2, 即人脸在图片的originY 相对位置 + * centerY * scaleH - height / 2 + iamgeAspectRect.origin.y 即人脸在图片的父视图的originY位置 + * */ + float y = centerY * scaleH - height / 2 + imageAspectRect.origin.y; + float x = centerX * scaleW - width / 2 + imageAspectRect.origin.x; + CGRect result = CGRectMake(x, y, width, height); + return result; +} + +#pragma mark - Event response + +- (void)backAction { + [self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES]; +} + +- (void)saveAction { + if (self.effectImageView.image) { + UIImageWriteToSavedPhotosAlbum(self.effectImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); + } +} + +- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { + if (error) { + [SVProgressHUD showError:FULocalizedString(@"保存图片失败")]; + } else { + [SVProgressHUD showSuccess:FULocalizedString(@"图片已保存到相册")]; + } +} + +/// 多人脸时选择某一个人脸 +- (void)selectFaceAction:(UITapGestureRecognizer *)tap { + CGPoint point = [tap locationInView:self.maskView]; + for (FUFaceRectInfo *info in self.faceInformations) { + CGRect rect = info.rect; + if (CGRectContainsPoint(rect, point)) { + [self.maskView removeFromSuperview]; + _maskView = nil; + [self.faceFusion chooseFaceID:info.faceId]; + break; + } + } +} + +#pragma mark - FUItemsViewDelegate + +- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { + if ([FUFaceFusionManager sharedManager].selectedIndex == index) { + return; + } + [self.itemsView startAnimation]; + [FUFaceFusionManager sharedManager].selectedIndex = index; + // 切换融合海报图片 + NSString *imageName = [FUFaceFusionManager sharedManager].items[index]; + UIImage *templateImage = [UIImage imageNamed:imageName]; + [self.faceFusion changeTempImage:templateImage]; +} + +#pragma mark - FUPosterProtocol + +- (void)poster:(FUPoster *)poster trackedFaceInfo:(FUFaceRectInfo *)faceInfo { + CGRect faceRect = faceInfo.rect; + UIImage *image = [FUFaceFusionManager sharedManager].image; + dispatch_async(dispatch_get_main_queue(), ^{ + if (faceRect.origin.x < 0 || faceRect.origin.y < 0 || (faceRect.origin.x + faceRect.size.width > image.size.width) || (faceRect.origin.y + faceRect.size.height > image.size.height)) { + self.incompleteFace = YES; + // 处理人脸不完整情况 + self.tipView.hidden = NO; + self.tipView.tipLabel.text = [FUFaceFusionManager sharedManager].imageSource == FUFaceFusionImageSourceCamera ? FULocalizedString(@"人脸不全,请重新拍摄") : FULocalizedString(@"人脸不全,请重新选择"); + } else { + self.incompleteFace = NO; + self.tipView.hidden = YES; + } + }); +} + +- (void)poster:(FUPoster *)poster trackedMultiFaceInfos:(NSArray *)faceInfos { + dispatch_async(dispatch_get_main_queue(), ^{ + [self addMasksWithFaces:faceInfos]; + }); +} + +- (void)poster:(FUPoster *)poster inputImageTrackErrorCode:(int)code { + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipView.hidden = NO; + self.saveButton.hidden = YES; + if (code == -1) { + self.tipView.tipLabel.text = [FUFaceFusionManager sharedManager].imageSource == FUFaceFusionImageSourceCamera ? FULocalizedString(@"人脸偏转角度过大,请重新拍摄") : FULocalizedString(@"人脸偏转角度过大,请重新选择"); + } else { + self.tipView.tipLabel.text = [FUFaceFusionManager sharedManager].imageSource == FUFaceFusionImageSourceCamera ? FULocalizedString(@"未检测到人脸,请重新拍摄") : FULocalizedString(@"未检测到人脸,请重新选择"); + } + }); +} + +- (void)poster:(FUPoster *)poster tempImageTrackErrorCode:(int)code { + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipView.hidden = NO; + self.saveButton.hidden = YES; + if (code == -1) { + self.tipView.tipLabel.text = [FUFaceFusionManager sharedManager].imageSource == FUFaceFusionImageSourceCamera ? FULocalizedString(@"人脸偏转角度过大,请重新拍摄") : FULocalizedString(@"人脸偏转角度过大,请重新选择"); + } else { + self.tipView.tipLabel.text = [FUFaceFusionManager sharedManager].imageSource == FUFaceFusionImageSourceCamera ? FULocalizedString(@"未检测到人脸,请重新拍摄") : FULocalizedString(@"未检测到人脸,请重新选择"); + } + }); +} + +- (void)poster:(FUPoster *)poster didRenderToImage:(UIImage *)image { + dispatch_async(dispatch_get_main_queue(), ^{ + self.saveButton.hidden = NO; + self.effectImageView.image = self.incompleteFace ? [FUFaceFusionManager sharedManager].image : image; + [self.itemsView stopAnimation]; + }); +} + +- (NSNumber *)renderOfWarp { + NSNumber *warpValue = [FUFaceFusionManager sharedManager].selectedIndex == 5 ? @0.2 : @0; + return warpValue; +} + +#pragma mark - FUFaceFusionTipViewDelegate + +- (void)faceFusionTipViewDidClickComfirm { + [self.navigationController popToViewController:self.navigationController.viewControllers[2] animated:YES]; +} + +#pragma mark - Getters + +- (UIButton *)backButton { + if (!_backButton) { + _backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_backButton setImage:[UIImage imageNamed:@"face_fusion_back"] forState:UIControlStateNormal]; + [_backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _backButton; +} + +- (UIButton *)saveButton { + if (!_saveButton) { + _saveButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_saveButton setImage:[UIImage imageNamed:@"face_fusion_save"] forState:UIControlStateNormal]; + [_saveButton addTarget:self action:@selector(saveAction) forControlEvents:UIControlEventTouchUpInside]; + _saveButton.hidden = YES; + } + return _saveButton; +} + +- (UIImageView *)effectImageView { + if (!_effectImageView) { + _effectImageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; + _effectImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _effectImageView; +} + +- (FUItemsView *)itemsView { + if (!_itemsView) { + _itemsView = [[FUItemsView alloc] init]; + _itemsView.delegate = self; + _itemsView.items = [FUFaceFusionManager sharedManager].iconItems; + _itemsView.selectedIndex = [FUFaceFusionManager sharedManager].selectedIndex; + } + return _itemsView; +} + +- (FUFaceFusionTipView *)tipView { + if (!_tipView) { + _tipView = [[FUFaceFusionTipView alloc] init]; + _tipView.delegate = self; + _tipView.hidden = YES; + } + return _tipView; +} + +- (UIView *)maskView { + if (!_maskView) { + _maskView = [[UIView alloc] initWithFrame:self.view.bounds]; + _maskView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6]; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectFaceAction:)]; + [_maskView addGestureRecognizer:tap]; + } + return _maskView; +} + +- (FUPoster *)faceFusion { + if (!_faceFusion) { + _faceFusion = [FUPoster itemWithPath:[[NSBundle mainBundle] pathForResource:@"change_face" ofType:@"bundle"] name:@"face_fusion"]; + _faceFusion.delegate = self; + } + return _faceFusion; +} + +- (NSMutableArray *)faceInformations { + if (!_faceInformations) { + _faceInformations = [[NSMutableArray alloc] init]; + } + return _faceInformations; +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionCaptureViewModel.h b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionCaptureViewModel.h new file mode 100644 index 00000000..c8ba5347 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionCaptureViewModel.h @@ -0,0 +1,16 @@ +// +// FUFaceFusionCaptureViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUFaceFusionCaptureViewModel : FURenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionCaptureViewModel.m b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionCaptureViewModel.m new file mode 100644 index 00000000..083c9185 --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionCaptureViewModel.m @@ -0,0 +1,31 @@ +// +// FUFaceFusionCaptureViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FUFaceFusionCaptureViewModel.h" + +@implementation FUFaceFusionCaptureViewModel + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleFaceFusion; +} + +- (BOOL)supportMediaRendering { + return YES; +} + +- (BOOL)supportPresetSelection { + return NO; +} + +- (BOOL)supportVideoRecording { + // 不需要视频录制 + return NO; +} + +@end diff --git a/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionManager.h b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionManager.h new file mode 100644 index 00000000..4e73ce1f --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionManager.h @@ -0,0 +1,38 @@ +// +// FUFaceFusionManager.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/// 换脸图片来源 +typedef NS_ENUM(NSUInteger, FUFaceFusionImageSource) { + FUFaceFusionImageSourceCamera, // 相机 + FUFaceFusionImageSourceAlbum // 相册 +}; + +@interface FUFaceFusionManager : NSObject + +@property (nonatomic, copy, readonly) NSArray *listItems; + +@property (nonatomic, copy, readonly) NSArray *iconItems; + +@property (nonatomic, copy, readonly) NSArray *items; +/// 选中的海报索引 +@property (nonatomic, assign) NSInteger selectedIndex; +/// 换脸图片 +@property (nonatomic, strong) UIImage *image; +/// 图片来源 +@property (nonatomic, assign) FUFaceFusionImageSource imageSource; + ++ (instancetype)sharedManager; + ++ (void)destory; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionManager.m b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionManager.m new file mode 100644 index 00000000..c6fab11f --- /dev/null +++ b/FULiveDemo/Modules/FaceFusion/ViewModel/FUFaceFusionManager.m @@ -0,0 +1,64 @@ +// +// FUFaceFusionManager.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/2. +// + +#import "FUFaceFusionManager.h" + +static dispatch_once_t onceToken; +static FUFaceFusionManager *instance = nil; + +@interface FUFaceFusionManager () + +@property (nonatomic, copy) NSArray *listItems; + +@property (nonatomic, copy) NSArray *iconItems; + +@property (nonatomic, copy) NSArray *items; + +@end + +@implementation FUFaceFusionManager + ++ (instancetype)sharedManager { + dispatch_once(&onceToken, ^{ + instance = [[FUFaceFusionManager alloc] init]; + }); + return instance; +} + ++ (void)destory { + onceToken = 0; + instance = nil; +} + +- (void)setImage:(UIImage *)image { + _image = [UIImage imageWithData:UIImageJPEGRepresentation(image, 1)]; +} + +#pragma mark - Getters + +- (NSArray *)items { + if (!_items) { + _items = @[@"poster1", @"poster2", @"poster3", @"poster4", @"poster5", @"poster6", @"poster7", @"poster8"]; + } + return _items; +} + +- (NSArray *)listItems { + if (!_listItems) { + _listItems = @[@"poster1_list", @"poster2_list", @"poster3_list", @"poster4_list", @"poster5_list", @"poster6_list", @"poster7_list", @"poster8_list"]; + } + return _listItems; +} + +- (NSArray *)iconItems { + if (!_iconItems) { + _iconItems = @[@"poster1_icon", @"poster2_icon", @"poster3_icon", @"poster4_icon", @"poster5_icon", @"poster6_icon", @"poster7_icon", @"poster8_icon"]; + } + return _iconItems; +} + +@end diff --git a/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.h b/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.h index ac15cb26..394927a7 100644 --- a/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.h +++ b/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.h @@ -6,11 +6,12 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import "FUBaseViewController.h" +#import "FURenderViewController.h" +#import "FUGestureRecognitionViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUGestureRecognitionViewController : FUBaseViewController +@interface FUGestureRecognitionViewController : FURenderViewController @end diff --git a/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.m b/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.m index 80010a0f..2bb8431f 100644 --- a/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.m +++ b/FULiveDemo/Modules/GestureRecognition/ViewController/FUGestureRecognitionViewController.m @@ -7,19 +7,18 @@ // #import "FUGestureRecognitionViewController.h" -#import "FUGestureRecognitionViewModel.h" -#import "FULocalDataManager.h" -#import @interface FUGestureRecognitionViewController () @property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUGestureRecognitionViewModel *viewModel; +@property (nonatomic, strong, readonly) FUGestureRecognitionViewModel *viewModel; @end @implementation FUGestureRecognitionViewController +@dynamic viewModel; + - (void)viewDidLoad { [super viewDidLoad]; @@ -27,19 +26,13 @@ - (void)viewDidLoad { [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.view.mas_bottom); make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } + make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(84)); }]; self.itemsView.items = self.viewModel.gestureRecognitionItems; self.itemsView.selectedIndex = 1; - - [self itemsView:self.itemsView didSelectItemAtIndex:1]; - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; } - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { @@ -54,11 +47,11 @@ - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index }]; } // 道具提示处理 - NSString *hint = [FULocalDataManager stickerTipsJsonData][item]; - if (hint && hint.length != 0) { + if (self.viewModel.gestureRecognitionTips[item]) { + NSString *hint = self.viewModel.gestureRecognitionTips[item]; dispatch_async(dispatch_get_main_queue(), ^{ self.tipLabel.hidden = NO; - self.tipLabel.text = FUNSLocalizedString(hint, nil); + self.tipLabel.text = FULocalizedString(hint); [FUGestureRecognitionViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; }); @@ -79,30 +72,4 @@ - (FUItemsView *)itemsView { return _itemsView; } -- (FUGestureRecognitionViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUGestureRecognitionViewModel alloc] init]; - } - return _viewModel; -} - -#pragma mark - Overrriding - -- (void)displayPromptText { - if (![self.baseManager handTrace]) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"未检测到手势",nil); - self.noTrackLabel.hidden = NO; - }); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.hidden = YES; - }); - } -} - -- (FUAIModelType)necessaryAIModelTypes { - return FUAIModelTypeFace | FUAIModelTypeHuman | FUAIModelTypeHand; -} - @end diff --git a/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.h b/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.h index a56f5b4c..d83e57b8 100644 --- a/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.h +++ b/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.h @@ -6,13 +6,15 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import +#import "FURenderViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUGestureRecognitionViewModel : NSObject +@interface FUGestureRecognitionViewModel : FURenderViewModel -@property (nonatomic, copy) NSArray *gestureRecognitionItems; +@property (nonatomic, copy, readonly) NSArray *gestureRecognitionItems; + +@property (nonatomic, copy, readonly) NSDictionary *gestureRecognitionTips; - (void)loadItem:(NSString *)item completion:(nullable void(^)(void))completion; diff --git a/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.m b/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.m index af657445..e15f5eb1 100644 --- a/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.m +++ b/FULiveDemo/Modules/GestureRecognition/ViewModel/FUGestureRecognitionViewModel.m @@ -10,6 +10,10 @@ @interface FUGestureRecognitionViewModel () +@property (nonatomic, copy) NSArray *gestureRecognitionItems; + +@property (nonatomic, copy) NSDictionary *gestureRecognitionTips; + @property (nonatomic, strong) FUSticker *currentItem; @end @@ -41,9 +45,38 @@ - (void)releaseItem { - (NSArray *)gestureRecognitionItems { if (!_gestureRecognitionItems) { - _gestureRecognitionItems = @[@"resetItem", @"ctrl_rain", @"ctrl_snow", @"ctrl_flower", @"ssd_thread_korheart", @"ssd_thread_six", @"ssd_thread_cute"]; + _gestureRecognitionItems = @[@"reset_item", @"ctrl_rain_740", @"ctrl_snow_740", @"ctrl_flower_740", @"ssd_thread_korheart", @"ssd_thread_six", @"ssd_thread_cute"]; } return _gestureRecognitionItems; } +- (NSDictionary *)gestureRecognitionTips { + if (!_gestureRecognitionTips) { + _gestureRecognitionTips = @{ + @"ssd_thread_thumb" : @"竖个拇指", + @"ssd_thread_six" : @"比个六", + @"ssd_thread_cute" : @"双拳靠近脸颊卖萌", + @"ssd_thread_korheart" : @"单手手指比心", + @"ctrl_rain_740" : @"推出手掌", + @"ctrl_snow_740" : @"推出手掌", + @"ctrl_flower_740" : @"推出手掌" + }; + } + return _gestureRecognitionTips; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleGestureRecognition; +} + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace | FUAIModelTypeHuman | FUAIModelTypeHand; +} + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsHand; +} + @end diff --git a/FULiveDemo/Modules/GreenScreen/FUGreenScreenDefine.h b/FULiveDemo/Modules/GreenScreen/FUGreenScreenDefine.h deleted file mode 100644 index da710741..00000000 --- a/FULiveDemo/Modules/GreenScreen/FUGreenScreenDefine.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FUGreenScreenDefine.h -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#ifndef FUGreenScreenDefine_h -#define FUGreenScreenDefine_h - -typedef NS_ENUM(NSUInteger, GREENSCREENTYPE) { - GREENSCREENTYPE_keyColor, //颜色 - GREENSCREENTYPE_chromaThres, //色度最大容差 - GREENSCREENTYPE_chromaThresT, //色度最小限差 - GREENSCREENTYPE_alphaL, //祛色度 - GREENSCREENTYPE_safeArea, //安全区域 - GREENSCREENTYPE_Max -}; - -#endif /* FUGreenScreenDefine_h */ diff --git a/FULiveDemo/Modules/GreenScreen/Manager/FUGreenScreenManager.h b/FULiveDemo/Modules/GreenScreen/Manager/FUGreenScreenManager.h deleted file mode 100644 index 4f224f66..00000000 --- a/FULiveDemo/Modules/GreenScreen/Manager/FUGreenScreenManager.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// FUGreenScreem.h -// FULiveDemo -// -// Created by Chen on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -#import "FUGreenScreenDefine.h" -#import "FUGreenScreenBgModel.h" - -@class FUGreenScreenModel; -NS_ASSUME_NONNULL_BEGIN - -@interface FUGreenScreenManager : FUMetaManager -@property (nonatomic, strong, nullable) FUGreenScreen *greenScreen; - -@property (nonatomic, strong, readonly) NSArray *dataArray; - -@property (nonatomic, strong, readonly) NSArray *bgDataArray; - - -- (void)setGreenScreenModel:(FUGreenScreenModel *)model; - -- (void)updateCurrentGreenScreen; - -//设置颜色值 -- (void)setGreenScreenWithColor:(UIColor *)color; - -/// 更新安全区域图片 -- (void)updateSafeAreaImage:(nullable UIImage *)image; - -/// 保存本地安全区域图片 -+ (BOOL)saveLocalSafeAreaImage:(UIImage *)image; - -/// 获取本地安全区域图片 -+ (UIImage *)localSafeAreaImage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/Manager/FUGreenScreenManager.m b/FULiveDemo/Modules/GreenScreen/Manager/FUGreenScreenManager.m deleted file mode 100644 index 4ee01d0d..00000000 --- a/FULiveDemo/Modules/GreenScreen/Manager/FUGreenScreenManager.m +++ /dev/null @@ -1,157 +0,0 @@ -// -// FULVMuManager.m -// FULiveDemo -// -// Created by Chen on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUGreenScreenManager.h" -#import "FUGreenScreenModel.h" -#import "FUGreenScreenBgModel.h" - -@interface FUGreenScreenManager () -@property (nonatomic, strong) NSArray *dataArray; -@property (nonatomic, strong) NSArray *bgDataArray; -@end - -@implementation FUGreenScreenManager - -- (instancetype)init { - self = [super init]; - if (self) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"green_screen" ofType:@"bundle"]; - self.greenScreen = [[FUGreenScreen alloc] initWithPath:path name:@"green_screen"]; - self.greenScreen.chromaThres = 0.5; - self.greenScreen.chromaThrest = 0.3; - self.greenScreen.alphal = 0.67; - [self loadItem]; - - self.dataArray = [self createUIData]; - self.bgDataArray = [self createBgData]; - } - return self; -} - -- (NSArray *)createUIData { - NSArray *prams = @[@(GREENSCREENTYPE_keyColor),@(GREENSCREENTYPE_chromaThres),@(GREENSCREENTYPE_chromaThresT),@(GREENSCREENTYPE_alphaL), @(GREENSCREENTYPE_safeArea)]; - NSArray *titelArr = @[@"关键颜色", @"相似度", @"平滑", @"祛色度", @"安全区域"]; - NSArray *imageArr = @[@"demo_icon_key_color", @"demo_icon_similarityr", @"demo_icon_smooth", @"demo_icon_transparency", @"demo_icon_safe_area"]; - - NSArray *defaultValueArr = @[@(0), @(0.5), @(0.3), @(0.67), @0]; - - NSMutableArray *tempArr = [NSMutableArray array]; - for (int i = 0; i < GREENSCREENTYPE_Max; i ++) { - FUGreenScreenModel *model = [[FUGreenScreenModel alloc] init]; - model.type = [[prams objectAtIndex:i] unsignedIntValue]; - model.title = [titelArr objectAtIndex: i]; - model.imageName = [imageArr objectAtIndex:i]; - model.value = [defaultValueArr objectAtIndex:i]; - model.defaultValue = model.value; - [tempArr addObject:model]; - } - return [tempArr copy]; -} - - -- (NSArray *)createBgData { - FUGreenScreenBgModel *param0 = [[FUGreenScreenBgModel alloc] init]; - param0.title = @"取消"; - param0.imageName = @"makeup_noitem"; - - FUGreenScreenBgModel *param1 = [[FUGreenScreenBgModel alloc] init]; - param1.title = @"沙滩"; - param1.videoPath = @"beach"; - param1.imageName = @"demo_bg_beach"; - - FUGreenScreenBgModel *param2 = [[FUGreenScreenBgModel alloc] init]; - param2.title = @"教室"; - param2.videoPath = @"classroom"; - param2.imageName = @"demo_bg_classroom"; - FUGreenScreenBgModel *param3 = [[FUGreenScreenBgModel alloc] init]; - param3.title = @"森林"; - param3.videoPath = @"springForest"; - param3.imageName = @"demo_bg_forest"; - - FUGreenScreenBgModel *param4 = [[FUGreenScreenBgModel alloc] init]; - param4.title = @"水墨画"; - param4.videoPath = @"inkPainting"; - param4.imageName = @"demo_bg_ink painting"; - - FUGreenScreenBgModel *param5 = [[FUGreenScreenBgModel alloc] init]; - param5.title = @"科技"; - param5.videoPath = @"science"; - param5.imageName = @"demo_bg_science"; - - NSArray *params = @[param0,param5,param1,param2,param4,param3]; - return params; -} - -- (void)setGreenScreenModel:(FUGreenScreenModel *)model { - switch (model.type) { - case GREENSCREENTYPE_keyColor: - [self setGreenScreenWithColor:model.value]; - break; - case GREENSCREENTYPE_chromaThres: - self.greenScreen.chromaThres = [model.value floatValue]; - break; - case GREENSCREENTYPE_chromaThresT: - self.greenScreen.chromaThrest = [model.value floatValue]; - break; - case GREENSCREENTYPE_alphaL: - self.greenScreen.alphal = [model.value floatValue]; - break; - default: - break; - } -} - -- (void)updateCurrentGreenScreen { - self.dataArray[GREENSCREENTYPE_chromaThres].value = @(self.greenScreen.chromaThres); - self.dataArray[GREENSCREENTYPE_chromaThresT].value = @(self.greenScreen.chromaThrest); - self.dataArray[GREENSCREENTYPE_alphaL].value = @(self.greenScreen.alphal); -} - -//设置颜色值 -- (void)setGreenScreenWithColor:(UIColor *)color { - if ([color isKindOfClass:[UIColor class]]) { - CGFloat r,g,b,a; - [color getRed:&r green:&g blue:&b alpha:&a]; - self.greenScreen.keyColor = FUColorMake(round(r * 255), round(g * 255), round(b * 255), round(a * 255)); - } -} - -- (void)updateSafeAreaImage:(UIImage *)image { - self.greenScreen.safeAreaImage = image; -} - -- (void)loadItem { - [FURenderKit shareRenderKit].greenScreen = self.greenScreen; - for (FUGreenScreenModel *model in self.dataArray) { - [self setGreenScreenModel:model]; - } -} - -- (void)releaseItem { - [[FURenderKit shareRenderKit].greenScreen stopVideoDecode]; - [FURenderKit shareRenderKit].greenScreen = nil; -} - -#pragma mark - Class methods -+ (BOOL)saveLocalSafeAreaImage:(UIImage *)image { - if (!image) { - return NO; - } - NSString *localPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"safeArea.png"]; - return [UIImagePNGRepresentation(image) writeToFile:localPath atomically:YES]; -} - -+ (UIImage *)localSafeAreaImage { - NSString *localPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"safeArea.png"]; - if (![[NSFileManager defaultManager] fileExistsAtPath:localPath]) { - return nil; - } - return [UIImage imageWithContentsOfFile:localPath]; -} - -@end diff --git a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenBgModel.h b/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenBgModel.h deleted file mode 100644 index 38990701..00000000 --- a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenBgModel.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FUGreenScreenBgModel.h -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import -#import "FUBaseUIModelProtocol.h" -NS_ASSUME_NONNULL_BEGIN - -@interface FUGreenScreenBgModel : NSObject -//录像文件名称 -@property (nonatomic, copy) NSString *videoPath; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenBgModel.m b/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenBgModel.m deleted file mode 100644 index 92166e85..00000000 --- a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenBgModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// FUGreenScreenBgModel.m -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUGreenScreenBgModel.h" - -@implementation FUGreenScreenBgModel -@synthesize title, imageName; -@end diff --git a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenModel.h b/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenModel.h deleted file mode 100644 index 46f750eb..00000000 --- a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenModel.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// FUGreenScreenModel.h -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import -#import "FUBaseUIModelProtocol.h" -#import "FUGreenScreenDefine.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUGreenScreenModel : NSObject -@property (nonatomic, assign) GREENSCREENTYPE type; - -/* 双向的参数 0.5是原始值*/ -@property (nonatomic,assign) BOOL iSStyle101; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenModel.m b/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenModel.m deleted file mode 100644 index 92be4c21..00000000 --- a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// FUGreenScreenModel.m -// FULiveDemo -// -// Created by Chen on 2021/3/5. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUGreenScreenModel.h" - -@implementation FUGreenScreenModel -@synthesize title, imageName, value, defaultValue; -@end diff --git a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenSafeAreaModel.h b/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenSafeAreaModel.h deleted file mode 100644 index 312a84c0..00000000 --- a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenSafeAreaModel.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FUGreenScreenSafeAreaModel.h -// FULiveDemo -// -// Created by 项林平 on 2021/8/10. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUGreenScreenSafeAreaModel : NSObject - -@property (nonatomic, strong) UIImage *iconImage; -@property (nonatomic, strong) UIImage *effectImage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenSafeAreaModel.m b/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenSafeAreaModel.m deleted file mode 100644 index 8c146d6a..00000000 --- a/FULiveDemo/Modules/GreenScreen/Model/FUGreenScreenSafeAreaModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// FUGreenScreenSafeAreaModel.m -// FULiveDemo -// -// Created by 项林平 on 2021/8/10. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUGreenScreenSafeAreaModel.h" - -@implementation FUGreenScreenSafeAreaModel - -@end diff --git a/FULiveDemo/Modules/GreenScreen/VC/FUGreenScreenRenderMediaViewController.h b/FULiveDemo/Modules/GreenScreen/VC/FUGreenScreenRenderMediaViewController.h deleted file mode 100644 index 293dfa8a..00000000 --- a/FULiveDemo/Modules/GreenScreen/VC/FUGreenScreenRenderMediaViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUGreenScreenRenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2021/12/9. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUGreenScreenRenderMediaViewController : FURenderMediaViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/VC/FUGreenScreenRenderMediaViewController.m b/FULiveDemo/Modules/GreenScreen/VC/FUGreenScreenRenderMediaViewController.m deleted file mode 100644 index 8a0c14fc..00000000 --- a/FULiveDemo/Modules/GreenScreen/VC/FUGreenScreenRenderMediaViewController.m +++ /dev/null @@ -1,238 +0,0 @@ -// -// FUGreenScreenRenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2021/12/9. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUGreenScreenRenderMediaViewController.h" - -#import "FULvMuView.h" - -#import "FUGreenScreenManager.h" - -@interface FUGreenScreenRenderMediaViewController () - -@property (nonatomic, strong) FULvMuView *greenScreenView; -@property (nonatomic, strong) FUGreenScreenManager *greenScreenManager; - -@property (nonatomic, strong) UIPanGestureRecognizer *panGesture; -@property (nonatomic, strong) UIPinchGestureRecognizer *pinchGesture; - -/// 取色点 -@property (nonatomic, assign) CGPoint currentTouchPoint; - -@end - -@implementation FUGreenScreenRenderMediaViewController - - -#pragma mark - Life cycle - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.view addSubview:self.greenScreenView]; - [self.greenScreenView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.height.mas_offset(iPhoneXStyle ? 229 : 195); - }]; - - self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureAction:)]; - self.panGesture.delegate = self; - [self.view addGestureRecognizer:self.panGesture]; - - self.pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureAction:)]; - self.pinchGesture.delegate = self; - [self.view addGestureRecognizer:self.pinchGesture]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [self lvmuViewShowTopView:YES]; - [self.greenScreenManager loadItem]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - [self.greenScreenView destoryLvMuView]; - [self.greenScreenManager releaseItem]; - - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil]; -} - -#pragma mark - Event response - -- (void)didEnterBackground { - if (!self.greenScreenManager.greenScreen.pause && self.greenScreenManager.greenScreen.path) { - self.greenScreenManager.greenScreen.pause = YES; - } -} - -- (void)willEnterForeground { - if (self.greenScreenManager.greenScreen.pause && self.greenScreenManager.greenScreen.path) { - self.greenScreenManager.greenScreen.pause = NO; - } -} - -- (void)panGestureAction:(UIPanGestureRecognizer *)pan { - UIView *view = pan.view; - if (pan.state == UIGestureRecognizerStateBegan || pan.state == UIGestureRecognizerStateChanged){ - CGPoint translation = [pan translationInView:view.superview]; - FUGLDisplayViewOrientation orientation = self.displayView.origintation; - CGFloat dx = translation.x/CGRectGetWidth(self.view.bounds); - CGFloat dy = translation.y/CGRectGetHeight(self.view.bounds); - switch (orientation) { - case FUGLDisplayViewOrientationPortrait: - self.greenScreenManager.greenScreen.center = CGPointMake(self.greenScreenManager.greenScreen.center.x + dx, self.greenScreenManager.greenScreen.center.y + dy); - break; - case FUGLDisplayViewOrientationPortraitUpsideDown: - self.greenScreenManager.greenScreen.center = CGPointMake(self.greenScreenManager.greenScreen.center.x - dx, self.greenScreenManager.greenScreen.center.y - dy); - break; - case FUGLDisplayViewOrientationLandscapeRight: - self.greenScreenManager.greenScreen.center = CGPointMake(self.greenScreenManager.greenScreen.center.x + dy, self.greenScreenManager.greenScreen.center.y - dx); - break; - case FUGLDisplayViewOrientationLandscapeLeft: - self.greenScreenManager.greenScreen.center = CGPointMake(self.greenScreenManager.greenScreen.center.x - dy, self.greenScreenManager.greenScreen.center.y + dx); - break; - default: - self.greenScreenManager.greenScreen.center = CGPointMake(self.greenScreenManager.greenScreen.center.x + dx, self.greenScreenManager.greenScreen.center.y + dy); - break; - } - [pan setTranslation:CGPointZero inView:view.superview]; - } -} - -- (void)pinchGestureAction:(UIPinchGestureRecognizer *)pinch { - if (pinch.state == UIGestureRecognizerStateBegan || pinch.state == UIGestureRecognizerStateChanged) { - self.greenScreenManager.greenScreen.scale *= pinch.scale; - pinch.scale = 1; - } -} - -#pragma mark - FURenderMediaProtocol - -- (BOOL)isNeedTrack { - return NO; -} - -- (void)renderMediaDidOutputImage:(UIImage *)image { - if (!CGPointEqualToPoint(CGPointZero, self.currentTouchPoint)) { - dispatch_async(dispatch_get_main_queue(), ^{ - UIColor *color = [self.displayView colorInPoint:self.currentTouchPoint]; - [self.greenScreenView setTakeColor:color]; - }); - } -} - -- (void)renderMediaDidOutputPixelBuffer:(CVPixelBufferRef)pixelBuffer { - if (!CGPointEqualToPoint(CGPointZero, self.currentTouchPoint)) { - dispatch_async(dispatch_get_main_queue(), ^{ - UIColor *color = [self.displayView colorInPoint:self.currentTouchPoint]; - [self.greenScreenView setTakeColor:color]; - }); - } -} - -#pragma mark - FULvMuViewDelegate - --(void)beautyCollectionView:(FULvMuView *)beautyView didSelectedParam:(FUGreenScreenModel *)param{ - [self.greenScreenManager setGreenScreenModel:param]; -} - -- (void)lvmuViewDidSelectSafeArea:(FUGreenScreenSafeAreaModel *)model { - if (model.effectImage) { - [self.greenScreenManager updateSafeAreaImage:model.effectImage]; - } -} - -- (void)lvmuViewDidCancelSafeArea { - [self.greenScreenManager updateSafeAreaImage:nil]; -} - -- (void)colorDidSelected:(UIColor *)color { - [self.greenScreenManager setGreenScreenWithColor:color]; - // 设置关键颜色后FURenderKit层的相似度、平滑度、祛色度可能自动发生变化,所以需要更新程度值 - [self.greenScreenManager updateCurrentGreenScreen]; - // 刷新UI - [self.greenScreenView reloadDataSoure:self.greenScreenManager.dataArray]; -} - -- (void)lvmuViewShowTopView:(BOOL)shown { - [self refreshDownloadButtonTransformWithHeight:shown ? 190 : 49 show:shown]; -} - -- (void)didSelectedParam:(FUGreenScreenBgModel *)param { - if(param.videoPath){ - NSString *urlStr = [[NSBundle mainBundle] pathForResource:param.videoPath ofType:@"mp4"]; - self.greenScreenManager.greenScreen.videoPath = urlStr; - }else{ - self.greenScreenManager.greenScreen.videoPath = nil; - [self.greenScreenManager.greenScreen stopVideoDecode]; - } -} - -- (void)takeColorState:(FUTakeColorState)state { - self.greenScreenManager.greenScreen.cutouting = state == FUTakeColorStateRunning; - // 取色的时候取消缩放和移动手势 - self.panGesture.enabled = state == FUTakeColorStateStop; - self.pinchGesture.enabled = state == FUTakeColorStateStop; -} - -- (void)getPoint:(CGPoint)point { - self.currentTouchPoint = point; -} - -- (UIView *)takeColorBgView { - return self.displayView; -} - -#pragma mark - Gesture recognizer delegate - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { - return ![touch.view isDescendantOfView:self.greenScreenView]; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - return YES; -} - -#pragma mark - Getters - -- (FULvMuView *)greenScreenView { - if (!_greenScreenView) { - _greenScreenView = [[FULvMuView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), iPhoneXStyle ? 229 : 195)]; - _greenScreenView.mDelegate = self; - [_greenScreenView reloadDataSoure:self.greenScreenManager.dataArray]; - [_greenScreenView reloadBgDataSource:self.greenScreenManager.bgDataArray]; - // 毛玻璃效果 - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur]; - effectView.frame = _greenScreenView.frame; - [_greenScreenView addSubview:effectView]; - [_greenScreenView sendSubviewToBack:effectView]; - } - return _greenScreenView; -} - -- (FUGreenScreenManager *)greenScreenManager { - if (!_greenScreenManager) { - _greenScreenManager = [[FUGreenScreenManager alloc] init]; - _greenScreenManager.greenScreen.keyColor = FUColorMakeWithUIColor([UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0]); - _greenScreenManager.greenScreen.center = CGPointMake(0.5, 0.5); - //默认取教室的背景录像 - FUGreenScreenBgModel *param = [_greenScreenManager.bgDataArray objectAtIndex:3]; - NSString *urlStr = [[NSBundle mainBundle] pathForResource:param.videoPath ofType:@"mp4"]; - _greenScreenManager.greenScreen.videoPath = urlStr; - } - return _greenScreenManager; -} - -@end diff --git a/FULiveDemo/Modules/GreenScreen/VC/FULvMuViewController.h b/FULiveDemo/Modules/GreenScreen/VC/FULvMuViewController.h deleted file mode 100644 index 704afa8d..00000000 --- a/FULiveDemo/Modules/GreenScreen/VC/FULvMuViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FULvMuViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2020/8/13. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FULvMuViewController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/VC/FULvMuViewController.m b/FULiveDemo/Modules/GreenScreen/VC/FULvMuViewController.m deleted file mode 100644 index 10d73d80..00000000 --- a/FULiveDemo/Modules/GreenScreen/VC/FULvMuViewController.m +++ /dev/null @@ -1,291 +0,0 @@ -// -// FULvMuViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2020/8/13. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FULvMuViewController.h" -#import "FUSelectedImageController.h" -#import "FULvMuView.h" -#import "FUGreenScreenManager.h" - -#import - -@interface FULvMuViewController (){ - BOOL isRender; - CGPoint _currPoint; -} -@property(strong,nonatomic) FULvMuView *lvmuEditeView; -@property (nonatomic, strong) UIGestureRecognizer *panGesture; -@property (nonatomic, strong) UIGestureRecognizer *pinchGesture; - -@property (nonatomic, strong) FUGreenScreenManager *greenScreenManager; - -@end - -@implementation FULvMuViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - isRender = YES; - // Do any additional setup after loading the view. - _lvmuEditeView = [[FULvMuView alloc] initWithFrame:CGRectZero]; - _lvmuEditeView.mDelegate = self; - [self.view addSubview:_lvmuEditeView]; - [_lvmuEditeView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.bottom.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(195 + 34); - }else{ - make.height.mas_equalTo(195); - } - }]; - - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - [_lvmuEditeView addSubview:effectview]; - [_lvmuEditeView sendSubviewToBack:effectview]; - /* 磨玻璃 */ - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(_lvmuEditeView); - }]; - - self.headButtonView.selectedImageBtn.hidden = NO; - - /* 添加手势改变input size */ - [self initMovementGestures]; - - /* 提示 */ - [self showToast]; - - self.greenScreenManager = [[FUGreenScreenManager alloc] init]; - - self.greenScreenManager.greenScreen.center = CGPointMake(0.5, 0.5); - //默认取教室的背景录像 - FUGreenScreenBgModel *param = [self.greenScreenManager.bgDataArray objectAtIndex:3]; - NSString *urlStr = [[NSBundle mainBundle] pathForResource:param.videoPath ofType:@"mp4"]; - self.greenScreenManager.greenScreen.videoPath = urlStr; - - [self colorDidSelected:[UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0]]; - - [_lvmuEditeView reloadDataSoure:self.greenScreenManager.dataArray]; - [_lvmuEditeView reloadBgDataSource:self.greenScreenManager.bgDataArray]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationDidBecomeActiveNotification object:nil]; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; -} - --(void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - [self.greenScreenManager loadItem]; - if (self.greenScreenManager.greenScreen.pause && self.greenScreenManager.greenScreen.path) { - [self.greenScreenManager.greenScreen startVideoDecode]; - } - [self lvmuViewShowTopView:!self.lvmuEditeView.isHidenTop]; -} - --(void)viewWillDisappear:(BOOL)animated{ - [super viewWillDisappear:animated]; - [self.greenScreenManager releaseItem]; - [self.lvmuEditeView destoryLvMuView]; - if (!self.greenScreenManager.greenScreen.pause && self.greenScreenManager.greenScreen.path) { - self.greenScreenManager.greenScreen.pause = YES; - } -} - --(void)initMovementGestures { - self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; - self.panGesture.delegate = self; - [self.view addGestureRecognizer:self.panGesture]; - // - self.pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)]; - self.pinchGesture.delegate = self; - [self.view addGestureRecognizer:self.pinchGesture]; -} - - --(void)showToast { - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:FUNSLocalizedString(@"请使用纯色背景拍摄,推荐绿色幕布效果最佳",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"我知道了",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - [FURenderKit shareRenderKit].pause = NO; - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:certainAction]; - - [self.navigationController presentViewController:alertCon animated:YES completion:^{ - }]; -} - -#pragma mark - Overriding - --(void)displayPromptText{ - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.hidden = YES; - }); -} - -- (void)didClickSelPhoto { - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - vc.type = FUModuleTypeGreenScreen; - [self.navigationController pushViewController:vc animated:YES]; -} - --(void)headButtonViewBackAction:(UIButton *)btn{ - [self.lvmuEditeView destoryLvMuView]; - [super headButtonViewBackAction:btn]; -} - -- (void)didEnterBackground { - if (!self.greenScreenManager.greenScreen.pause && self.greenScreenManager.greenScreen.path) { - self.greenScreenManager.greenScreen.pause = YES; - } -} - -- (void)willEnterForeground{ - if (self.greenScreenManager.greenScreen.pause && self.greenScreenManager.greenScreen.path) { - [self.greenScreenManager.greenScreen startVideoDecode]; - } -} - -- (BOOL)needsPresetSelections { - return YES; -} - -#pragma mark - FULvMuViewDelegate - --(void)beautyCollectionView:(FULvMuView *)beautyView didSelectedParam:(FUGreenScreenModel *)param { - [self.greenScreenManager setGreenScreenModel:param]; -} - -- (void)lvmuViewDidSelectSafeArea:(FUGreenScreenSafeAreaModel *)model { - if (model.effectImage) { - [self.greenScreenManager updateSafeAreaImage:model.effectImage]; - } -} - -- (void)lvmuViewDidCancelSafeArea { - [self.greenScreenManager updateSafeAreaImage:nil]; -} - --(void)colorDidSelected:(UIColor *)color { - [self.greenScreenManager setGreenScreenWithColor:color]; - NSLog(@"取色值 %@",color); - // 设置关键颜色后FURenderKit层的相似度、平滑度、祛色度可能自动发生变化,所以需要更新程度值 - [self.greenScreenManager updateCurrentGreenScreen]; - // 刷新UI - [self.lvmuEditeView reloadDataSoure:self.greenScreenManager.dataArray]; -} - --(void)lvmuViewShowTopView:(BOOL)shown{ - float h = shown?190:49; - [self setPhotoScaleWithHeight:h show:shown]; -} - - -- (void)getPoint:(CGPoint)point { - _currPoint = point; -} - -//从外面获取全局的取点背景view,为了修复取点view加载Window上的系统兼容性问题 -- (UIView *)takeColorBgView { - return self.renderView; -} - -- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput { - if (!CGPointEqualToPoint(CGPointZero, _currPoint)) { - dispatch_async(dispatch_get_main_queue(), ^{ - UIColor *color = [self.renderView colorInPoint:_currPoint]; - [self.lvmuEditeView setTakeColor:color]; - }); - } - [super renderKitDidRenderToOutput:renderOutput]; -} - -- (void)setPhotoScaleWithHeight:(CGFloat)height show:(BOOL)shown { - if (shown) { - - CGAffineTransform photoTransform0 = CGAffineTransformMakeTranslation(0, height * -0.8) ; - CGAffineTransform photoTransform1 = CGAffineTransformMakeScale(0.9, 0.9); - - [UIView animateWithDuration:0.35 animations:^{ - - self.photoBtn.transform = CGAffineTransformConcat(photoTransform0, photoTransform1) ; - }]; - } else { - [UIView animateWithDuration:0.35 animations:^{ - - self.photoBtn.transform = CGAffineTransformIdentity ; - }]; - } -} - --(void)didSelectedParam:(FUGreenScreenBgModel *)param { - if(param.videoPath){ - NSString *urlStr = [[NSBundle mainBundle] pathForResource:param.videoPath ofType:@"mp4"]; - self.greenScreenManager.greenScreen.videoPath = urlStr; - }else{ - self.greenScreenManager.greenScreen.videoPath = nil; - [self.greenScreenManager.greenScreen stopVideoDecode]; - } -} - -/* 取色的时候,不rendder */ --(void)takeColorState:(FUTakeColorState)state{ - self.greenScreenManager.greenScreen.cutouting = state == FUTakeColorStateRunning; - // 取色的时候取消缩放和移动手势 - self.panGesture.enabled = state == FUTakeColorStateStop; - self.pinchGesture.enabled = state == FUTakeColorStateStop; -} - -#pragma mark ---- 手势事件 ----- --(void)handlePanGesture:(UIPanGestureRecognizer *) panGesture{ - UIView *view = panGesture.view; - if (panGesture.state == UIGestureRecognizerStateBegan || panGesture.state == UIGestureRecognizerStateChanged){ - - CGPoint translation = [panGesture translationInView:view.superview]; - float dx ,dy; - dx = translation.x/CGRectGetWidth(self.view.bounds); - dy = translation.y/CGRectGetHeight(self.view.bounds); - self.greenScreenManager.greenScreen.center = CGPointMake(self.greenScreenManager.greenScreen.center.x + dx, self.greenScreenManager.greenScreen.center.y + dy); - [panGesture setTranslation:CGPointZero inView:view.superview]; - } -} - --(void)handlePinchGesture:(UIPinchGestureRecognizer *)pinchGesture{ - if (pinchGesture.state == UIGestureRecognizerStateBegan || pinchGesture.state == UIGestureRecognizerStateChanged) { - self.greenScreenManager.greenScreen.scale *= pinchGesture.scale; - pinchGesture.scale = 1; - } -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ - return ![touch.view isDescendantOfView:self.lvmuEditeView]; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - return YES; -} - -#pragma mark - supAction --(void)touchScreenAction:(UITapGestureRecognizer *)tap { - if (_lvmuEditeView.mTakeColorView.isHidden) { - [super touchScreenAction:tap]; - [_lvmuEditeView hidenTop:YES]; - self.lightingView.hidden = YES; - }else{ - CGPoint point = [tap locationInView:self.renderView]; - [_lvmuEditeView.mTakeColorView toucheSetPoint:point]; - } -} - -@end diff --git a/FULiveDemo/Modules/GreenScreen/View/FUBgCollectionView.h b/FULiveDemo/Modules/GreenScreen/View/FUBgCollectionView.h deleted file mode 100644 index c0b616f4..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FUBgCollectionView.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// FUBgCollectionView.h -// FULiveDemo -// -// Created by 孙慕 on 2020/8/18. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import -#import "FUGreenScreenBgModel.h" -#import "FUDemoBarDefine.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUBgCollectionViewDelegate - -// 开启滤镜 -- (void)bgCollectionViewDidSelectedFilter:(FUGreenScreenBgModel *)param; -@end - - -@interface FUBgCollectionView : UIView - -@property (nonatomic, assign) idmDelegate ; - -@property (nonatomic, assign) NSInteger selectedIndex ; - -@property (nonatomic, strong) NSArray *filters; - -@property (strong, nonatomic) UICollectionView *mBgCollectionView; -@end - -@interface FUBgFilterCell : UICollectionViewCell - -@property (nonatomic, strong) UIImageView *imageView ; -@property (nonatomic, strong) UILabel *titleLabel ; -@end - - - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/View/FUBgCollectionView.m b/FULiveDemo/Modules/GreenScreen/View/FUBgCollectionView.m deleted file mode 100644 index c8659f3a..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FUBgCollectionView.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// FUBgCollectionView.m -// FULiveDemo -// -// Created by 孙慕 on 2020/8/18. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUBgCollectionView.h" - -static NSString *bgCellId = @"FUBgCollectionView"; - -@interface FUBgCollectionView() - -@end - -@implementation FUBgCollectionView - - --(instancetype)init{ - if (self = [super init]) { - [self setupView]; - } - return self; -} - --(void)setupView{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 30; - layout.itemSize = CGSizeMake(54, 74); - layout.sectionInset = UIEdgeInsetsMake(0, 20, 0, 20); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - CGRect frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 80); - _mBgCollectionView = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:layout]; - _mBgCollectionView.backgroundColor = [UIColor clearColor]; - _mBgCollectionView.showsHorizontalScrollIndicator = NO; - _mBgCollectionView.delegate = self; - _mBgCollectionView.dataSource = self; - [self addSubview:_mBgCollectionView]; - [_mBgCollectionView registerClass:[FUBgFilterCell class] forCellWithReuseIdentifier:bgCellId]; - - _selectedIndex = -1; -} - -- (void)setFilters:(NSArray *)filters { - _filters = filters; - [self.mBgCollectionView reloadData]; -} - --(void)setSelectedIndex:(NSInteger)selectedIndex { - _selectedIndex = selectedIndex; - [_mBgCollectionView reloadData]; - - FUGreenScreenBgModel *model = _filters[_selectedIndex]; - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(bgCollectionViewDidSelectedFilter:)]) { - [self.mDelegate bgCollectionViewDidSelectedFilter:model]; - } -} - - - - - -#pragma mark ---- UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.filters.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUBgFilterCell *cell = (FUBgFilterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:bgCellId forIndexPath:indexPath]; - - FUGreenScreenBgModel *model = _filters[indexPath.row]; - - cell.titleLabel.text = FUNSLocalizedString(model.title,nil); - cell.titleLabel.textColor = [UIColor whiteColor]; - cell.imageView.image = [UIImage imageNamed:model.imageName]; - - cell.imageView.layer.borderWidth = 0.0 ; - cell.imageView.layer.borderColor = [UIColor clearColor].CGColor; - cell.imageView.backgroundColor = [UIColor clearColor]; - - if (_selectedIndex == indexPath.row) { - - cell.imageView.layer.borderWidth = 2.0 ; - cell.imageView.layer.borderColor = [UIColor colorWithHexColorString:@"5EC7FE"].CGColor; - cell.titleLabel.textColor = [UIColor colorWithHexColorString:@"5EC7FE"]; - } - - return cell ; -} - -#pragma mark ---- UICollectionViewDelegate - --(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - if(_selectedIndex == indexPath.row ){ - return; - } - _selectedIndex = indexPath.row ; - - [self.mBgCollectionView reloadData]; - - FUGreenScreenBgModel *model = _filters[indexPath.row]; - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(bgCollectionViewDidSelectedFilter:)]) { - [self.mDelegate bgCollectionViewDidSelectedFilter:model]; - } -} - -#pragma mark ---- UICollectionViewDelegateFlowLayout - - -@end - - -@implementation FUBgFilterCell - --(instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 54, 54)]; - self.imageView.layer.masksToBounds = YES ; - self.imageView.layer.cornerRadius = 3.0 ; - self.imageView.layer.borderWidth = 0.0 ; - self.imageView.layer.backgroundColor = [UIColor colorWithWhite:0.5 alpha:1.0].CGColor; - self.imageView.layer.borderColor = [UIColor clearColor].CGColor ; - [self addSubview:self.imageView]; - - self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(-8, 54, 70, frame.size.height - 54)]; - self.titleLabel.textAlignment = NSTextAlignmentCenter ; - self.titleLabel.font = [UIFont systemFontOfSize:10]; - [self addSubview:self.titleLabel]; - } - return self ; -} -@end diff --git a/FULiveDemo/Modules/GreenScreen/View/FULvMuView.h b/FULiveDemo/Modules/GreenScreen/View/FULvMuView.h deleted file mode 100644 index 8463ea2d..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FULvMuView.h +++ /dev/null @@ -1,91 +0,0 @@ -// -// FULvMuView.h -// FULiveDemo -// -// Created by 孙慕 on 2020/8/13. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import -#import "FUGreenScreenModel.h" -#import "FUGreenScreenSafeAreaModel.h" -#import "FUTakeColorView.h" - -@class FUGreenScreenModel, FUGreenScreenBgModel; -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, FUTakeColorState) { - FUTakeColorStateRunning, - FUTakeColorStateStop, -}; - -@class FULvMuView; -@protocol FULvMuViewDelegate - -- (void)beautyCollectionView:(FULvMuView *)beautyView didSelectedParam:(FUGreenScreenModel *)param; - -/// 选中安全区域 -- (void)lvmuViewDidSelectSafeArea:(FUGreenScreenSafeAreaModel *)model; - -/// 取消安全区域 -- (void)lvmuViewDidCancelSafeArea; - --(void)lvmuViewShowTopView:(BOOL)show; - -- (void)colorDidSelected:(UIColor *)color; - -- (void)didSelectedParam:(FUGreenScreenModel *)param; - - -- (void)takeColorState:(FUTakeColorState)state; - -- (void)getPoint:(CGPoint)point; - -//从外面获取全局的取点背景view,为了修复取点view加载Window上的系统兼容性问题 -- (UIView *)takeColorBgView; - -@end - - -@interface FULvMuView : UIView -@property (nonatomic, assign) idmDelegate ; - -@property (nonatomic, assign) NSInteger selectedIndex; -@property (nonatomic, assign) NSInteger colorSelectedIndex; - -@property (strong, nonatomic) FUTakeColorView *mTakeColorView; - -@property (assign, nonatomic) BOOL isHidenTop; - -//刷新绿慕collection数据 -- (void)reloadDataSoure:(NSArray *)dataSource; - -//刷新绿慕背景collection数据 -- (void)reloadBgDataSource:(NSArray *)dataSource; - --(void)destoryLvMuView; - --(void)hidenTop:(BOOL)isHiden; - --(void)restUI; - -- (void)setTakeColor:(UIColor *)color; - -@end - -@interface FULvMuCell : UICollectionViewCell -@property (nonatomic, strong) UIImageView *imageView ; -@property (nonatomic, strong) UILabel *titleLabel ; -@end - - -@interface FULvMuColorCell : UICollectionViewCell -@property (nonatomic, strong) UIImageView *imageView; -@property (nonatomic, strong) UIImageView *bgImageView ; -@property (nonatomic, strong) UILabel *titleLabel ; - -@property (nonatomic, strong) UIColor *color; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/View/FULvMuView.m b/FULiveDemo/Modules/GreenScreen/View/FULvMuView.m deleted file mode 100644 index 5fd9e7af..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FULvMuView.m +++ /dev/null @@ -1,798 +0,0 @@ -// -// FULvMuView.m -// FULiveDemo -// -// Created by 孙慕 on 2020/8/13. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FULvMuView.h" -#import "FUBaseViewController.h" -#import "FUBgCollectionView.h" -#import "FUSafeAreaCollectionView.h" - -#import "UIView+FU.h" -#import "UIImage+FU.h" - -#import - -typedef NS_ENUM(NSInteger, FULvMuState) { - FULvMuViewNone = -1, - FULvMukeying = 0, - FULvMubackground = 1 -}; -@implementation FULvMuCell - --(instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.width)]; - self.imageView.layer.masksToBounds = YES ; - self.imageView.layer.cornerRadius = frame.size.width / 2.0 ; - [self addSubview:self.imageView]; - - self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(-10, frame.size.width + 7, frame.size.width + 20, frame.size.height - frame.size.width - 2)]; - self.titleLabel.textAlignment = NSTextAlignmentCenter ; - self.titleLabel.textColor = [UIColor whiteColor]; - self.titleLabel.font = [UIFont systemFontOfSize:10]; - self.titleLabel.adjustsFontSizeToFitWidth = YES; - - [self addSubview:self.titleLabel]; - } - return self ; -} -@end - - -@implementation FULvMuColorCell - --(instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - _bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(1, 1, frame.size.width -2, frame.size.width-2)]; - _bgImageView.image = [UIImage imageNamed:@"demo_bg_transparent"]; - _bgImageView.layer.cornerRadius = _bgImageView.frame.size.width / 2.0 ; - [self addSubview:_bgImageView]; - - self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.width)]; - self.imageView.layer.masksToBounds = YES ; - self.imageView.layer.cornerRadius = frame.size.width / 2.0 ; - self.contentView.layer.borderWidth = 0; - self.contentView.layer.borderColor = [UIColor whiteColor].CGColor; - - self.contentView.layer.masksToBounds = YES; - self.contentView.layer.cornerRadius = frame.size.width / 2.0 ; - - [self addSubview:self.imageView]; - - } - return self ; -} - --(void)setColorItemSelected:(BOOL)selecte{ - if (selecte) { - self.imageView.transform = CGAffineTransformIdentity; - self.bgImageView.transform = CGAffineTransformIdentity; - self.contentView.layer.borderWidth = 2; - [UIView animateWithDuration:0.25 animations:^{ - self.imageView.transform = CGAffineTransformMakeScale(0.7, 0.7); - self.bgImageView.transform = CGAffineTransformMakeScale(0.7, 0.7); - }]; - }else{ - self.contentView.layer.borderWidth = 0; - self.imageView.transform = CGAffineTransformIdentity; - self.bgImageView.transform = CGAffineTransformIdentity; - } -} -@end - - -static NSString * const LvMuCellID = @"FULvMuCellID"; -static NSString * const colorCellID = @"FULvMuColorCellID"; - -@interface FULvMuView() - -@property (nonatomic, strong) UICollectionView *mColorCollectionView; - -@property (nonatomic, strong) UICollectionView *mItemCollectionView; - -/// 安全区域 -@property (nonatomic, strong) FUSafeAreaCollectionView *safeAreaCollectionView; - -@property (strong, nonatomic) FUSegmentBar *segmentBarView; - -@property (strong, nonatomic) FUSlider *slider; -@property (strong, nonatomic) UIView *sqLine; - -@property (strong, nonatomic) FUSquareButton *restBtn; - -@property (assign, nonatomic) FULvMuState state; - -/// 是否显示安全区域视图 -@property (assign, nonatomic) BOOL isShowingSafeArea; - -@property (strong, nonatomic) NSMutableArray * colors; - -@property (strong, nonatomic) FUBgCollectionView *mBgCollectionView; - - -@property (assign, nonatomic) FUTakeColorState colorEditState; - -@property (nonatomic, strong) NSMutableArray *dataArray; - -@end - -@implementation FULvMuView -- (void)setTakeColor:(UIColor *)color { - self.mTakeColorView.perView.backgroundColor = color; - NSIndexPath *indexpath = [NSIndexPath indexPathForRow:0 inSection:0]; - FULvMuColorCell *cell = (FULvMuColorCell *)[self.mColorCollectionView cellForItemAtIndexPath:indexpath]; - cell.imageView.backgroundColor = color; - [self.colors replaceObjectAtIndex:0 withObject:color]; -} - --(FUTakeColorView *)mTakeColorView{ - if (!_mTakeColorView) { - __weak typeof(self)weakSelf = self ; - _mTakeColorView = [[FUTakeColorView alloc] initWithFrame:CGRectMake(100, 100, 36, 60) didChangeBlock:^(UIColor * _Nonnull color) { - if (!weakSelf.mColorCollectionView) { - return ; - } - - NSIndexPath *indexpath = [NSIndexPath indexPathForRow:0 inSection:0]; - FULvMuColorCell *cell = (FULvMuColorCell *)[weakSelf.mColorCollectionView cellForItemAtIndexPath:indexpath]; - cell.imageView.backgroundColor = color; - [weakSelf.colors replaceObjectAtIndex:0 withObject:color]; - - }complete:^{ - UIColor *color = weakSelf.colors[0]; - if ([weakSelf.mDelegate respondsToSelector:@selector(colorDidSelected:)]) { - [weakSelf.mDelegate colorDidSelected:color]; - } - - /* 开始渲染 */ - [weakSelf changeTakeColorState:FUTakeColorStateStop]; - }]; - NSIndexPath *indexpath = [NSIndexPath indexPathForRow:0 inSection:0]; - FULvMuColorCell *cell = (FULvMuColorCell *)[weakSelf.mColorCollectionView cellForItemAtIndexPath:indexpath]; - _mTakeColorView.hidden = YES; - _mTakeColorView.backgroundColor = [UIColor clearColor]; - _mTakeColorView.perView.backgroundColor = cell.imageView.backgroundColor; - _mTakeColorView.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2); - - UIView *bgView = nil; - if ([self.mDelegate respondsToSelector:@selector(takeColorBgView)]) { - bgView = [self.mDelegate takeColorBgView]; - [_mTakeColorView actionRect:bgView.bounds]; - } else { - UIWindow *window = [UIApplication sharedApplication].keyWindow; - bgView = window; - [_mTakeColorView actionRect:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 180)]; - } - - [bgView addSubview:_mTakeColorView]; - - __weak typeof(self) weak = self; - _mTakeColorView.BlockPointer = ^(CGPoint point) { - if ([weak.mDelegate respondsToSelector:@selector(getPoint:)]) { - [weak.mDelegate getPoint:point]; - } - }; - } - - return _mTakeColorView; -} - - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - _colorSelectedIndex = 1; - _selectedIndex = 0; - _colorEditState = FUTakeColorStateStop; - self.state = FULvMuViewNone; - - [self setupSubView]; - [self setupData]; - self.clipsToBounds = YES; - self.isHidenTop = NO; - - self.segmentBarView.selectedIndex = 0; - } - return self; -} - --(void)setMDelegate:(id)mDelegate{ - _mDelegate = mDelegate; - [self setupDefault]; -} - -- (void)reloadDataSoure:(NSArray *)dataSource { - _dataArray = [NSMutableArray arrayWithArray:dataSource]; - [self.mColorCollectionView reloadData]; - [self.safeAreaCollectionView reloadSafeAreas:YES]; -} - -//刷新绿慕背景collection数据 -- (void)reloadBgDataSource:(NSArray *)dataSource { - _mBgCollectionView.filters = dataSource; -} - --(void)setupDefault{ - /* 设置回调一遍默认 */ - if ([self.mDelegate respondsToSelector:@selector(colorDidSelected:)]) { - [self.mDelegate colorDidSelected:[UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0]]; - } - - for (int i = 1 ; i < _dataArray.count; i ++) { - FUGreenScreenModel *param = _dataArray[i]; - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(beautyCollectionView:didSelectedParam:)]) { - [self.mDelegate beautyCollectionView:self didSelectedParam:param]; - } - } -} - --(void)setupData{ - _colors = [NSMutableArray array]; - UIColor *color0 = [UIColor clearColor]; - UIColor *color1 = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:1.0]; - UIColor *color2 = [UIColor colorWithRed:0 green:0.0 blue:1 alpha:1.0]; - UIColor *color3 = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.0]; - [_colors addObject:color0]; - [_colors addObject:color1]; - [_colors addObject:color2]; - [_colors addObject:color3]; -} - - --(void)setupSubView{ - _slider = [[FUSlider alloc] init]; - _slider.hidden = YES; - [_slider addTarget:self action:@selector(didChangeValue:) forControlEvents:UIControlEventValueChanged]; - [_slider addTarget:self action:@selector(didChangeValueEnd:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:_slider]; - - _restBtn = [[FUSquareButton alloc] init]; - [self addSubview:_restBtn]; - [_restBtn setImage:[UIImage imageNamed:@"恢复-0"] forState:UIControlStateNormal]; - _restBtn.titleLabel.font = [UIFont systemFontOfSize:10]; - _restBtn.alpha = 0.7; - [_restBtn addTarget:self action:@selector(resetBtnClick:) forControlEvents:UIControlEventTouchUpInside]; - [_restBtn setTitle:FUNSLocalizedString(@"恢复", nil) forState:UIControlStateNormal]; - - _sqLine = [[UIView alloc] init]; - _sqLine.frame = CGRectMake(73,663,0.5,20); - _sqLine.layer.backgroundColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2].CGColor; - [self addSubview:_sqLine]; - - - UICollectionViewFlowLayout *layout1 = [[UICollectionViewFlowLayout alloc] init]; - layout1.minimumInteritemSpacing = 0; - layout1.minimumLineSpacing = 16; - layout1.itemSize = CGSizeMake(28, 28); - layout1.sectionInset = UIEdgeInsetsMake(0, 20, 0, 20); - layout1.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _mColorCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout1]; - _mColorCollectionView.backgroundColor = [UIColor clearColor]; - _mColorCollectionView.delegate = self; - _mColorCollectionView.dataSource = self; - [self addSubview:_mColorCollectionView]; - [_mColorCollectionView registerClass:[FULvMuColorCell class] forCellWithReuseIdentifier:colorCellID]; - - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - effectview.alpha = 1.0; - [self insertSubview:effectview atIndex:0]; - - /* 磨玻璃 */ - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.bottom.equalTo(self); - }]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 30; - layout.itemSize = CGSizeMake(44, 60); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 15); - - CGRect frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 80); - _mItemCollectionView = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:layout]; - _mItemCollectionView.backgroundColor = [UIColor clearColor]; - _mItemCollectionView.showsHorizontalScrollIndicator = NO; - _mItemCollectionView.delegate = self; - _mItemCollectionView.dataSource = self; - [self addSubview:_mItemCollectionView]; - [_mItemCollectionView registerClass:[FULvMuCell class] forCellWithReuseIdentifier:LvMuCellID]; - - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.minimumInteritemSpacing = 15; - flowLayout.minimumLineSpacing = 15; - flowLayout.itemSize = CGSizeMake(54, 70); - flowLayout.sectionInset = UIEdgeInsetsMake(0, 16, 0, 16); - flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _safeAreaCollectionView = [[FUSafeAreaCollectionView alloc] initWithFrame:CGRectMake(0, 56, CGRectGetWidth(self.bounds), 84) collectionViewLayout:flowLayout]; - _safeAreaCollectionView.hidden = YES; - _safeAreaCollectionView.safeAreaDelegate = self; - [self addSubview:_safeAreaCollectionView]; - - self.segmentBarView = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, 200,[UIScreen mainScreen].bounds.size.width, 49) titles:@[FUNSLocalizedString(@"抠像",nil),FUNSLocalizedString(@"背景",nil)] configuration:[FUSegmentBarConfigurations new]]; - self.segmentBarView.backgroundColor = [UIColor colorWithRed:5/255.f green:15/255.f blue:20/255.f alpha:0.74]; - self.segmentBarView.delegate = self; - [self addSubview:self.segmentBarView]; - - _mBgCollectionView = [[FUBgCollectionView alloc] init]; - _mBgCollectionView.mDelegate = self; - _mBgCollectionView.hidden = YES; - [_mBgCollectionView setSelectedIndex:3]; - [self addSubview:_mBgCollectionView]; - - [_segmentBarView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.mas_bottom); - make.left.right.equalTo(self); - if (iPhoneXStyle) { - make.height.mas_equalTo(49 + 34); - }else{ - make.height.mas_equalTo(49); - } - }]; - - [_mItemCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - - make.bottom.equalTo(_segmentBarView.mas_top).offset(-6); - make.left.equalTo(_sqLine.mas_right).offset(12); - make.right.equalTo(self); - make.height.mas_equalTo(84); - }]; - - [_safeAreaCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(_segmentBarView.mas_top).offset(-6); - make.leading.trailing.equalTo(self); - make.height.mas_equalTo(84); - }]; - - [_mBgCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(_segmentBarView.mas_top).offset(-6); - make.right.left.equalTo(self); - make.height.mas_equalTo(84); - }]; - - - [_restBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(_mItemCollectionView); - make.left.equalTo(self).offset(16); - make.height.mas_equalTo(60); - make.width.mas_equalTo(44); - }]; - - [_sqLine mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(_restBtn); - make.left.equalTo(_restBtn.mas_right).offset(12); - make.height.mas_equalTo(20); - make.width.mas_equalTo(0.5); - }]; - - [_mColorCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(_mItemCollectionView.mas_top); - make.left.right.equalTo(self); - make.height.mas_equalTo(36); - }]; - - [_slider mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(_mColorCollectionView); - make.left.equalTo(self).offset(54); - make.right.equalTo(self).offset(-54); - make.height.mas_equalTo(20); - }]; - -} - - -#pragma mark ---- UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - if(collectionView == _mItemCollectionView ){ - return self.dataArray.count ; - } else { - return 4; - } -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - if (collectionView == _mItemCollectionView) { - FULvMuCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:LvMuCellID forIndexPath:indexPath]; - - if (indexPath.row < self.dataArray.count){ - FUGreenScreenModel *modle = self.dataArray[indexPath.row] ; - NSString *imageName ; - - BOOL opened = NO; - if (modle.type == GREENSCREENTYPE_safeArea) { - // 判断是否选择了安全区域 - opened = self.safeAreaCollectionView.selectedIndex > 1; - } else { - opened = [modle.value floatValue] > 0; - } - BOOL selected = _selectedIndex == indexPath.row; - if (selected) { - imageName = opened ? [modle.imageName stringByAppendingString:@"_sel_open.png"] : [modle.imageName stringByAppendingString:@"_sel.png"] ; - }else { - imageName = opened ? [modle.imageName stringByAppendingString:@"_nor_open.png"] : [modle.imageName stringByAppendingString:@"_nor.png"] ; - } - - cell.imageView.image = [UIImage imageNamed:imageName]; - cell.titleLabel.text = FUNSLocalizedString(modle.title,nil); - cell.titleLabel.textColor = _selectedIndex == indexPath.row ? [UIColor colorWithHexColorString:@"5EC7FE"] : [UIColor whiteColor]; - } - return cell ; - } else { - FULvMuColorCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:colorCellID forIndexPath:indexPath]; - [cell setColorItemSelected:_colorSelectedIndex == indexPath.row ?YES:NO]; - - cell.imageView.backgroundColor = _colors[indexPath.row]; - if(indexPath.row == 0){ - // cell.imageView.backgroundColor = [UIColor clearColor]; - if(_colorSelectedIndex != 0){ - cell.imageView.image = [UIImage imageNamed:@"demo_icon_straw"]; - - }else{ - cell.imageView.image = nil; - } - - }else{ - cell.imageView.image = nil; - } - return cell; - } -} - -#pragma mark ---- UICollectionViewDelegate --(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - // [self changeTakeColorState:FUTakeColorStateStop]; - if (collectionView == _mItemCollectionView) { - if (_selectedIndex == indexPath.row) { - return ; - } - FUGreenScreenModel *model = _dataArray[indexPath.row]; - if (model.type == GREENSCREENTYPE_safeArea) { - // 显示安全区域 - self.mItemCollectionView.hidden = YES; - self.slider.hidden = YES; - self.restBtn.hidden = YES; - self.sqLine.hidden = YES; - self.mColorCollectionView.hidden = YES; - self.safeAreaCollectionView.hidden = NO; - [self.safeAreaCollectionView reloadSafeAreas:NO]; - _isShowingSafeArea = YES; - [FUTipHUD showTips:FUNSLocalizedString(@"白色区域为安全区域,不参与绿幕抠像", nil)]; - } else { - _selectedIndex = indexPath.row ; - [self hiddenSlideer:_selectedIndex == 0 ? YES : NO]; - _slider.value = [model.value floatValue]; - [self.mItemCollectionView reloadData]; - } - } else { - if(_colorSelectedIndex == indexPath.row && indexPath.row != 0){ - return; - } - self.mTakeColorView.hidden = indexPath.row == 0 ?NO:YES; - - if (indexPath.row == 0) { - [self setupData]; - self.mTakeColorView.perView.backgroundColor = [UIColor clearColor]; - [self changeTakeColorState:FUTakeColorStateRunning]; - }else{ - [self changeTakeColorState:FUTakeColorStateStop]; - } - _colorSelectedIndex = indexPath.row ; - - [self didSelColorWithIdnex:(int)indexPath.row]; - - [self.mColorCollectionView reloadData]; - } - [self changRestBtnUI]; -} - -#pragma mark - FUSegmentBarDelegate - -- (void)segmentBar:(FUSegmentBar *)segmentsView didSelectItemAtIndex:(NSUInteger)index { - FULvMuState tepState = index == 0 ? FULvMukeying : FULvMubackground; - if (self.state == tepState) { - [self hidenTop:YES]; - }else{ - self.state = tepState; - [self segmentBarClickUpdateView:self.state]; - [self hidenTop:NO]; - } -} - -#pragma mark - update UI --(void)hiddenSlideer:(BOOL)hidden -{ - self.slider.hidden = hidden; - self.mColorCollectionView.hidden = !hidden; -} - --(void)segmentBarClickUpdateView:(FULvMuState)state{ - if (state == FULvMubackground) { - // 显示背景相关内容 - _mColorCollectionView.hidden = YES; - _mItemCollectionView.hidden = YES; - _slider.hidden = YES; - _restBtn.hidden = YES; - _sqLine.hidden = YES; - _mColorCollectionView.hidden = YES; - _safeAreaCollectionView.hidden = YES; - _mBgCollectionView.hidden = NO; - } else { - _mBgCollectionView.hidden = YES; - if (_isShowingSafeArea) { - // 安全区域已经显示的情况 - _mColorCollectionView.hidden = YES; - _mItemCollectionView.hidden = YES; - _slider.hidden = YES; - _restBtn.hidden = YES; - _sqLine.hidden = YES; - _mColorCollectionView.hidden = YES; - _safeAreaCollectionView.hidden = NO; - } else { - _safeAreaCollectionView.hidden = YES; - _mItemCollectionView.hidden = NO; - [self hiddenSlideer:_selectedIndex == 0?YES:NO]; - _restBtn.hidden = NO; - _sqLine.hidden = NO; - } - } -} - - --(void)restAllSate { - [self changeTakeColorState:FUTakeColorStateStop]; - - for (FUGreenScreenModel *param in _dataArray) { - param.value = param.defaultValue; - } - - [self.colors replaceObjectAtIndex:0 withObject:[UIColor clearColor]]; - - _colorSelectedIndex = 1; - _selectedIndex = 0; - _slider.hidden = YES; - _mColorCollectionView.hidden = NO; - - [self setupDefault]; - - [self.mItemCollectionView reloadData]; - [self.mColorCollectionView reloadData]; - - self.safeAreaCollectionView.selectedIndex = 1; - [self.safeAreaCollectionView reloadData]; - [self safeAreaCollectionViewDidClickCancel:self.safeAreaCollectionView]; - - _restBtn.alpha = 0.7; -} - -#pragma mark - UI Action --(void)resetBtnClick:(UIButton *)btn{ - if (_restBtn.alpha != 1) { - return; - } - - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:FUNSLocalizedString(@"是否将所有参数恢复到默认值",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - }]; - [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:FUNSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - - [self restAllSate]; - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [[self fu_targetViewController] presentViewController:alertCon animated:YES completion:^{ - }]; -} - --(void)didSelColorWithIdnex:(int)index{ - NSIndexPath *indexpath = [NSIndexPath indexPathForRow:index inSection:0]; - FULvMuColorCell *cell = (FULvMuColorCell *)[_mColorCollectionView cellForItemAtIndexPath:indexpath]; - if ([self.mDelegate respondsToSelector:@selector(colorDidSelected:)]) { - [self.mDelegate colorDidSelected:cell.imageView.backgroundColor]; - } -} - --(void)didChangeValue:(FUSlider *)slider{ - FUGreenScreenModel *param = _dataArray[_selectedIndex]; - param.value = [NSNumber numberWithFloat:slider.value]; - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(beautyCollectionView:didSelectedParam:)]) { - [self.mDelegate beautyCollectionView:self didSelectedParam:param]; - } -} --(void)didChangeValueEnd:(FUSlider *)slider{ - [self.mItemCollectionView reloadData]; - [self changRestBtnUI]; -} - -#pragma mark - UIImagePickerControllerDelegate -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - [picker dismissViewControllerAnimated:YES completion:^{ - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - if (!image) { - return; - } - CGFloat imagePixel = image.size.width * image.size.height; - // 超过限制像素需要压缩 - if (imagePixel > FUPicturePixelMaxSize) { - CGFloat ratio = FUPicturePixelMaxSize / imagePixel * 1.0; - image = [image fu_compress:ratio]; - } - // 图片转正 - if (image.imageOrientation != UIImageOrientationUp && image.imageOrientation != UIImageOrientationUpMirrored) { - image = [image fu_resetImageOrientationToUp]; - } - // 保存自定义安全区域图片 - if ([FUGreenScreenManager saveLocalSafeAreaImage:image]) { - // 设置选中自定义,重新加载安全区域数据 - self.safeAreaCollectionView.selectedIndex = 3; - [self.safeAreaCollectionView reloadSafeAreas:YES]; - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(lvmuViewDidSelectSafeArea:)] && self.safeAreaCollectionView.safeAreas.count == 3) { - [self.mDelegate lvmuViewDidSelectSafeArea:self.safeAreaCollectionView.safeAreas[0]]; - } - } - }]; -} - -#pragma mark - FUSafeAreaCollectionViewDelegate -- (void)safeAreaCollectionViewDidClickBack:(FUSafeAreaCollectionView *)safeAreaView { - _safeAreaCollectionView.hidden = YES; - _isShowingSafeArea = NO; - _mItemCollectionView.hidden = NO; - [self hiddenSlideer:_selectedIndex == 0?YES:NO]; - _restBtn.hidden = NO; - _sqLine.hidden = NO; -} -- (void)safeAreaCollectionViewDidClickCancel:(FUSafeAreaCollectionView *)safeAreaView { - [self.mItemCollectionView reloadData]; - [self changRestBtnUI]; - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(lvmuViewDidCancelSafeArea)]) { - [self.mDelegate lvmuViewDidCancelSafeArea]; - } -} -- (void)safeAreaCollectionViewDidClickAdd:(FUSafeAreaCollectionView *)safeAreaView { - // 调用系统相册选择图片 - UIImagePickerController *picker = [[UIImagePickerController alloc] init]; - picker.delegate = self; - picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; - picker.allowsEditing = NO; - picker.mediaTypes = @[(NSString *)kUTTypeImage]; - [self.fu_targetViewController presentViewController:picker animated:YES completion:nil]; -} -- (void)safeAreaCollectionView:(FUSafeAreaCollectionView *)safeAreaView didSelectItemAtIndex:(NSInteger)index { - if (index < 3) { - return; - } - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(lvmuViewDidSelectSafeArea:)]) { - [self.mDelegate lvmuViewDidSelectSafeArea:safeAreaView.safeAreas[index - 3]]; - } - [self.mItemCollectionView reloadData]; - [self changRestBtnUI]; -} - -#pragma mark - bgdelegate --(void)bgCollectionViewDidSelectedFilter:(FUGreenScreenModel *)param{ - if ([self.mDelegate respondsToSelector:@selector(didSelectedParam:)]) { - [self.mDelegate didSelectedParam:param]; - } -} - - -#pragma mark - 外部调用接口 --(void)hidenTop:(BOOL)isHiden{ - _isHidenTop = isHiden; - if (isHiden) { - self.segmentBarView.selectedIndex = -1; - self.state = 3; - [self mas_updateConstraints:^(MASConstraintMaker *make) { - if (iPhoneXStyle) { - make.height.mas_equalTo(49 + 34); - }else{ - make.height.mas_equalTo(49); - } - }]; - }else{ - [self mas_updateConstraints:^(MASConstraintMaker *make) { - if (iPhoneXStyle) { - make.height.mas_equalTo(195 + 34); - }else{ - make.height.mas_equalTo(195); - } - }]; - } - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(lvmuViewShowTopView:)]) { - [self.mDelegate lvmuViewShowTopView:!isHiden]; - } -} - --(void)destoryLvMuView { - if ([_mTakeColorView.superview isKindOfClass:[UIWindow class]]) { - [_mTakeColorView removeFromSuperview]; - _mTakeColorView = nil; - } else { - //无需处理 - } -} - - --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ - [self changeTakeColorState:FUTakeColorStateStop]; -} - --(void)willRemoveSubview:(UIView *)subview{ - [_mTakeColorView removeFromSuperview]; -} - - --(void)restUI{ - [self restAllSate]; -} - --(void)changeTakeColorState:(FUTakeColorState )state{ - if (state != self.colorEditState) { - self.colorEditState = state; - }else{ - return; - } - if (state == FUTakeColorStateStop) { - _mTakeColorView.hidden = YES; - } - - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(takeColorState:)]) { - [self.mDelegate takeColorState:state]; - } - -} - - - --(void)changRestBtnUI{ - - BOOL isDefaultValue = YES; - for (FUGreenScreenModel *param in _dataArray) { - if (fabs([(NSNumber *)param.value doubleValue] - [(NSNumber *)param.defaultValue doubleValue ]) > 0.01) { - isDefaultValue = NO; - } - } - if(_colorSelectedIndex != 1 || _selectedIndex != 0){ - isDefaultValue = NO; - } - if (self.safeAreaCollectionView.selectedIndex > 1) { - isDefaultValue = NO; - } - if(isDefaultValue){ - self.restBtn.alpha = 0.7; - }else{ - self.restBtn.alpha = 1.0; - } - -} - - -#pragma mark - Dealloc --(void)dealloc { - NSLog(@"lv ---- dealloc"); - if (_mTakeColorView) { - [self destoryLvMuView]; - } -} - - - -@end diff --git a/FULiveDemo/Modules/GreenScreen/View/FUSafeAreaCollectionView.h b/FULiveDemo/Modules/GreenScreen/View/FUSafeAreaCollectionView.h deleted file mode 100644 index 5651b022..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FUSafeAreaCollectionView.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// FUSafeAreaCollectionView.h -// FULiveDemo -// -// Created by 项林平 on 2021/8/10. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -#import "FUGreenScreenManager.h" - -@class FUSafeAreaCollectionView, FUGreenScreenSafeAreaModel; - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUSafeAreaCollectionViewDelegate - -/// 返回 -- (void)safeAreaCollectionViewDidClickBack:(FUSafeAreaCollectionView *)safeAreaView; -/// 取消选择 -- (void)safeAreaCollectionViewDidClickCancel:(FUSafeAreaCollectionView *)safeAreaView; -/// 自定义 -- (void)safeAreaCollectionViewDidClickAdd:(FUSafeAreaCollectionView *)safeAreaView; -/// 选择 -- (void)safeAreaCollectionView:(FUSafeAreaCollectionView *)safeAreaView didSelectItemAtIndex:(NSInteger)index; - -@end - -@interface FUSafeAreaCell : UICollectionViewCell - -@property (nonatomic, strong) UIImageView *imageView; - -@end - -@interface FUSafeAreaCollectionView : UICollectionView - -@property (nonatomic, copy, readonly) NSArray *safeAreas; - -@property (nonatomic, assign) NSInteger selectedIndex; - -@property (nonatomic, weak) id safeAreaDelegate; - -- (void)reloadSafeAreas:(BOOL)needsReloadData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/View/FUSafeAreaCollectionView.m b/FULiveDemo/Modules/GreenScreen/View/FUSafeAreaCollectionView.m deleted file mode 100644 index 1b98b1aa..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FUSafeAreaCollectionView.m +++ /dev/null @@ -1,160 +0,0 @@ -// -// FUSafeAreaCollectionView.m -// FULiveDemo -// -// Created by 项林平 on 2021/8/10. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUSafeAreaCollectionView.h" -#import "FUGreenScreenSafeAreaModel.h" - -@implementation FUSafeAreaCell - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 54, 54)]; - self.imageView.contentMode = UIViewContentModeScaleAspectFill; - self.imageView.layer.masksToBounds = YES; - self.imageView.layer.cornerRadius = 3.0; - [self addSubview:self.imageView]; - } - return self; -} - -- (void)setSelected:(BOOL)selected { - [super setSelected:selected]; - if (selected) { - self.imageView.layer.borderWidth = 2; - self.imageView.layer.borderColor = [UIColor colorWithHexColorString:@"5EC7FE"].CGColor; - } else { - self.imageView.layer.borderWidth = 0.0; - self.imageView.layer.borderColor = [UIColor clearColor].CGColor; - } -} - -@end - -@interface FUSafeAreaCollectionView () - -@property (nonatomic, copy) NSArray *safeAreas; - -@end - -static NSString * const kFUSafeAreaCellIdentifierKey = @"FUSafeAreaCellIdentifier"; - -@implementation FUSafeAreaCollectionView - -- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout { - self = [super initWithFrame:frame collectionViewLayout:layout]; - if (self) { - self.backgroundColor = [UIColor clearColor]; - self.showsHorizontalScrollIndicator = NO; - self.delegate = self; - self.dataSource = self; - [self registerClass:[FUSafeAreaCell class] forCellWithReuseIdentifier:kFUSafeAreaCellIdentifierKey]; - - // 默认选中Cancel - _selectedIndex = 1; - } - return self; -} - -- (void)reloadSafeAreas:(BOOL)needsReloadData { - if (needsReloadData) { - NSMutableArray *models = [[NSMutableArray alloc] init]; - if ([FUGreenScreenManager localSafeAreaImage]) { - // 存在本地自定义 - FUGreenScreenSafeAreaModel *model = [[FUGreenScreenSafeAreaModel alloc] init]; - model.iconImage = [FUGreenScreenManager localSafeAreaImage]; - model.effectImage = model.iconImage; - [models addObject:model]; - } - FUGreenScreenSafeAreaModel *model1 = [[FUGreenScreenSafeAreaModel alloc] init]; - model1.iconImage = [UIImage imageNamed:@"demo_icon_safe_area_1"]; - model1.effectImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"safe_area_1" ofType:@"jpg"]]; - [models addObject:model1]; - - FUGreenScreenSafeAreaModel *model2 = [[FUGreenScreenSafeAreaModel alloc] init]; - model2.iconImage = [UIImage imageNamed:@"demo_icon_safe_area_2"]; - model2.effectImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"safe_area_2" ofType:@"jpg"]]; - [models addObject:model2]; - self.safeAreas = [models copy]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [self reloadData]; - [self selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - }); -} - -#pragma mark - Collection view data source -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.safeAreas.count + 3; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - FUSafeAreaCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUSafeAreaCellIdentifierKey forIndexPath:indexPath]; - switch (indexPath.item) { - case 0:{ - // 返回 - cell.imageView.image = [UIImage imageNamed:@"demo_icon_returns"]; - } - break; - case 1:{ - cell.imageView.image = [UIImage imageNamed:@"demo_icon_cancel"]; - } - break; - case 2:{ - cell.imageView.image = [UIImage imageNamed:@"demo_icon_add"]; - } - break; - default:{ - cell.imageView.image = self.safeAreas[indexPath.item - 3].iconImage; - } - break; - } - return cell; -} - -#pragma mark - Collection view delegate -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.item == self.selectedIndex) { - return; - } - switch (indexPath.item) { - case 0:{ - // Back - [collectionView deselectItemAtIndexPath:indexPath animated:NO]; - if (self.safeAreaDelegate && [self.safeAreaDelegate respondsToSelector:@selector(safeAreaCollectionViewDidClickBack:)]) { - [self.safeAreaDelegate safeAreaCollectionViewDidClickBack:self]; - } - } - break; - case 1:{ - // Cancel - _selectedIndex = 1; - if (self.safeAreaDelegate && [self.safeAreaDelegate respondsToSelector:@selector(safeAreaCollectionViewDidClickCancel:)]) { - [self.safeAreaDelegate safeAreaCollectionViewDidClickCancel:self]; - } - } - break; - case 2:{ - // Add - [collectionView deselectItemAtIndexPath:indexPath animated:NO]; - if (self.safeAreaDelegate && [self.safeAreaDelegate respondsToSelector:@selector(safeAreaCollectionViewDidClickAdd:)]) { - [self.safeAreaDelegate safeAreaCollectionViewDidClickAdd:self]; - } - } - break; - default:{ - _selectedIndex = indexPath.item; - if (self.safeAreaDelegate && [self.safeAreaDelegate respondsToSelector:@selector(safeAreaCollectionView:didSelectItemAtIndex:)]) { - [self.safeAreaDelegate safeAreaCollectionView:self didSelectItemAtIndex:indexPath.item]; - } - } - break; - } -} - -@end diff --git a/FULiveDemo/Modules/GreenScreen/View/FUTakeColorView.h b/FULiveDemo/Modules/GreenScreen/View/FUTakeColorView.h deleted file mode 100644 index b1cda85c..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FUTakeColorView.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// FUTakeColorView.h -// FULiveDemo -// -// Created by 孙慕 on 2020/8/18. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef void(^FUTakeColorChange)(UIColor *color); - -typedef void(^FUTakeColorComplete)(void); - -@interface FUTakeColorView : UIView - -@property(nonatomic,strong)UIView *perView; - - - --(instancetype)initWithFrame:(CGRect)frame didChangeBlock:(FUTakeColorChange)block complete:(FUTakeColorComplete)complete; - --(void)actionRect:(CGRect )rect; - --(void)toucheSetPoint:(CGPoint)point; - -@property(nonatomic,strong) void(^BlockPointer)(CGPoint point);; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/View/FUTakeColorView.m b/FULiveDemo/Modules/GreenScreen/View/FUTakeColorView.m deleted file mode 100644 index 35d4d530..00000000 --- a/FULiveDemo/Modules/GreenScreen/View/FUTakeColorView.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// FUTakeColorView.m -// FULiveDemo -// -// Created by 孙慕 on 2020/8/18. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#import "FUTakeColorView.h" -#import "FUBaseViewController.h" -#import - -@interface FUTakeColorView() -@property(nonatomic,strong)FUTakeColorChange didChange; - -@property(nonatomic,strong)FUTakeColorComplete complete; -@property(nonatomic,strong)UIImageView *imageView; - -@property(nonatomic,assign)CGRect actionRect; -@end -@implementation FUTakeColorView - --(instancetype)initWithFrame:(CGRect)frame didChangeBlock:(nonnull FUTakeColorChange)block complete:(nonnull FUTakeColorComplete)complete{ - if (self = [super initWithFrame:frame]) { - UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanAction:)]; - [self addGestureRecognizer:panGestureRecognizer]; - - [self setupTakeColorView]; - _didChange = block; - _complete = complete; - _actionRect = [UIScreen mainScreen].bounds; - } - - return self; -} - --(void)actionRect:(CGRect )rect{ - _actionRect = rect; -} - - --(void)setupTakeColorView{ - self.perView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)]; - UIImageView *imageview = [[UIImageView alloc] initWithFrame:self.perView.bounds]; - imageview.image = [UIImage imageNamed:@"demo_bg_transparent"]; - [self addSubview:imageview]; - [self addSubview:self.perView]; - self.perView.layer.masksToBounds = YES ; - self.perView.layer.cornerRadius = self.frame.size.width / 2.0 ; - self.perView.layer.borderWidth = 2; - self.perView.layer.borderColor = [UIColor whiteColor].CGColor; - self.perView.layer.backgroundColor = [UIColor clearColor].CGColor; - - self.perView.layer.shadowColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.2].CGColor; - self.perView.layer.shadowOffset = CGSizeMake(0,0); - self.perView.layer.shadowOpacity = 1; - self.perView.layer.shadowRadius = 3; - - self.backgroundColor = [FUImageHelper getPixelColorScreenWindowAtLocation:self.center]; - if (_didChange) { - _didChange(self.backgroundColor); - } - - _imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"aiming_point"]]; - _imageView.frame = CGRectMake(self.bounds.size.width/2 - 10, self.bounds.size.height - 20, 20, 20); - [self addSubview:_imageView]; - -} - - -#pragma mark - 手势 -static int cout = 0; -- (void)handlePanAction:(UIPanGestureRecognizer *)sender { - - CGPoint point = [sender translationInView:[sender.view superview]]; - - __block CGPoint viewCenter = CGPointMake(sender.view.center.x + point.x, sender.view.center.y + point.y); - - __block CGPoint imageCenter = [self convertPoint:_imageView.center toView:[sender.view superview]]; - - // 拖拽状态结束 - if (sender.state == UIGestureRecognizerStateBegan) { - CGRect frame = self.frame; - frame.origin = CGPointMake(frame.origin.x, frame.origin.y - 50); - self.frame = frame; - }else if (sender.state == UIGestureRecognizerStateEnded) { - [self viweMovingEnd:imageCenter]; - } else { - if (!CGRectContainsPoint(_actionRect, viewCenter)) { - return; - } - - - [sender setTranslation:CGPointMake(0, 0) inView:[sender.view superview]]; - sender.view.center = viewCenter; - cout ++; - if (cout % 4 != 0) {//减少触发频率 - return; - } - - if (self.BlockPointer) { - self.BlockPointer(imageCenter); - } - } -} - - --(void)viweMovingEnd:(CGPoint)center{ - if (self.BlockPointer) { - self.BlockPointer(center); - } - - //手指离开屏幕时最后一次取点之后 设置CGPointZero ,表示不再取点 - if (self.BlockPointer) { - self.BlockPointer(CGPointZero); - } - - if (_complete) { - _complete(); - } - self.center = center; - self.hidden = YES; -} - - --(void)toucheSetPoint:(CGPoint)point{ - self.perView.backgroundColor = [FUImageHelper getPixelColorScreenWindowAtLocation:point]; - if (_didChange) { - _didChange(self.perView.backgroundColor); - } - - if (_complete) { - _complete(); - } - - [UIView animateWithDuration:0.05 animations:^{ - self.center = point; - } completion:^(BOOL finished) { - self.hidden = YES; - }]; -} - - --(void)dealloc{ - NSLog(@"takeColor ---- dealloc"); -} - -@end diff --git a/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenImageRenderViewController.h b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenImageRenderViewController.h new file mode 100644 index 00000000..2761f53f --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenImageRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUGreenScreenImageRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/12. +// + +#import "FUImageRenderViewController.h" +#import "FUGreenScreenImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenImageRenderViewController : FUImageRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenImageRenderViewController.m b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenImageRenderViewController.m new file mode 100644 index 00000000..68da1e93 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenImageRenderViewController.m @@ -0,0 +1,77 @@ +// +// FUGreenScreenImageRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/12. +// + +#import "FUGreenScreenImageRenderViewController.h" + +#import +#import + +#import "UIImage+FU.h" + +@interface FUGreenScreenImageRenderViewController () + +@end + +@implementation FUGreenScreenImageRenderViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // 添加绿幕视图 + [[FUGreenScreenComponentManager sharedManager] addComponentViewToView:self.view]; + [FUGreenScreenComponentManager sharedManager].displayView = self.renderView; + [FUGreenScreenComponentManager sharedManager].delegate = self; + // 更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:[FUGreenScreenComponentManager sharedManager].componentViewHeight + 10 hidden:[FUGreenScreenComponentManager sharedManager].selectedIndex == -1 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + // 移除绿幕视图 + [[FUGreenScreenComponentManager sharedManager] removeComponentView]; + [FUGreenScreenComponentManager sharedManager].displayView = nil; + [FUGreenScreenComponentManager sharedManager].delegate = nil; +} + +#pragma mark - FUGreenScreenComponentDelegate + +- (void)greenScreenComponentDidCustomizeSafeArea { + // 相册选择安全区域图片 + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; + picker.allowsEditing = NO; + picker.mediaTypes = @[(NSString *)kUTTypeImage]; + [self presentViewController:picker animated:YES completion:nil]; +} + +- (void)greenScreenComponentViewHeightDidChange:(CGFloat)height { + // 绿幕视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfDownloadButton:height + 10 hidden:[FUGreenScreenComponentManager sharedManager].selectedIndex == -1 animated:YES]; +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:^{ + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + if (!image) { + return; + } + image = [image fu_processedImage]; + // 保存自定义安全区域图片 + [[FUGreenScreenComponentManager sharedManager] saveCustomSafeArea:image]; + }]; +} + + +@end diff --git a/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenVideoRenderViewController.h b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenVideoRenderViewController.h new file mode 100644 index 00000000..c1abd24e --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenVideoRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUGreenScreenVideoRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUVideoRenderViewController.h" +#import "FUGreenScreenVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenVideoRenderViewController : FUVideoRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenVideoRenderViewController.m b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenVideoRenderViewController.m new file mode 100644 index 00000000..5d97edad --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenVideoRenderViewController.m @@ -0,0 +1,79 @@ +// +// FUGreenScreenVideoRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUGreenScreenVideoRenderViewController.h" + +#import +#import + +#import "UIImage+FU.h" + +@interface FUGreenScreenVideoRenderViewController () + +@end + +@implementation FUGreenScreenVideoRenderViewController + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // 添加绿幕视图 + [[FUGreenScreenComponentManager sharedManager] addComponentViewToView:self.view]; + [FUGreenScreenComponentManager sharedManager].displayView = self.renderView; + [FUGreenScreenComponentManager sharedManager].delegate = self; + // 更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:[FUGreenScreenComponentManager sharedManager].componentViewHeight + 10 hidden:[FUGreenScreenComponentManager sharedManager].selectedIndex == -1 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + // 移除绿幕视图 + [[FUGreenScreenComponentManager sharedManager] removeComponentView]; + [FUGreenScreenComponentManager sharedManager].displayView = nil; + [FUGreenScreenComponentManager sharedManager].delegate = nil; +} + +#pragma mark - FUGreenScreenComponentDelegate + +- (void)greenScreenComponentDidCustomizeSafeArea { + // 相册选择安全区域图片 + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; + picker.allowsEditing = NO; + picker.mediaTypes = @[(NSString *)kUTTypeImage]; + [self presentViewController:picker animated:YES completion:nil]; +} + +- (void)greenScreenComponentViewHeightDidChange:(CGFloat)height { + // 绿幕视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfDownloadButton:height + 10 hidden:[FUGreenScreenComponentManager sharedManager].selectedIndex == -1 animated:YES]; +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:^{ + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + if (!image) { + return; + } + image = [image fu_processedImage]; + // 保存自定义安全区域图片 + [[FUGreenScreenComponentManager sharedManager] saveCustomSafeArea:image]; + }]; +} + + +@end diff --git a/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenViewController.h b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenViewController.h new file mode 100644 index 00000000..de04d498 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenViewController.h @@ -0,0 +1,17 @@ +// +// FUGreenScreenViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/1. +// + +#import "FURenderViewController.h" +#import "FUGreenScreenViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenViewController.m b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenViewController.m new file mode 100644 index 00000000..c1453d9f --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewController/FUGreenScreenViewController.m @@ -0,0 +1,90 @@ +// +// FUGreenScreenViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenViewController.h" + +#import +#import + +#import "UIImage+FU.h" + + +@interface FUGreenScreenViewController () + +@property (nonatomic, strong, readonly) FUGreenScreenViewModel *viewModel; + +@end + +@implementation FUGreenScreenViewController + +@dynamic viewModel; + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 加载绿幕 + [[FUGreenScreenComponentManager sharedManager] loadGreenScreen]; + + [FUAlertManager showAlertWithTitle:nil message:FULocalizedString(@"请使用纯色背景拍摄,推荐绿色幕布效果最佳") cancel:nil confirm:FULocalizedString(@"我知道了") inController:self confirmHandler:nil cancelHandler:nil]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // 添加绿幕视图 + [[FUGreenScreenComponentManager sharedManager] addComponentViewToView:self.view]; + [FUGreenScreenComponentManager sharedManager].delegate = self; + // 更新拍照/录制按钮位置 + [self updateBottomConstraintsOfCaptureButton:[FUGreenScreenComponentManager sharedManager].componentViewHeight + 10 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + // 移除绿幕视图 + [[FUGreenScreenComponentManager sharedManager] removeComponentView]; + [FUGreenScreenComponentManager sharedManager].delegate = nil; +} + +- (void)dealloc { + [FUGreenScreenComponentManager destory]; +} + +#pragma mark - FUGreenScreenComponentDelegate + +- (void)greenScreenComponentDidCustomizeSafeArea { + // 相册选择安全区域图片 + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; + picker.allowsEditing = NO; + picker.mediaTypes = @[(NSString *)kUTTypeImage]; + [self presentViewController:picker animated:YES completion:nil]; +} + +- (void)greenScreenComponentViewHeightDidChange:(CGFloat)height { + // 绿幕视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfCaptureButton:height + 10 animated:YES]; +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:^{ + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + if (!image) { + return; + } + image = [image fu_processedImage]; + // 保存自定义安全区域图片 + [[FUGreenScreenComponentManager sharedManager] saveCustomSafeArea:image]; + }]; +} + +@end diff --git a/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenImageRenderViewModel.h b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenImageRenderViewModel.h new file mode 100644 index 00000000..db917419 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenImageRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUGreenScreenImageRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/12. +// + +#import "FUImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenImageRenderViewModel : FUImageRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenImageRenderViewModel.m b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenImageRenderViewModel.m new file mode 100644 index 00000000..84549e12 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenImageRenderViewModel.m @@ -0,0 +1,16 @@ +// +// FUGreenScreenImageRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/12. +// + +#import "FUGreenScreenImageRenderViewModel.h" + +@implementation FUGreenScreenImageRenderViewModel + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsNone; +} + +@end diff --git a/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenVideoRenderViewModel.h b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenVideoRenderViewModel.h new file mode 100644 index 00000000..b821f406 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenVideoRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUGreenScreenVideoRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenVideoRenderViewModel : FUVideoRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenVideoRenderViewModel.m b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenVideoRenderViewModel.m new file mode 100644 index 00000000..5759b8e7 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenVideoRenderViewModel.m @@ -0,0 +1,16 @@ +// +// FUGreenScreenVideoRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/15. +// + +#import "FUGreenScreenVideoRenderViewModel.h" + +@implementation FUGreenScreenVideoRenderViewModel + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsNone; +} + +@end diff --git a/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenViewModel.h b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenViewModel.h new file mode 100644 index 00000000..b6edcf28 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenViewModel.h @@ -0,0 +1,16 @@ +// +// FUGreenScreenViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/1. +// + +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUGreenScreenViewModel : FURenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenViewModel.m b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenViewModel.m new file mode 100644 index 00000000..bbe30af4 --- /dev/null +++ b/FULiveDemo/Modules/GreenScreen/ViewModel/FUGreenScreenViewModel.m @@ -0,0 +1,30 @@ +// +// FUGreenScreenViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/1. +// + +#import "FUGreenScreenViewModel.h" + +@implementation FUGreenScreenViewModel + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleGreenScreen; +} + +- (BOOL)supportMediaRendering { + return YES; +} + +- (BOOL)supportPresetSelection { + return YES; +} + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsNone; +} + +@end diff --git a/FULiveDemo/Modules/HairBeauty/Manager/FUHairManager.h b/FULiveDemo/Modules/HairBeauty/Manager/FUHairManager.h deleted file mode 100644 index 6e103574..00000000 --- a/FULiveDemo/Modules/HairBeauty/Manager/FUHairManager.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FUHairManager.h -// FULiveDemo -// -// Created by lsh726 on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -typedef NS_ENUM(NSUInteger, FUHairModel) { - FUHairModelModelNormal, - FUHairModelModelGradient -}; -NS_ASSUME_NONNULL_BEGIN - -@interface FUHairManager : FUMetaManager - -@property (nonatomic, strong, nullable) FUHairBeauty *hair; - -@property (nonatomic, copy) NSArray *hairItems; - -- (void)loadItemWithPath:(NSString *)path; - -@property (nonatomic, assign) NSUInteger curMode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/Manager/FUHairManager.m b/FULiveDemo/Modules/HairBeauty/Manager/FUHairManager.m deleted file mode 100644 index e53209e9..00000000 --- a/FULiveDemo/Modules/HairBeauty/Manager/FUHairManager.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// FUHairManager.m -// FULiveDemo -// -// Created by lsh726 on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUHairManager.h" -#import -@implementation FUHairManager -- (instancetype)init { - self = [super init]; - if (self) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"hair_gradient" ofType:@"bundle"]; - self.hair = [[FUHairBeauty alloc] initWithPath:path name:@"hair"]; - self.hair.index = 0; - self.hair.strength = 0.5; - [self loadItem]; - self.curMode = FUHairModelModelGradient; - } - return self; -} - -- (void)loadItem { - [FURenderKit shareRenderKit].hairBeauty = self.hair; -} - -- (void)loadItemWithPath:(NSString *)path { - self.hair = [[FUHairBeauty alloc] initWithPath:path name:@"hair"]; - [self loadItem]; -} - -- (NSArray *)hairItems { - if (!_hairItems) { - _hairItems = @[@"resetItem", @"icon_gradualchangehair_01", @"icon_gradualchangehair_02", @"icon_gradualchangehair_03", @"icon_gradualchangehair_04", @"icon_gradualchangehair_05", @"hair_color_1", @"hair_color_2", @"hair_color_3", @"hair_color_4", @"hair_color_5", @"hair_color_6", @"hair_color_7", @"hair_color_8"]; - } - return _hairItems; -} - -@end diff --git a/FULiveDemo/Modules/HairBeauty/Model/FUHairBeautyModel.h b/FULiveDemo/Modules/HairBeauty/Model/FUHairBeautyModel.h new file mode 100644 index 00000000..ddf611b0 --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/Model/FUHairBeautyModel.h @@ -0,0 +1,24 @@ +// +// FUHairBeautyModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/26. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUHairBeautyModel : NSObject + +@property (nonatomic, copy) NSString *icon; +/// 程度值 +@property (nonatomic, assign) double value; +/// 是否渐变色 +@property (nonatomic, assign) BOOL isGradient; +/// 颜色索引 +@property (nonatomic, assign) NSInteger index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/Model/FUHairBeautyModel.m b/FULiveDemo/Modules/HairBeauty/Model/FUHairBeautyModel.m new file mode 100644 index 00000000..33a4620a --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/Model/FUHairBeautyModel.m @@ -0,0 +1,12 @@ +// +// FUHairBeautyModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/26. +// + +#import "FUHairBeautyModel.h" + +@implementation FUHairBeautyModel + +@end diff --git a/FULiveDemo/Modules/HairBeauty/VC/FUHairController.h b/FULiveDemo/Modules/HairBeauty/VC/FUHairController.h deleted file mode 100644 index 030360de..00000000 --- a/FULiveDemo/Modules/HairBeauty/VC/FUHairController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUHairController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUHairController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/VC/FUHairController.m b/FULiveDemo/Modules/HairBeauty/VC/FUHairController.m deleted file mode 100644 index 0388282d..00000000 --- a/FULiveDemo/Modules/HairBeauty/VC/FUHairController.m +++ /dev/null @@ -1,90 +0,0 @@ -// -// FUHairController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUHairController.h" -#import "FUHairView.h" -#import "SVProgressHUD.h" -#import "FUHairManager.h" - -@interface FUHairController () -@property (nonatomic, strong) FUHairView *hairView ; - -@property (nonatomic, assign) FUHairModel currentModle; - -@property (nonatomic, strong) FUHairManager *hairManager; -@end - -@implementation FUHairController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - self.hairManager = [[FUHairManager alloc] init]; - [self setupView]; -} - --(void)setupView{ - _hairView = [[FUHairView alloc] init]; - _hairView.delegate = self; - _hairView.itemsArray = self.hairManager.hairItems; - [self.view addSubview:_hairView]; - [_hairView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(134 + 34); - }else{ - make.height.mas_equalTo(134); - } - - }]; - _hairView.backgroundColor = [UIColor clearColor]; - - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - [_hairView insertSubview:effectview atIndex:0]; - /* 磨玻璃 */ - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(_hairView); - }]; - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -100) ; -} - -#pragma mark - FUHairViewDelegate --(void)hairViewDidSelectedhairIndex:(NSInteger)index{ - if (index == -1) { - self.hairManager.hair.index = 0; - self.hairManager.hair.strength = 0; - }else{ - if(index < 5) {//渐变色 - if (self.hairManager.curMode != FUHairModelModelGradient) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"hair_gradient" ofType:@"bundle"]; - [self.hairManager loadItemWithPath:path]; - self.hairManager.curMode = FUHairModelModelGradient; - } - - self.hairManager.hair.index = (int)index; - self.hairManager.hair.strength = self.hairView.slider.value; - }else { - if (self.hairManager.curMode != FUHairModelModelNormal) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"hair_normal" ofType:@"bundle"]; - [self.hairManager loadItemWithPath:path]; - self.hairManager.curMode = FUHairModelModelNormal; - } - - self.hairManager.hair.index = (int)index - 5; - self.hairManager.hair.strength = self.hairView.slider.value; - } - } -} - --(void)hairViewChanageStrength:(float)strength { - self.hairManager.hair.strength = strength; -} - -@end diff --git a/FULiveDemo/Modules/HairBeauty/View/FUHairBeautyView.h b/FULiveDemo/Modules/HairBeauty/View/FUHairBeautyView.h new file mode 100644 index 00000000..a93e3339 --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/View/FUHairBeautyView.h @@ -0,0 +1,28 @@ +// +// FUHairBeautyView.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/5. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUHairBeautyViewDelegate + +@optional +- (void)hairBeautyViewChangedStrength:(double)strength; + +@end + + +@interface FUHairBeautyView : FUItemsView + +@property (nonatomic, strong, readonly) FUSlider *slider; + +@property (nonatomic, weak) id hairDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/View/FUHairBeautyView.m b/FULiveDemo/Modules/HairBeauty/View/FUHairBeautyView.m new file mode 100644 index 00000000..b042eb83 --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/View/FUHairBeautyView.m @@ -0,0 +1,40 @@ +// +// FUHairBeautyView.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/5. +// + +#import "FUHairBeautyView.h" + +@interface FUHairBeautyView () + +@property (nonatomic, strong) FUSlider *slider; + +@end + +@implementation FUHairBeautyView + +- (instancetype)initWithFrame:(CGRect)frame topSpacing:(CGFloat)topSpacing { + self = [super initWithFrame:frame topSpacing:topSpacing]; + if (self) { + [self addSubview:self.slider]; + } + return self; +} + +- (void)sliderValueChanged { + if (self.hairDelegate && [self.hairDelegate respondsToSelector:@selector(hairBeautyViewChangedStrength:)]) { + [self.hairDelegate hairBeautyViewChangedStrength:self.slider.value]; + } +} + +- (FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectMake(52, 10, CGRectGetWidth(self.frame) - 104, 30)]; + [_slider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + } + return _slider; +} + +@end diff --git a/FULiveDemo/Modules/HairBeauty/View/FUHairView.h b/FULiveDemo/Modules/HairBeauty/View/FUHairView.h deleted file mode 100644 index 4e4ebe31..00000000 --- a/FULiveDemo/Modules/HairBeauty/View/FUHairView.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// FUHairView.h -// FULiveDemo -// -// Created by L on 2018/9/19. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUHairViewDelegate - -@optional -- (void)hairViewDidSelectedhairIndex:(NSInteger)index; - --(void)hairViewChanageStrength:(float)strength; -@end - -@interface FUHairView : UIView - -@property (nonatomic, strong) NSArray *itemsArray ; - -@property (nonatomic, assign) iddelegate ; - -@property (weak, nonatomic) IBOutlet FUSlider *slider; -@end - - -@interface FUHairCell : UICollectionViewCell - -@property (weak, nonatomic) IBOutlet UIImageView *imageView; -@end - - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/View/FUHairView.m b/FULiveDemo/Modules/HairBeauty/View/FUHairView.m deleted file mode 100644 index dab8f4fa..00000000 --- a/FULiveDemo/Modules/HairBeauty/View/FUHairView.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// FUHairView.m -// FULiveDemo -// -// Created by L on 2018/9/19. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUHairView.h" - - -@interface FUHairView () -{ - NSInteger selectedIndex ; -} -@property (nonatomic, strong) NSMutableDictionary *paramDic ; -@property (weak, nonatomic) IBOutlet UICollectionView *collection; -@end - -static NSString *cellID = @"FUHairCell"; -@implementation FUHairView - --(void)awakeFromNib { - [super awakeFromNib]; - [_collection registerClass:[FUHairCell class] forCellWithReuseIdentifier:cellID]; - self.collection.delegate = self ; - self.collection.dataSource = self ; - - self.paramDic = [NSMutableDictionary dictionaryWithCapacity:1]; - - selectedIndex = 1 ; -} - - --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - self = [[[NSBundle mainBundle]loadNibNamed:@"FUHairView" owner:self options:nil] firstObject]; - self.frame = frame; - } - - return self; -} - - -- (IBAction)sliderValueChange:(FUSlider *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(hairViewChanageStrength:)]) { - [self.delegate hairViewChanageStrength:sender.value]; - } - - NSString *imageName = self.itemsArray[selectedIndex] ; - [self.paramDic setObject:@(sender.value) forKey:imageName]; -} - --(void)setItemsArray:(NSArray *)itemsArray { - _itemsArray = itemsArray; - [self.collection reloadData]; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.itemsArray.count ; -} - - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUHairCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - - NSString *imageName = self.itemsArray[indexPath.row] ; - cell.imageView.image = [UIImage imageNamed:imageName]; - - cell.imageView.layer.borderWidth = indexPath.row == selectedIndex ? 3.0 : 0.0 ; - cell.imageView.layer.borderColor = indexPath.row == selectedIndex ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0].CGColor : [UIColor clearColor].CGColor; - - return cell; -} - - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake(60, 60) ; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - if (indexPath.row == selectedIndex) { - return ; - } - [collectionView deselectItemAtIndexPath:indexPath animated:YES]; - - selectedIndex = indexPath.row ; - [collectionView reloadData]; - - if (indexPath.row == 0) { - if (self.delegate && [self.delegate respondsToSelector:@selector(hairViewDidSelectedhairIndex:)]) { - [self.delegate hairViewDidSelectedhairIndex:-1]; - } - - self.slider.hidden = YES ; - }else { - - float strength = 0.5 ; - NSString *imageName = self.itemsArray[selectedIndex] ; - if ([self.paramDic.allKeys containsObject:imageName]) { - strength = [[self.paramDic objectForKey:imageName] floatValue] ; - }else { - [self.paramDic setObject:@(0.5) forKey:imageName]; - } - self.slider.hidden = NO ; - self.slider.value = strength ; - - if (self.delegate && [self.delegate respondsToSelector:@selector(hairViewDidSelectedhairIndex:)]) { - [self.delegate hairViewDidSelectedhairIndex:indexPath.row - 1]; - } - } -} - - -@end - - - -@implementation FUHairCell --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - self = [[NSBundle mainBundle]loadNibNamed:@"FUHairView" owner:self options:nil][1]; - self.frame = frame; - } - - return self; -} - -@end diff --git a/FULiveDemo/Modules/HairBeauty/View/FUHairView.xib b/FULiveDemo/Modules/HairBeauty/View/FUHairView.xib deleted file mode 100644 index b46f3818..00000000 --- a/FULiveDemo/Modules/HairBeauty/View/FUHairView.xib +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/HairBeauty/ViewController/FUHairBeautyViewController.h b/FULiveDemo/Modules/HairBeauty/ViewController/FUHairBeautyViewController.h new file mode 100644 index 00000000..8df36c13 --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/ViewController/FUHairBeautyViewController.h @@ -0,0 +1,17 @@ +// +// FUHairBeautyViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/5. +// + +#import "FURenderViewController.h" +#import "FUHairBeautyViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUHairBeautyViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/ViewController/FUHairBeautyViewController.m b/FULiveDemo/Modules/HairBeauty/ViewController/FUHairBeautyViewController.m new file mode 100644 index 00000000..7c85f052 --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/ViewController/FUHairBeautyViewController.m @@ -0,0 +1,59 @@ +// +// FUHairBeautyViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/5. +// + +#import "FUHairBeautyViewController.h" + +#import "FUHairBeautyView.h" + +@interface FUHairBeautyViewController () + +@property (nonatomic, strong) FUHairBeautyView *hairView; + +@property (nonatomic, strong, readonly) FUHairBeautyViewModel *viewModel; + +@end + +@implementation FUHairBeautyViewController + +@dynamic viewModel; + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.view addSubview:self.hairView]; + + [self updateBottomConstraintsOfCaptureButton:CGRectGetHeight(self.hairView.frame) + 10 animated:NO]; +} + +- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { + if (index == self.viewModel.selectedIndex || index < 0 || index >= self.viewModel.hairItems.count) { + return; + } + self.viewModel.selectedIndex = index; + self.hairView.slider.hidden = index == 0; + if (!self.hairView.slider.hidden) { + self.hairView.slider.value = self.viewModel.strength; + } +} + +-(void)hairBeautyViewChangedStrength:(double)strength { + self.viewModel.strength = strength; +} + +- (FUHairBeautyView *)hairView { + if (!_hairView) { + _hairView = [[FUHairBeautyView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(134), CGRectGetWidth(self.view.bounds), FUHeightIncludeBottomSafeArea(134)) topSpacing:50]; + _hairView.delegate = self; + _hairView.hairDelegate = self; + _hairView.items = self.viewModel.icons; + _hairView.selectedIndex = self.viewModel.selectedIndex; + _hairView.slider.value = self.viewModel.strength; + } + return _hairView; +} + +@end diff --git a/FULiveDemo/Modules/HairBeauty/ViewModel/FUHairBeautyViewModel.h b/FULiveDemo/Modules/HairBeauty/ViewModel/FUHairBeautyViewModel.h new file mode 100644 index 00000000..b9586a8c --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/ViewModel/FUHairBeautyViewModel.h @@ -0,0 +1,29 @@ +// +// FUHairBeautyViewModel.h +// FULiveDemo +// +// Created by lsh726 on 2021/3/4. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FURenderViewModel.h" + +@class FUHairBeautyModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUHairBeautyViewModel : FURenderViewModel + +@property (nonatomic, copy, readonly) NSArray *hairItems; + +@property (nonatomic, copy, readonly) NSArray *icons; + +@property (nonatomic, assign) NSInteger selectedIndex; + +@property (nonatomic, assign) double strength; + +- (double)strengthAtIndex:(NSInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/HairBeauty/ViewModel/FUHairBeautyViewModel.m b/FULiveDemo/Modules/HairBeauty/ViewModel/FUHairBeautyViewModel.m new file mode 100644 index 00000000..d0b23618 --- /dev/null +++ b/FULiveDemo/Modules/HairBeauty/ViewModel/FUHairBeautyViewModel.m @@ -0,0 +1,111 @@ +// +// FUHairBeautyViewModel.m +// FULiveDemo +// +// Created by lsh726 on 2021/3/4. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUHairBeautyViewModel.h" +#import "FUHairBeautyModel.h" + +@interface FUHairBeautyViewModel () + +@property (nonatomic, copy) NSArray *hairItems; + +@property (nonatomic, copy) NSArray *icons; + +@end + +@implementation FUHairBeautyViewModel +- (instancetype)init { + self = [super init]; + if (self) { + self.selectedIndex = 1; + } + return self; +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex == 0) { + [FURenderKit shareRenderKit].hairBeauty = nil; + _selectedIndex = 0; + return; + } + _selectedIndex = selectedIndex; + FUHairBeautyModel *model = self.hairItems[selectedIndex]; + if (model.isGradient) { + // 渐变色 + if (![FURenderKit shareRenderKit].hairBeauty || [[FURenderKit shareRenderKit].hairBeauty.name isEqualToString:@"hair_normal"]) { + // 重新初始化 + NSString *path = [[NSBundle mainBundle] pathForResource:@"hair_gradient" ofType:@"bundle"]; + FUHairBeauty *hair = [FUHairBeauty itemWithPath:path name:@"hair_gradient"]; + [FURenderKit shareRenderKit].hairBeauty = hair; + } + } else { + // 普通颜色 + if (![FURenderKit shareRenderKit].hairBeauty || [[FURenderKit shareRenderKit].hairBeauty.name isEqualToString:@"hair_gradient"]) { + // 重新初始化 + NSString *path = [[NSBundle mainBundle] pathForResource:@"hair_normal" ofType:@"bundle"]; + FUHairBeauty *hair = [FUHairBeauty itemWithPath:path name:@"hair_normal"]; + [FURenderKit shareRenderKit].hairBeauty = hair; + } + } + [FURenderKit shareRenderKit].hairBeauty.index = (int)model.index; + [FURenderKit shareRenderKit].hairBeauty.strength = model.value; +} + +- (double)strengthAtIndex:(NSInteger)index { + FUHairBeautyModel *model = self.hairItems[index]; + return model.value; +} + +- (void)setStrength:(double)strength { + self.hairItems[self.selectedIndex].value = strength; + [FURenderKit shareRenderKit].hairBeauty.strength = strength; +} + +- (double)strength { + FUHairBeautyModel *model = self.hairItems[self.selectedIndex]; + return model.value; +} + +- (NSArray *)hairItems { + if (!_hairItems) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"hair_beauty" ofType:@"json"]; + NSData *data = [NSData dataWithContentsOfFile:path]; + NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + _hairItems = [FUHairBeautyModel mj_objectArrayWithKeyValuesArray:jsonArray]; + } + return _hairItems; +} + +- (NSArray *)icons { + if (!_icons) { + _icons = @[ + @"reset_item", + @"icon_gradualchangehair_01", + @"icon_gradualchangehair_02", + @"icon_gradualchangehair_03", + @"icon_gradualchangehair_04", + @"icon_gradualchangehair_05", + @"hair_color_1", + @"hair_color_2", + @"hair_color_3", + @"hair_color_4", + @"hair_color_5", + @"hair_color_6", + @"hair_color_7", + @"hair_color_8" + ]; + } + return _icons; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleHairBeauty; +} + +@end diff --git a/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.h b/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.h index 2f440287..305651d1 100644 --- a/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.h +++ b/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.h @@ -6,11 +6,12 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import "FUBaseViewController.h" +#import "FURenderViewController.h" +#import "FUHilariousViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUHilariousViewController : FUBaseViewController +@interface FUHilariousViewController : FURenderViewController @end diff --git a/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.m b/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.m index 887493a5..90771b33 100644 --- a/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.m +++ b/FULiveDemo/Modules/Hilarious/ViewController/FUHilariousViewController.m @@ -7,41 +7,35 @@ // #import "FUHilariousViewController.h" -#import "FUHilariousViewModel.h" -#import "FULocalDataManager.h" -#import @interface FUHilariousViewController () @property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUHilariousViewModel *viewModel; + +@property (nonatomic, strong, readonly) FUHilariousViewModel *viewModel; @end @implementation FUHilariousViewController +@dynamic viewModel; + - (void)viewDidLoad { [super viewDidLoad]; - [self.baseManager setMaxFaces:1]; + self.viewModel.maxFaceNumber = 1; [self.view addSubview:self.itemsView]; [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } + make.leading.trailing.equalTo(self.view); + make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(84)); }]; self.itemsView.items = self.viewModel.hilariousItems; self.itemsView.selectedIndex = 1; - - [self.viewModel loadItem:self.viewModel.hilariousItems[1] completion:nil]; - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; } - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { @@ -56,11 +50,11 @@ - (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index }]; } // 道具提示处理 - NSString *hint = [FULocalDataManager stickerTipsJsonData][item]; - if (hint && hint.length != 0) { + if (self.viewModel.hilariousTips[item]) { + NSString *hint = self.viewModel.hilariousTips[item]; dispatch_async(dispatch_get_main_queue(), ^{ self.tipLabel.hidden = NO; - self.tipLabel.text = FUNSLocalizedString(hint, nil); + self.tipLabel.text = FULocalizedString(hint); [FUHilariousViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; }); @@ -79,11 +73,4 @@ - (FUItemsView *)itemsView { return _itemsView; } -- (FUHilariousViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUHilariousViewModel alloc] init]; - } - return _viewModel; -} - @end diff --git a/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.h b/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.h index 66aa26ba..ec7b824c 100644 --- a/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.h +++ b/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.h @@ -6,13 +6,15 @@ // Copyright © 2022 FaceUnity. All rights reserved. // -#import +#import "FURenderViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUHilariousViewModel : NSObject +@interface FUHilariousViewModel : FURenderViewModel -@property (nonatomic, copy) NSArray *hilariousItems; +@property (nonatomic, copy, readonly) NSArray *hilariousItems; + +@property (nonatomic, copy, readonly) NSDictionary *hilariousTips; - (void)loadItem:(NSString *)item completion:(nullable void(^)(void))completion; diff --git a/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.m b/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.m index 51c516d2..b021c804 100644 --- a/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.m +++ b/FULiveDemo/Modules/Hilarious/ViewModel/FUHilariousViewModel.m @@ -10,7 +10,11 @@ @interface FUHilariousViewModel () -@property (nonatomic, strong) FUSticker *currentSticker; +@property (nonatomic, strong) FUSticker *currentItem; + +@property (nonatomic, copy,) NSArray *hilariousItems; + +@property (nonatomic, copy) NSDictionary *hilariousTips; @end @@ -22,24 +26,39 @@ - (void)loadItem:(NSString *)item completion:(void (^)(void))completion { } NSString *path = [[NSBundle mainBundle] pathForResource:item ofType:@"bundle"]; FUSticker *sticker = [FUSticker itemWithPath:path name:@"FUHilarious"]; - if (!self.currentSticker) { + if (!self.currentItem) { [[FURenderKit shareRenderKit].stickerContainer addSticker:sticker completion:completion]; } else { - [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentSticker withSticker:sticker completion:completion]; + [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentItem withSticker:sticker completion:completion]; } - self.currentSticker = sticker; + self.currentItem = sticker; } - (void)releaseItem { [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; - self.currentSticker = nil; + self.currentItem = nil; } - (NSArray *)hilariousItems { if (!_hilariousItems) { - _hilariousItems = @[@"resetItem", @"big_head_facewarp1", @"big_head_facewarp2", @"big_head_facewarp4", @"big_head_facewarp5", @"big_head_facewarp6", @"big_head_facewarp3"]; + _hilariousItems = @[@"reset_item", @"big_head_facewarp1", @"big_head_facewarp2", @"big_head_facewarp4", @"big_head_facewarp5", @"big_head_facewarp6", @"big_head_facewarp3"]; } return _hilariousItems; } +- (NSDictionary *)hilariousTips { + if (!_hilariousTips) { + _hilariousTips = @{ + @"big_head_facewarp3" : @"微笑触发" + }; + } + return _hilariousTips; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleHilarious; +} + @end diff --git a/FULiveDemo/Modules/LightMakeup/Manager/FULightMakeupManager.h b/FULiveDemo/Modules/LightMakeup/Manager/FULightMakeupManager.h deleted file mode 100644 index cda33d46..00000000 --- a/FULiveDemo/Modules/LightMakeup/Manager/FULightMakeupManager.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FULightMakeupManager.h -// FULiveDemo -// -// Created by Chen on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import - -@class FULightModel, FUSingleLightMakeupModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface FULightMakeupManager : FUMetaManager -@property (nonatomic, strong, nullable) FULightMakeup *lightMakeup; -@property (nonatomic, strong, readonly) NSArray *dataArray; - -//业务层设置所有子妆需要配合整体妆容程度值,所以需要带上lightModel.value -- (void)setAllSubLghtMakeupModelWithLightModel:(FULightModel *)lightModel; - -//单独设置子妆设置强度值 -- (void)setIntensityWithModel:(FUSingleLightMakeupModel *)model; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/Manager/FULightMakeupManager.m b/FULiveDemo/Modules/LightMakeup/Manager/FULightMakeupManager.m deleted file mode 100644 index 3d0bd42a..00000000 --- a/FULiveDemo/Modules/LightMakeup/Manager/FULightMakeupManager.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// FULightMakeupManager.m -// FULiveDemo -// -// Created by Chen on 2021/3/4. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FULightMakeupManager.h" -#import "FULightModel.h" -#import "FULocalDataManager.h" - -@interface FULightMakeupManager () -@property (nonatomic, strong) NSArray *dataArray; -@end - -@implementation FULightMakeupManager -- (instancetype)init { - self = [super init]; - if (self) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"light_makeup" ofType:@"bundle"]; - self.lightMakeup = [[FULightMakeup alloc] initWithPath:path name:@"light_makeup"]; - self.lightMakeup.isMakeupOn = YES; - self.lightMakeup.makeupLipMask = YES; - self.lightMakeup.intensityLip = 1.0; - NSDictionary *lightMakeupPar = [FULocalDataManager lightMakeupJsonData]; - self.dataArray = [FULightModel mj_objectArrayWithKeyValuesArray:lightMakeupPar[@"data"]]; - if (self.dataArray.count == 0) { - NSLog(@"%@.dataArray数据出错",self.class); - } - [self loadItem]; - } - return self; -} - -//业务层设置所有子妆需要配合整体妆容程度值,所以需要带上lightvalue -- (void)setAllSubLghtMakeupModelWithLightModel:(FULightModel *)lightModel { - //设置图片参数 - for (FUSingleLightMakeupModel *singleModel in lightModel.makeups) { - singleModel.realValue = singleModel.value * lightModel.value; - [self setSingModel:singleModel]; - } -} - -//设置子妆整体,包括图片、程度值 -- (void)setSingModel:(FUSingleLightMakeupModel *)model { - //程度值 - [self setIntensity:model.realValue type:model.type]; - - if (model.type == FUSingleMakeupTypeLip) { - self.lightMakeup.lipType = model.lipType; - self.lightMakeup.isTwoColor = model.isTwoColorLip; - NSArray *values = model.colorsArray; - if (values.count > 3) { - FUColor color = FUColorMake([values[0] doubleValue], [values[1] doubleValue], [values[2] doubleValue], [values[3] doubleValue]);; - self.lightMakeup.makeUpLipColor = color; - } - } - - //图片 - [self setImage:model.bundleName type:model.type]; -} - -//单独设置子妆设置强度值 -- (void)setIntensityWithModel:(FUSingleLightMakeupModel *)model { - [self setIntensity:model.realValue type:model.type]; -} - -//设置图片 -- (void)setImage:(NSString *)imageName type:(FUSingleMakeupType)type { - if (!imageName) { - NSLog(@"%@:%s图片名称不正确",self.class,__func__); - return ; - } - UIImage *image = [UIImage imageNamed:imageName]; - switch (type) { - case FUSingleMakeupTypeEyebrow: - self.lightMakeup.subEyebrowImage = image; - break; - case FUSingleMakeupTypeEyeshadow: - self.lightMakeup.subEyeshadowImage = image; - break; - case FUSingleMakeupTypePupil: - self.lightMakeup.subPupilImage = image; - break; - case FUSingleMakeupTypeEyelash: - self.lightMakeup.subEyelashImage = image; - break; - case FUSingleMakeupTypeHighlight: - self.lightMakeup.subHightLightImage = image; - break; - case FUSingleMakeupTypeEyeliner: - self.lightMakeup.subEyelinerImage = image; - break; - case FUSingleMakeupTypeBlusher: - self.lightMakeup.subBlusherImage = image; - break; - default: - break; - } -} - -//设置程度值 -- (void)setIntensity:(double)value type:(FUSingleMakeupType)type { - switch (type) { - case FUSingleMakeupTypeLip: - self.lightMakeup.intensityLip = value; - break; - case FUSingleMakeupTypeBlusher: - self.lightMakeup.intensityBlusher = value; - break; - case FUSingleMakeupTypeEyeshadow: - self.lightMakeup.intensityEyeshadow = value; - break; - case FUSingleMakeupTypeEyeliner: - self.lightMakeup.intensityEyeliner = value; - break; - case FUSingleMakeupTypeEyelash: - self.lightMakeup.intensityEyelash = value; - break; - case FUSingleMakeupTypePupil: - self.lightMakeup.intensityPupil = value; - break; - case FUSingleMakeupTypeEyebrow: - self.lightMakeup.intensityEyebrow = value; - break; - default: - break; - } -} - -- (FUColor)FUColorTransformWithValues:(NSArray *)values { - return FUColorMake([values[0] doubleValue], [values[1] doubleValue], [values[2] doubleValue], [values[3] doubleValue]);; -} - -- (void)loadItem { - [FURenderKit shareRenderKit].lightMakeup = self.lightMakeup; -} - -@end diff --git a/FULiveDemo/Modules/LightMakeup/Model/FULightMakeupModel.h b/FULiveDemo/Modules/LightMakeup/Model/FULightMakeupModel.h new file mode 100644 index 00000000..6fb755ff --- /dev/null +++ b/FULiveDemo/Modules/LightMakeup/Model/FULightMakeupModel.h @@ -0,0 +1,47 @@ +// +// FULightMakeupModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUSingleLightMakeupModel : NSObject +/// 子妆容类型 +@property (nonatomic, assign) FUSingleMakeupType type; +/// 加载到子妆的图片或者bundle +@property (nonatomic, copy) NSString *bundleName; +/// 妆容程度值 +@property (nonatomic, assign) double value; +/// 实际妆容程度值(子妆value * 组合妆value) +@property (nonatomic, assign) double realValue; +/// 妆容颜色 +@property (nonatomic, copy) NSArray *colorsArray; +/// 是否双色口红 +@property (nonatomic, assign) BOOL isTwoColorLipstick; +/// 口红类型 +@property (nonatomic, assign) NSInteger lipType; + +@end + +@interface FULightMakeupModel : NSObject + +/// 妆容名称 +@property (nonatomic, copy) NSString *name; +/// icon图片 +@property (nonatomic, copy) NSString *imageStr; +/// 选中的滤镜 +@property (nonatomic, copy) NSString *selectedFilter; +/// 选中滤镜的程度值 +@property (nonatomic, assign) double selectedFilterLevel; +/// 整体妆容程度值 +@property (nonatomic, assign) double value; +/// 子妆容数组 +@property (nonatomic, copy) NSArray *makeups; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/Model/FULightMakeupModel.m b/FULiveDemo/Modules/LightMakeup/Model/FULightMakeupModel.m new file mode 100644 index 00000000..5caaeb78 --- /dev/null +++ b/FULiveDemo/Modules/LightMakeup/Model/FULightMakeupModel.m @@ -0,0 +1,32 @@ +// +// FULightMakeupModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FULightMakeupModel.h" + +@implementation FUSingleLightMakeupModel + ++ (NSDictionary *)mj_replacedKeyFromPropertyName { + return @{ + @"type" : @"makeType", + @"bundleName" : @"namaBundle", + @"colorsArray" : @"colorStrV", + @"lipType" : @"lip_type", + @"isTwoColorLipstick" : @"is_two_color" + }; +} + +@end + +@implementation FULightMakeupModel + ++ (NSDictionary *)mj_objectClassInArray { + return @{ + @"makeups" : @"FUSingleLightMakeupModel" + }; +} + +@end diff --git a/FULiveDemo/Modules/LightMakeup/Model/FULightModel.h b/FULiveDemo/Modules/LightMakeup/Model/FULightModel.h deleted file mode 100644 index 19a3b9cd..00000000 --- a/FULiveDemo/Modules/LightMakeup/Model/FULightModel.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// FULightModel.h -// FULiveDemo -// -// Created by 孙慕 on 2019/10/17. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import -#import "FUSingleMakeupProtocol.h" -#import "FUSingleMakeupModel.h"//目的导入FUMakeupModelType枚举,这里简单写了 - -NS_ASSUME_NONNULL_BEGIN -@interface FUSingleLightMakeupModel : NSObject - -@end - -@interface FULightModel : NSObject -/* 妆容名称 */ -@property (copy, nonatomic) NSString *name; -/* icon图片 */ -@property (copy, nonatomic) NSString *imageStr; -/* 选中的滤镜 */ -@property (nonatomic, strong) NSString *selectedFilter; -/* 选中滤镜的 level*/ -@property (nonatomic, assign) double selectedFilterLevel; -/* 记录选中状态 */ -@property (assign, nonatomic) BOOL isSel; -/* 整体妆容程度值 */ -@property (nonatomic, assign) float value; - -/* 组合妆对应所有子妆容 */ -@property (nonatomic, copy) NSArray * makeups; - -@end - - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/Model/FULightModel.m b/FULiveDemo/Modules/LightMakeup/Model/FULightModel.m deleted file mode 100644 index 648ff22a..00000000 --- a/FULiveDemo/Modules/LightMakeup/Model/FULightModel.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// FULightModel.m -// FULiveDemo -// -// Created by 孙慕 on 2019/10/17. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FULightModel.h" - -@implementation FUSingleLightMakeupModel : NSObject - -@synthesize bundleName, value, realValue, colorsArray, isTwoColorLip, lipType; - -+ (NSDictionary *)mj_replacedKeyFromPropertyName { - return @{ - @"type" : @"makeType", - @"bundleName" : @"namaBundle", - @"colorsArray" : @"colorStrV", - @"lipType" : @"lip_type", - @"isTwoColorLip" : @"is_two_color" - }; -} - -@end - -@implementation FULightModel : NSObject - -+ (NSDictionary *)mj_objectClassInArray { - return @{ - @"makeups" : @"FUSingleLightMakeupModel" - }; -} - -@end diff --git a/FULiveDemo/Modules/LightMakeup/VC/FULightMakeupController.h b/FULiveDemo/Modules/LightMakeup/VC/FULightMakeupController.h deleted file mode 100644 index 61000912..00000000 --- a/FULiveDemo/Modules/LightMakeup/VC/FULightMakeupController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FULightMakeupController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/10/17. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FULightMakeupController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/VC/FULightMakeupController.m b/FULiveDemo/Modules/LightMakeup/VC/FULightMakeupController.m deleted file mode 100644 index 0d2d87ed..00000000 --- a/FULiveDemo/Modules/LightMakeup/VC/FULightMakeupController.m +++ /dev/null @@ -1,83 +0,0 @@ -// -// FULightMakeupController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/10/17. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FULightMakeupController.h" -#import "FULightMakeupCollectionView.h" -#import "FULightMakeupManager.h" - -@interface FULightMakeupController () - -/* 轻美妆选择 */ -@property(nonatomic,strong)FULightMakeupCollectionView *mCollectionView; - -@property (strong, nonatomic) FULightMakeupManager *lightMakeupManager; -@end - -@implementation FULightMakeupController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - /* 加载妆容道具 */ - self.lightMakeupManager = [[FULightMakeupManager alloc] init]; - [self setupView]; -} - --(void)setupView{ - /* 初始w值为卸妆状态 */ - if (self.lightMakeupManager.dataArray.count > 0) { - [self lightMakeupCollectionView:self.lightMakeupManager.dataArray[0]]; - } - _mCollectionView = [[FULightMakeupCollectionView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 134, [UIScreen mainScreen].bounds.size.width, 134) - dataArray:self.lightMakeupManager.dataArray - delegate:self]; - [self.view addSubview:_mCollectionView]; - - [_mCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(134 + 34); - }else{ - make.height.mas_equalTo(134); - } - - }]; - - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - effectview.alpha = 1.0; - [_mCollectionView addSubview:effectview]; - [_mCollectionView sendSubviewToBack:effectview]; - /* 磨玻璃 */ - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(_mCollectionView); - }]; - - self.photoBtn.transform = CGAffineTransformConcat(CGAffineTransformMakeTranslation(0, -100), CGAffineTransformMakeScale(0.8, 0.8)); -} - -#pragma mark - FULightMakeupCollectionViewDelegate --(void)lightMakeupCollectionView:(FULightModel *)model{ - /* 设置所有子妆容 */ - [self.lightMakeupManager setAllSubLghtMakeupModelWithLightModel:model]; - self.baseManager.beauty.filterName = [model.selectedFilter lowercaseString]; - self.baseManager.beauty.filterLevel = model.selectedFilterLevel; -} - --(void)lightMakeupModleValue:(FULightModel *)model { - for (FUSingleLightMakeupModel *subModel in model.makeups) { - /* 子妆容程度值 这里程度值设置为 子程度值*滑杆值 */ - subModel.realValue = subModel.value * model.value; - [self.lightMakeupManager setIntensityWithModel:subModel]; - } -// self.baseManager.beauty.filterLevel = model.selectedFilterLevel; - //根据滑动条的值修改-> 两端统一 - self.baseManager.beauty.filterLevel = model.value; -} -@end diff --git a/FULiveDemo/Modules/LightMakeup/View/FULightMakeupCollectionView.h b/FULiveDemo/Modules/LightMakeup/View/FULightMakeupCollectionView.h deleted file mode 100644 index 9769fd74..00000000 --- a/FULiveDemo/Modules/LightMakeup/View/FULightMakeupCollectionView.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FULightMakeupCollectionView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/10/17. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import -#import "FULightModel.h" -NS_ASSUME_NONNULL_BEGIN - -@protocol FULightMakeupCollectionViewDelegate -@optional -- (void)lightMakeupCollectionView:(FULightModel *)model; - -- (void)lightMakeupModleValue:(FULightModel *)model; -@end -@interface FULightMakeupCollectionView : UIView - -@property(nonatomic,strong) FULightModel *currentLightModel; - --(instancetype)initWithFrame:(CGRect)frame dataArray:(NSArray *)dataArray delegate:(id)delegate; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/View/FULightMakeupCollectionView.m b/FULiveDemo/Modules/LightMakeup/View/FULightMakeupCollectionView.m deleted file mode 100644 index 12496d7c..00000000 --- a/FULiveDemo/Modules/LightMakeup/View/FULightMakeupCollectionView.m +++ /dev/null @@ -1,129 +0,0 @@ -// -// FULightMakeupCollectionView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/10/17. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FULightMakeupCollectionView.h" -#import "FULightMakeupCell.h" - -static NSString * const kFULightMakeupCellIdentifierKey = @"FULightMakeupCell"; - -@interface FULightMakeupCollectionView() -@property(nonatomic,strong)NSArray *dataArray; - -@property(nonatomic,strong) UICollectionView *collection; - -@property (assign,nonatomic) id delegate; - -@property(nonatomic,strong) FUSlider *slider; - -@end -@implementation FULightMakeupCollectionView - -static NSString *makeupCellID = @"FUMakeupTopCell"; - --(instancetype)initWithFrame:(CGRect)frame dataArray:(NSArray *)dataArray delegate:(id)delegate{ - if (self = [super initWithFrame:frame]) { - _dataArray = dataArray; - _delegate = delegate; - - [self setupView]; - - for (FULightModel *modle0 in _dataArray) { - if (modle0.isSel) { - _currentLightModel = modle0; - [self.slider setValue:modle0.value]; - break; - } - } - - // 默认选中卸妆 - [self.collection selectItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - - } - return self; -} - - --(void)setupView{ -// self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(50, 60); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 20, [UIScreen mainScreen].bounds.size.width - 112, 20)]; - [_slider addTarget:self action:@selector(sliderChangeValue:) forControlEvents:UIControlEventValueChanged]; - _slider.bidirection = NO; - _slider.hidden = YES; - [self addSubview:_slider]; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_slider.frame), self.frame.size.width, 100) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - - /* 初始化collection */ - [_collection registerClass:[FULightMakeupCell class] forCellWithReuseIdentifier:kFULightMakeupCellIdentifierKey]; -} - - -#pragma mark - UICollectionViewDataSource, UICollectionViewDelegate - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.dataArray.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - FULightMakeupCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFULightMakeupCellIdentifierKey forIndexPath:indexPath]; - cell.fuImageView.image = [UIImage imageNamed:_dataArray[indexPath.row].imageStr]; - cell.fuTitleLabel.text = FUNSLocalizedString(_dataArray[indexPath.row].name, nil);; - return cell; -} - --(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - FULightModel *modle = _dataArray[indexPath.row]; - if(_currentLightModel == modle){ - return; - } - for (FULightModel *modle0 in _dataArray) { - modle0.isSel = NO; - } - modle.isSel = YES; - _currentLightModel = modle; - [self.slider setValue:modle.value]; - _slider.hidden = indexPath.row ? NO:YES; - - if (self.delegate && [self.delegate respondsToSelector:@selector(lightMakeupCollectionView:)]) { - [self.delegate lightMakeupCollectionView:_dataArray[indexPath.row]]; - } -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - - return CGSizeMake(54.0, 70.0) ; - -} - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(0, 12, 0, 17); -} - -#pragma mark - UI事件 - --(void)sliderChangeValue:(FUSlider *)slider{ - _currentLightModel.value = slider.value; - _currentLightModel.selectedFilterLevel = slider.value; - - if (self.delegate && [self.delegate respondsToSelector:@selector(lightMakeupModleValue:)]) { - [self.delegate lightMakeupModleValue:_currentLightModel]; - } -} - - -@end diff --git a/FULiveDemo/Modules/LightMakeup/ViewController/FULightMakeupViewController.h b/FULiveDemo/Modules/LightMakeup/ViewController/FULightMakeupViewController.h new file mode 100644 index 00000000..7b45d797 --- /dev/null +++ b/FULiveDemo/Modules/LightMakeup/ViewController/FULightMakeupViewController.h @@ -0,0 +1,18 @@ +// +// FULightMakeupViewController.h +// FULiveDemo +// +// Created by 孙慕 on 2019/10/17. +// Copyright © 2019 FaceUnity. All rights reserved. +// + +#import "FURenderViewController.h" +#import "FULightMakeupViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FULightMakeupViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/ViewController/FULightMakeupViewController.m b/FULiveDemo/Modules/LightMakeup/ViewController/FULightMakeupViewController.m new file mode 100644 index 00000000..b7812280 --- /dev/null +++ b/FULiveDemo/Modules/LightMakeup/ViewController/FULightMakeupViewController.m @@ -0,0 +1,112 @@ +// +// FULightMakeupViewController.m +// FULiveDemo +// +// Created by 孙慕 on 2019/10/17. +// Copyright © 2019 FaceUnity. All rights reserved. +// + +#import "FULightMakeupViewController.h" +#import "FULightMakeupCell.h" + +static NSString * const kFULightMakeupCellIdentifier = @"FULightMakeupCell"; + +@interface FULightMakeupViewController () + +@property (nonatomic, strong) UICollectionView *collectionView; +@property (nonatomic, strong) FUSlider *slider; + +@property (nonatomic, strong, readonly) FULightMakeupViewModel *viewModel; + +@end + +@implementation FULightMakeupViewController + +@dynamic viewModel; + +- (void)viewDidLoad { + [super viewDidLoad]; + + UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(134), CGRectGetWidth(self.view.bounds), FUHeightIncludeBottomSafeArea(134))]; + [self.view addSubview:bottomView]; + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = bottomView.bounds; + [bottomView addSubview:effectView]; + + [bottomView addSubview:self.slider]; + + [bottomView addSubview:self.collectionView]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.equalTo(bottomView); + make.top.equalTo(bottomView.mas_top).mas_offset(36); + make.height.mas_offset(98); + }]; + + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + self.slider.hidden = self.viewModel.selectedIndex == 0; + + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(134) + 10 animated:NO]; +} + +#pragma mark - Event response + +- (void)sliderValueChanged { + [self.viewModel setLightMakeupValue:self.slider.value]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.lightMakeups.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FULightMakeupCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFULightMakeupCellIdentifier forIndexPath:indexPath]; + FULightMakeupModel *lightMakeupModel = self.viewModel.lightMakeups[indexPath.item]; + cell.fuImageView.image = [UIImage imageNamed:lightMakeupModel.imageStr]; + cell.fuTitleLabel.text = FULocalizedString(lightMakeupModel.name); + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + self.slider.hidden = indexPath.item == 0; + if (!self.slider.hidden) { + self.slider.value = self.viewModel.lightMakeups[indexPath.item].value; + } + self.viewModel.selectedIndex = indexPath.item; +} + +#pragma mark - Getters + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(54, 70); + layout.minimumLineSpacing = 16; + layout.minimumInteritemSpacing = 50; + layout.sectionInset = UIEdgeInsetsMake(16, 18, 10, 18); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.translatesAutoresizingMaskIntoConstraints = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.showsHorizontalScrollIndicator = NO; + _collectionView.dataSource = self; + _collectionView.delegate = self; + [_collectionView registerClass:[FULightMakeupCell class] forCellWithReuseIdentifier:kFULightMakeupCellIdentifier]; + } + return _collectionView; +} + +- (FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectMake(56, 16, CGRectGetWidth(self.view.bounds) - 112, 30)]; + _slider.bidirection = NO; + [_slider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; + } + return _slider; +} + +@end diff --git a/FULiveDemo/Modules/LightMakeup/ViewModel/FULightMakeupViewModel.h b/FULiveDemo/Modules/LightMakeup/ViewModel/FULightMakeupViewModel.h new file mode 100644 index 00000000..e746e48a --- /dev/null +++ b/FULiveDemo/Modules/LightMakeup/ViewModel/FULightMakeupViewModel.h @@ -0,0 +1,23 @@ +// +// FULightMakeupViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FURenderViewModel.h" +#import "FULightMakeupModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FULightMakeupViewModel : FURenderViewModel + +@property (nonatomic, copy, readonly) NSArray *lightMakeups; +/// 选中轻美妆索引,默认为0 +@property (nonatomic, assign) NSInteger selectedIndex; + +- (void)setLightMakeupValue:(double)value; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/LightMakeup/ViewModel/FULightMakeupViewModel.m b/FULiveDemo/Modules/LightMakeup/ViewModel/FULightMakeupViewModel.m new file mode 100644 index 00000000..42c9b9a4 --- /dev/null +++ b/FULiveDemo/Modules/LightMakeup/ViewModel/FULightMakeupViewModel.m @@ -0,0 +1,166 @@ +// +// FULightMakeupViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FULightMakeupViewModel.h" + +@interface FULightMakeupViewModel () + +@property (nonatomic, copy) NSArray *lightMakeups; + +@end + +@implementation FULightMakeupViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + self.selectedIndex = 0; + } + return self; +} + +- (void)setLightMakeupValue:(double)value { + FULightMakeupModel *model = self.lightMakeups[self.selectedIndex]; + model.value = value; + for (FUSingleLightMakeupModel *singleModel in model.makeups) { + singleModel.realValue = singleModel.value * model.value; + [self setIntensity:singleModel.realValue type:singleModel.type]; + } + if ([FURenderKit shareRenderKit].beauty) { + [FURenderKit shareRenderKit].beauty.filterName = model.selectedFilter; + [FURenderKit shareRenderKit].beauty.filterLevel = model.selectedFilterLevel * model.value; + } +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex < 0 || selectedIndex >= self.lightMakeups.count) { + return; + } + _selectedIndex = selectedIndex; + FULightMakeupModel *model = self.lightMakeups[selectedIndex]; + if (selectedIndex == 0) { + // 取消选中 + [FURenderKit shareRenderKit].lightMakeup = nil; + } else { + if (![FURenderKit shareRenderKit].lightMakeup) { + // 初始化 + NSString *path = [[NSBundle mainBundle] pathForResource:@"light_makeup" ofType:@"bundle"]; + FULightMakeup *lightMakeup = [[FULightMakeup alloc] initWithPath:path name:@"light_makeup"]; + lightMakeup.isMakeupOn = YES; + lightMakeup.makeupLipMask = YES; + lightMakeup.intensityLip = 1.0; + [FURenderKit shareRenderKit].lightMakeup = lightMakeup; + } + // 遍历子妆容设置程度值、图片 + for (FUSingleLightMakeupModel *singleModel in model.makeups) { + singleModel.realValue = singleModel.value * model.value; + if (singleModel.type == FUSingleMakeupTypeLip) { + // 口红特殊处理 + [FURenderKit shareRenderKit].lightMakeup.lipType = singleModel.lipType; + [FURenderKit shareRenderKit].lightMakeup.isTwoColor = singleModel.isTwoColorLipstick; + NSArray *values = singleModel.colorsArray; + if (values.count > 3) { + FUColor color = FUColorMake([values[0] doubleValue], [values[1] doubleValue], [values[2] doubleValue], [values[3] doubleValue]);; + [FURenderKit shareRenderKit].lightMakeup.makeUpLipColor = color; + } + } + [self setIntensity:singleModel.realValue type:singleModel.type]; + [self setImage:singleModel.bundleName type:singleModel.type]; + } + } + // 美颜滤镜 + if ([FURenderKit shareRenderKit].beauty) { + [FURenderKit shareRenderKit].beauty.filterName = model.selectedFilter; + [FURenderKit shareRenderKit].beauty.filterLevel = model.selectedFilterLevel * model.value; + } +} + +/// 设置程度值 +- (void)setIntensity:(double)value type:(FUSingleMakeupType)type { + switch (type) { + case FUSingleMakeupTypeLip: + [FURenderKit shareRenderKit].lightMakeup.intensityLip = value; + break; + case FUSingleMakeupTypeBlusher: + [FURenderKit shareRenderKit].lightMakeup.intensityBlusher = value; + break; + case FUSingleMakeupTypeEyeshadow: + [FURenderKit shareRenderKit].lightMakeup.intensityEyeshadow = value; + break; + case FUSingleMakeupTypeEyeliner: + [FURenderKit shareRenderKit].lightMakeup.intensityEyeliner = value; + break; + case FUSingleMakeupTypeEyelash: + [FURenderKit shareRenderKit].lightMakeup.intensityEyelash = value; + break; + case FUSingleMakeupTypePupil: + [FURenderKit shareRenderKit].lightMakeup.intensityPupil = value; + break; + case FUSingleMakeupTypeEyebrow: + [FURenderKit shareRenderKit].lightMakeup.intensityEyebrow = value; + break; + default: + break; + } +} + +/// 设置图片 +- (void)setImage:(NSString *)imageName type:(FUSingleMakeupType)type { + if (!imageName) { + NSLog(@"%@:%s图片名称不正确",self.class,__func__); + return; + } + UIImage *image = [UIImage imageNamed:imageName]; + if (!image) { + return; + } + switch (type) { + case FUSingleMakeupTypeEyebrow: + [FURenderKit shareRenderKit].lightMakeup.subEyebrowImage = image; + break; + case FUSingleMakeupTypeEyeshadow: + [FURenderKit shareRenderKit].lightMakeup.subEyeshadowImage = image; + break; + case FUSingleMakeupTypePupil: + [FURenderKit shareRenderKit].lightMakeup.subPupilImage = image; + break; + case FUSingleMakeupTypeEyelash: + [FURenderKit shareRenderKit].lightMakeup.subEyelashImage = image; + break; + case FUSingleMakeupTypeHighlight: + [FURenderKit shareRenderKit].lightMakeup.subHightLightImage = image; + break; + case FUSingleMakeupTypeEyeliner: + [FURenderKit shareRenderKit].lightMakeup.subEyelinerImage = image; + break; + case FUSingleMakeupTypeBlusher: + [FURenderKit shareRenderKit].lightMakeup.subBlusherImage = image; + break; + default: + break; + } +} + +#pragma mark - Getters + +- (NSArray *)lightMakeups { + if (!_lightMakeups) { + NSString *lightMakeupPath = [[NSBundle mainBundle] pathForResource:@"light_makeup" ofType:@"json"]; + NSData *lightMakeupData = [[NSData alloc] initWithContentsOfFile:lightMakeupPath]; + NSArray *jsonArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:lightMakeupData options:NSJSONReadingMutableContainers error:nil]; + _lightMakeups = [FULightMakeupModel mj_objectArrayWithKeyValuesArray:jsonArray]; + } + return _lightMakeups; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleLightMakeup; +} + +@end diff --git a/FULiveDemo/Modules/Makeup/FUMakeUpDefine.h b/FULiveDemo/Modules/Makeup/FUMakeUpDefine.h deleted file mode 100644 index 4778b183..00000000 --- a/FULiveDemo/Modules/Makeup/FUMakeUpDefine.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FUMakeupDefine.h -// FULiveDemo -// -// Created by Chen on 2021/3/2. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#ifndef FUMakeupDefine_h -#define FUMakeupDefine_h - -/// 单个妆容类型 -typedef NS_ENUM(NSUInteger, FUSingleMakeupType) { - FUSingleMakeupTypeFoundation, // 粉底 - FUSingleMakeupTypeLip, // 口红 - FUSingleMakeupTypeBlusher, // 腮红 - FUSingleMakeupTypeEyebrow, // 眉毛 - FUSingleMakeupTypeEyeshadow, // 眼影 - FUSingleMakeupTypeEyeliner, // 眼线 - FUSingleMakeupTypeEyelash, // 睫毛 - FUSingleMakeupTypeHighlight, // 高光 - FUSingleMakeupTypeShadow, // 阴影 - FUSingleMakeupTypePupil // 美瞳 -}; - -#endif /* FUMakeupDefine_h */ diff --git a/FULiveDemo/Modules/Makeup/Manager/FUMakeupManager.h b/FULiveDemo/Modules/Makeup/Manager/FUMakeupManager.h deleted file mode 100644 index e7d3fa26..00000000 --- a/FULiveDemo/Modules/Makeup/Manager/FUMakeupManager.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// FUMakeupManager.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/15. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" - -@class FUCombinationMakeupModel, FUMakeupModel, FUSingleMakeupModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUMakeupManager : FUMetaManager - -/// 组合妆数据 -/// 注:此处把卸妆功能也组装成了一个组合妆模型 -@property (nonatomic, copy, readonly) NSArray *combinationMakeups; -/// 自定义妆容数据 -@property (nonatomic, copy, readonly) NSArray *makeups; -/// 当前选中的组合妆模型(nil表示当前未选择组合妆) -@property (nonatomic, strong, nullable) FUCombinationMakeupModel *currentCombinationMakeupModel; -/// 当前选择组合妆是否被自定义改变 -@property (nonatomic, assign, readonly, getter=isChangedMakeup) BOOL changedMakeup; - -/// 更新组合妆程度值 -/// @param model 组合妆模型 -- (void)updateIntensityOfCombinationMakeup:(FUCombinationMakeupModel *)model; - -/// 更新单个妆容程度值 -/// @param model 单个妆容模型 -- (void)updateIntensityOfSingleMakeup:(FUSingleMakeupModel *)model; - -/// 更新自定义单个妆容 -/// @param model 单个妆容模型 -- (void)updateCustomizedSingleMakeup:(FUSingleMakeupModel *)model; - -/// 更新自定义单个妆容颜色 -/// @param model 单个妆容模型 -- (void)updateColorOfCustomizedSingleMakeup:(FUSingleMakeupModel *)model; - -/// 对比当前选择的组合妆和自定义妆容数据 -- (void)compareCustomizedMakeupsWithCurrentCombinationMakeup; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/Manager/FUMakeupManager.m b/FULiveDemo/Modules/Makeup/Manager/FUMakeupManager.m deleted file mode 100644 index f6f47cdb..00000000 --- a/FULiveDemo/Modules/Makeup/Manager/FUMakeupManager.m +++ /dev/null @@ -1,561 +0,0 @@ -// -// FUMakeupManager.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/15. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMakeupManager.h" -#import "FULocalDataManager.h" - -#import "FUMakeupModel.h" -#import "FUCombinationMakeupModel.h" -#import "FUSingleMakeupModel.h" - -#import "FUMakeupDefine.h" - -@interface FUMakeupManager () - -@property (nonatomic, copy) NSArray *combinationMakeups; -@property (nonatomic, copy) NSArray *makeups; - -@property (nonatomic, strong) FUMakeup *makeup; - -@end - -@implementation FUMakeupManager - -#pragma mark - Instance methods - -- (void)setCurrentCombinationMakeupModel:(FUCombinationMakeupModel *)currentCombinationMakeupModel { - if (!currentCombinationMakeupModel) { - _currentCombinationMakeupModel = nil; - return; - } - if ([currentCombinationMakeupModel.name isEqualToString:@"卸妆"]) { - // 卸妆 - dispatch_async(self.loadQueue, ^{ - self.makeup = nil; - [FURenderKit shareRenderKit].makeup = nil; - _currentCombinationMakeupModel = currentCombinationMakeupModel; - }); - return; - } - // 注:嗲嗲兔、冻龄、国风、混血是8.0.0新加的四个组合妆,新组合妆只需要直接加载bundle,不需要绑定到face_makeup.bundle - if (currentCombinationMakeupModel.isCombined) { - // 新组合妆,每次加载必须重新初始化 - dispatch_async(self.loadQueue, ^{ - NSString *path = [[NSBundle mainBundle] pathForResource:currentCombinationMakeupModel.bundleName ofType:@"bundle"]; - self.makeup = [[FUMakeup alloc] initWithPath:path name:@"makeup"]; - [FURenderKit shareRenderKit].makeup = self.makeup; - [self updateIntensityOfCombinationMakeup:currentCombinationMakeupModel]; - _currentCombinationMakeupModel = currentCombinationMakeupModel; - }); - } else { - // 老组合妆 - dispatch_async(self.loadQueue, ^{ - if (!self.makeup || _currentCombinationMakeupModel.isCombined) { - // 当前未选择或者当前选择了新组合装,需要重新初始化 - NSString *path = [[NSBundle mainBundle] pathForResource:@"face_makeup" ofType:@"bundle"]; - self.makeup = [[FUMakeup alloc] initWithPath:path name:@"makeup"]; - } - [FURenderKit shareRenderKit].makeup = self.makeup; - // 绑定组合妆bundle到face_makeup.bundle - [self loadCombinationMakeupWithBundleName:currentCombinationMakeupModel.bundleName]; - // 更新程度值 - [self updateIntensityOfCombinationMakeup:currentCombinationMakeupModel]; - _currentCombinationMakeupModel = currentCombinationMakeupModel; - }); - } -} - -- (void)updateIntensityOfCombinationMakeup:(FUCombinationMakeupModel *)model { - if (model.isCombined) { - // 新组合妆直接设置 - self.makeup.intensity = model.value; - self.makeup.filterIntensity = model.value * model.selectedFilterLevel; - } else { - // 老组合妆需要遍历所有子妆 - for (FUSingleMakeupModel *singleMakeupModel in model.singleMakeupArray) { - // 计算子妆实际值 - singleMakeupModel.realValue = model.value * singleMakeupModel.value; - [self updateIntensityOfSingleMakeup:singleMakeupModel]; - } - } -} - -- (void)updateIntensityOfSingleMakeup:(FUSingleMakeupModel *)singleMakeupModel { - switch (singleMakeupModel.type) { - case FUSingleMakeupTypeFoundation:{ - self.makeup.intensityFoundation = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeLip:{ - self.makeup.lipType = singleMakeupModel.lipType; - self.makeup.isTwoColor = singleMakeupModel.isTwoColorLip; - self.makeup.intensityLip = singleMakeupModel.realValue; - if (singleMakeupModel.lipType == FUMakeupLipTypeMoisturizing) { - // 润泽Ⅱ口红时需要开启口红高光,高光暂时为固定值 - self.makeup.isLipHighlightOn = YES; - self.makeup.intensityLipHighlight = 0.8; - } else { - self.makeup.isLipHighlightOn = NO; - self.makeup.intensityLipHighlight = 0; - } - } - break; - case FUSingleMakeupTypeBlusher:{ - self.makeup.intensityBlusher = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeEyebrow:{ - self.makeup.intensityEyebrow = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeEyeshadow:{ - self.makeup.intensityEyeshadow = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeEyeliner:{ - self.makeup.intensityEyeliner = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeEyelash:{ - self.makeup.intensityEyelash = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeHighlight:{ - self.makeup.intensityHighlight = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypeShadow:{ - self.makeup.intensityShadow = singleMakeupModel.realValue; - } - break; - case FUSingleMakeupTypePupil:{ - self.makeup.intensityPupil = singleMakeupModel.realValue; - } - break; - } -} - -- (void)updateCustomizedSingleMakeup:(FUSingleMakeupModel *)model { - if (!model.bundleName) { - return; - } - if (!self.makeup) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"face_makeup" ofType:@"bundle"]; - self.makeup = [[FUMakeup alloc] initWithPath:path name:@"makeup"]; - [FURenderKit shareRenderKit].makeup = self.makeup; - } - NSString *path = [[NSBundle mainBundle] pathForResource:model.bundleName ofType:@"bundle"]; - FUItem *item = [[FUItem alloc] initWithPath:path name:model.bundleName]; - switch (model.type) { - case FUSingleMakeupTypeFoundation:{ - self.makeup.subFoundation = item; - } - break; - case FUSingleMakeupTypeLip:{ - self.makeup.subLip = item; - } - break; - case FUSingleMakeupTypeBlusher:{ - self.makeup.subBlusher = item; - } - break; - case FUSingleMakeupTypeEyebrow:{ - self.makeup.subEyebrow = item; - } - break; - case FUSingleMakeupTypeEyeshadow:{ - self.makeup.subEyeshadow = item; - } - break; - case FUSingleMakeupTypeEyeliner:{ - self.makeup.subEyeliner = item; - } - break; - case FUSingleMakeupTypeEyelash:{ - self.makeup.subEyelash = item; - } - break; - case FUSingleMakeupTypeHighlight:{ - self.makeup.subHighlight = item; - } - break; - case FUSingleMakeupTypeShadow:{ - self.makeup.subShadow = item; - } - break; - case FUSingleMakeupTypePupil:{ - self.makeup.subPupil = item; - } - break; - } -} - -- (void)updateColorOfCustomizedSingleMakeup:(FUSingleMakeupModel *)model { - NSArray *colorValues = model.colors[model.defaultColorIndex]; - FUColor color = FUColorMake([colorValues[0] doubleValue], [colorValues[1] doubleValue], [colorValues[2] doubleValue], [colorValues[3] doubleValue]); - switch (model.type) { - case FUSingleMakeupTypeFoundation:{ - self.makeup.foundationColor = color; - } - break; - case FUSingleMakeupTypeLip:{ - self.makeup.lipColor = color; - } - break; - case FUSingleMakeupTypeBlusher:{ - self.makeup.blusherColor = color; - } - break; - case FUSingleMakeupTypeEyebrow:{ - self.makeup.eyebrowColor = color; - } - break; - case FUSingleMakeupTypeEyeshadow:{ - NSArray *values0 = [model.colors[model.defaultColorIndex] subarrayWithRange:NSMakeRange(0, 4)]; - NSArray *values2 = [model.colors[model.defaultColorIndex] subarrayWithRange:NSMakeRange(4, 4)]; - NSArray *values3 = [model.colors[model.defaultColorIndex] subarrayWithRange:NSMakeRange(8, 4)]; - [self.makeup setEyeColor:FUColorMake([values0[0] doubleValue], [values0[1] doubleValue], [values0[2] doubleValue], [values0[3] doubleValue]) - color1:FUColorMake(0, 0, 0, 0) - color2:FUColorMake([values2[0] doubleValue], [values2[1] doubleValue], [values2[2] doubleValue], [values2[3] doubleValue]) - color3:FUColorMake([values3[0] doubleValue], [values3[1] doubleValue], [values3[2] doubleValue], [values3[3] doubleValue])]; - } - break; - case FUSingleMakeupTypeEyeliner:{ - self.makeup.eyelinerColor = color; - } - break; - case FUSingleMakeupTypeEyelash:{ - self.makeup.eyelashColor = color; - } - break; - case FUSingleMakeupTypeHighlight:{ - self.makeup.highlightColor = color; - } - break; - case FUSingleMakeupTypeShadow:{ - self.makeup.shadowColor = color; - } - break; - case FUSingleMakeupTypePupil:{ - self.makeup.pupilColor = color; - } - break; - } -} - -- (void)compareCustomizedMakeupsWithCurrentCombinationMakeup { - if (!self.currentCombinationMakeupModel) { - return; - } - for (FUMakeupModel *makeupModel in self.makeups) { - // 清除自定义妆容选择 - makeupModel.selectedIndex = 0; - } - if (![self.currentCombinationMakeupModel.name isEqualToString:@"卸妆"]) { - // 选择组合妆进入自定义,需要对比各个妆容 - for (FUSingleMakeupType type = FUSingleMakeupTypeFoundation; type <= FUSingleMakeupTypePupil; type++) { - // 组合妆的单个妆容 - FUSingleMakeupModel *combinationSingleMakeup = self.currentCombinationMakeupModel.singleMakeupArray[type]; - // 自定义可选单个妆容数组 - NSArray *customizedSingleMakeups = self.makeups[type].singleMakeups; - switch (type) { - case FUSingleMakeupTypeFoundation:{ - // 粉底的类型和颜色都用颜色确定,粉底颜色索引和类型索引一致,json文件已经写死 - for (NSInteger tempIndex = 0; tempIndex < customizedSingleMakeups.count; tempIndex++) { - FUSingleMakeupModel *singleMakeup = customizedSingleMakeups[tempIndex]; - NSInteger index = [self indexOfColor:combinationSingleMakeup.colorsArray inArray:singleMakeup.colors]; - if (index >= 0) { - self.makeups[type].selectedIndex = index + 1; - FUSingleMakeupModel *needChangeModel = customizedSingleMakeups[index + 1]; - needChangeModel.value = combinationSingleMakeup.value * self.currentCombinationMakeupModel.value; - break; - } - } - } - break; - case FUSingleMakeupTypeLip:{ - for (NSInteger tempIndex = 0; tempIndex < customizedSingleMakeups.count; tempIndex++) { - FUSingleMakeupModel *singleMakeup = customizedSingleMakeups[tempIndex]; - if (singleMakeup.title && singleMakeup.isTwoColorLip == combinationSingleMakeup.isTwoColorLip && singleMakeup.lipType == combinationSingleMakeup.lipType) { - // 确定选中的口红类型 - self.makeups[type].selectedIndex = tempIndex; - singleMakeup.value = combinationSingleMakeup.value * self.currentCombinationMakeupModel.value; - // 确定选中的口红颜色 - NSInteger index = [self indexOfColor:combinationSingleMakeup.colorsArray inArray:singleMakeup.colors]; - if (index >= 0) { - singleMakeup.defaultColorIndex = index; - } else { - singleMakeup.defaultColorIndex = 0; - } - break; - } - } - } - break; - case FUSingleMakeupTypeEyebrow:{ - for (NSInteger tempIndex = 0; tempIndex < customizedSingleMakeups.count; tempIndex++) { - FUSingleMakeupModel *singleMakeup = customizedSingleMakeups[tempIndex]; - if (singleMakeup.title && singleMakeup.browWarpType == combinationSingleMakeup.browWarpType && singleMakeup.isBrowWarp == combinationSingleMakeup.isBrowWarp) { - // 确定选中的眉毛类型 - self.makeups[type].selectedIndex = tempIndex; - singleMakeup.value = combinationSingleMakeup.value * self.currentCombinationMakeupModel.value; - // 确定选中的眉毛颜色索引 - NSInteger index = [self indexOfColor:combinationSingleMakeup.colorsArray inArray:singleMakeup.colors]; - if (index >= 0) { - singleMakeup.defaultColorIndex = index; - } else { - singleMakeup.defaultColorIndex = 0; - } - break; - } - } - } - break; - default:{ - // 注:组合妆json文件中眼影存在bundle名不对应的问题,修改了允许自定义的五个组合妆json文件,增加了"tex_eye_bundle",原"tex_eye"保持不变,所以其他妆容都可以使用bundle名确定选中类型 - for (NSInteger tempIndex = 0; tempIndex < customizedSingleMakeups.count; tempIndex++) { - FUSingleMakeupModel *singleMakeup = customizedSingleMakeups[tempIndex]; - if (!combinationSingleMakeup.bundleName || !singleMakeup.bundleName) { - continue; - } - if ([combinationSingleMakeup.bundleName containsString:singleMakeup.bundleName]) { - // 使用bundle名确定选中类型 - self.makeups[type].selectedIndex = tempIndex; - singleMakeup.value = combinationSingleMakeup.value * self.currentCombinationMakeupModel.value; - // 确定选中的妆容颜色索引 - NSInteger index = [self indexOfColor:combinationSingleMakeup.colorsArray inArray:singleMakeup.colors]; - if (index >= 0) { - singleMakeup.defaultColorIndex = index; - } else { - singleMakeup.defaultColorIndex = 0; - } - break; - } - - } - } - break; - } - } - } -} - -#pragma mark - Private methods - -/// 更新组合妆(老组合妆方法) -/// @param bundleName bundle名称 -- (void)loadCombinationMakeupWithBundleName:(NSString *)bundleName { - NSString *path = [[NSBundle mainBundle] pathForResource:bundleName ofType:@"bundle"]; - FUItem *item = [[FUItem alloc] initWithPath:path name:bundleName]; - [self.makeup updateMakeupPackage:item needCleanSubItem:YES]; -} - -/// 获取颜色值在可选颜色数组中的索引 -- (NSInteger)indexOfColor:(NSArray *)color inArray:(NSArray *)colors { - if (!color || color.count == 0 || !colors || colors.count == 0) { - return -1; - } - NSInteger resultIndex = -1; - for (NSInteger i = 0; i < colors.count; i++) { - NSArray *tempArray = colors[i]; - if ([self color:tempArray isEqualToColor:color]) { - resultIndex = i; - break; - } - } - return resultIndex; -} - -/// 对比两个颜色值是否一样 -- (BOOL)color:(NSArray *)color isEqualToColor:(NSArray *)otherColor { - NSInteger count = MIN(color.count, otherColor.count); - for (NSInteger index = 0; index < count; index ++) { - if (fabsf([color[index] floatValue] - [otherColor[index] floatValue]) > 0.01 ) { - // 色值不同 - return NO; - } - } - return YES; -} - -#pragma mark - Getters - -/// 组合妆数组(包含子妆数据) -- (NSArray *)combinationMakeups { - if (!_combinationMakeups) { - NSDictionary *combinationMakeupParams = [[FULocalDataManager makeupWholeJsonData] copy]; - _combinationMakeups = [FUCombinationMakeupModel mj_objectArrayWithKeyValuesArray:combinationMakeupParams[@"data"]]; - for (FUCombinationMakeupModel *model in _combinationMakeups) { - @autoreleasepool { - // 对应组合妆json文件 - NSString *path = [[NSBundle mainBundle] pathForResource:model.bundleName ofType:@"json"]; - NSData *data = [[NSData alloc] initWithContentsOfFile:path]; - NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; - // 初始化子妆容数组(保存不同子妆容模型) - NSMutableArray *singleMakeups = [[NSMutableArray alloc] init]; - for (FUSingleMakeupType type = FUSingleMakeupTypeFoundation; type <= FUSingleMakeupTypePupil; type ++) { - FUSingleMakeupModel *singleMakeupModel = [[FUSingleMakeupModel alloc] init]; - singleMakeupModel.type = type; - switch (type) { - case FUSingleMakeupTypeFoundation:{ - singleMakeupModel.bundleName = dic[@"tex_foundation"]; - singleMakeupModel.value = [dic[@"makeup_intensity_foundation"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_foundation_color"]; - } - break; - case FUSingleMakeupTypeLip:{ - singleMakeupModel.value = [dic[@"makeup_intensity_lip"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_lip_color"]; - singleMakeupModel.isTwoColorLip = [dic[@"is_two_color"] boolValue]; - singleMakeupModel.lipType = [dic[@"lip_type"] integerValue]; - } - break; - case FUSingleMakeupTypeBlusher:{ - singleMakeupModel.bundleName = dic[@"tex_blusher"]; - singleMakeupModel.value = [dic[@"makeup_intensity_blusher"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_blusher_color"]; - } - break; - case FUSingleMakeupTypeEyebrow:{ - singleMakeupModel.bundleName = dic[@"tex_brow"]; - singleMakeupModel.isBrowWarp = [dic[@"brow_warp"] boolValue]; - singleMakeupModel.browWarpType = [dic[@"brow_warp_type"] integerValue]; - singleMakeupModel.value = [dic[@"makeup_intensity_eyeBrow"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_eyeBrow_color"]; - } - break; - case FUSingleMakeupTypeEyeshadow:{ - // 允许自定义组合妆json文件新加了key:tex_eye_bundle,为了准确判断眼影类型 - singleMakeupModel.bundleName = dic[@"tex_eye_bundle"] ?: dic[@"tex_eye"]; - singleMakeupModel.value = [dic[@"makeup_intensity_eye"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_eye_color"]; - } - break; - case FUSingleMakeupTypeEyeliner:{ - singleMakeupModel.bundleName = dic[@"tex_eyeLiner"]; - singleMakeupModel.value = [dic[@"makeup_intensity_eyeLiner"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_eyeLiner_color"]; - } - break; - case FUSingleMakeupTypeEyelash:{ - singleMakeupModel.bundleName = dic[@"tex_eyeLash"]; - singleMakeupModel.value = [dic[@"makeup_intensity_eyelash"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_eyelash_color"]; - } - break; - case FUSingleMakeupTypeHighlight:{ - singleMakeupModel.bundleName = dic[@"tex_highlight"]; - singleMakeupModel.value = [dic[@"makeup_intensity_highlight"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_highlight_color"]; - } - break; - case FUSingleMakeupTypeShadow:{ - singleMakeupModel.bundleName = dic[@"tex_shadow"]; - singleMakeupModel.value = [dic[@"makeup_intensity_shadow"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_shadow_color"]; - } - break; - case FUSingleMakeupTypePupil:{ - singleMakeupModel.bundleName = dic[@"tex_pupil"]; - singleMakeupModel.value = [dic[@"makeup_intensity_pupil"] floatValue]; - singleMakeupModel.colorsArray = dic[@"makeup_pupil_color"]; - } - break; - } - [singleMakeups addObject:singleMakeupModel]; - } - model.singleMakeupArray = [singleMakeups copy]; - } - - } - } - return _combinationMakeups; -} - -- (NSArray *)makeups { - if (!_makeups) { - NSDictionary *makeupParams = [NSDictionary dictionaryWithDictionary:[FULocalDataManager makeupJsonData]]; - _makeups = [FUMakeupModel mj_objectArrayWithKeyValuesArray:makeupParams[@"data"]]; - } - return _makeups; -} - -- (BOOL)isChangedMakeup { - if (!self.currentCombinationMakeupModel || [self.currentCombinationMakeupModel.name isEqualToString:@"卸妆"]) { - // 只需要判断自定义妆容是否有值 - for (FUMakeupModel *model in self.makeups) { - if (model.selectedIndex > 0 && model.singleMakeups[model.selectedIndex].value > 0) { - return YES; - } - } - return NO; - } else { - // 对比各个妆容 - for (FUSingleMakeupType type = FUSingleMakeupTypeFoundation; type <= FUSingleMakeupTypePupil; type++) { - FUSingleMakeupModel *combinationSingleMakeup = self.currentCombinationMakeupModel.singleMakeupArray[type]; - NSArray *customizedSingleMakeups = self.makeups[type].singleMakeups; - FUSingleMakeupModel *selectedSingleMakeup = customizedSingleMakeups[self.makeups[type].selectedIndex]; - BOOL isSameColor = YES; - if (selectedSingleMakeup.colors.count > 0 && combinationSingleMakeup.colorsArray) { - isSameColor = [self color:selectedSingleMakeup.colors[selectedSingleMakeup.defaultColorIndex] isEqualToColor:combinationSingleMakeup.colorsArray]; - } - BOOL isSameIntensity = fabs(selectedSingleMakeup.value - self.currentCombinationMakeupModel.value * combinationSingleMakeup.value) <= 0.01; - switch (type) { - case FUSingleMakeupTypeFoundation:{ - // 粉底只需要对比颜色和程度值 - if (!isSameColor || !isSameIntensity) { - return YES; - } - } - break; - case FUSingleMakeupTypeLip:{ - // 对比口红类型、颜色、程度值 - if (selectedSingleMakeup.lipType != combinationSingleMakeup.lipType || !isSameColor || !isSameIntensity) { - return YES; - } - } - break; - case FUSingleMakeupTypeEyebrow:{ - // 对比眉毛类型、颜色、程度值 - if (selectedSingleMakeup.browWarpType != combinationSingleMakeup.browWarpType || !isSameColor || !isSameIntensity) { - return YES; - } - } - break; - default: { - // 其他妆容对比bundle名、颜色索引和程度值 - // 注:存在组合妆的子妆颜色不存在于可选颜色数组中的情况,所以这里对比颜色索引,取不到索引默认为0 - if (!combinationSingleMakeup.bundleName && !selectedSingleMakeup.bundleName) { - continue; - } - if (combinationSingleMakeup.bundleName && !selectedSingleMakeup.bundleName) { - return YES; - } - if (!combinationSingleMakeup.bundleName && selectedSingleMakeup.bundleName) { - return YES; - } - if (![combinationSingleMakeup.bundleName containsString:selectedSingleMakeup.bundleName]) { - return YES; - } - NSInteger colorIndex = [self indexOfColor:combinationSingleMakeup.colorsArray inArray:selectedSingleMakeup.colors]; - if (colorIndex == -1) { - colorIndex = 0; - } - if (colorIndex != selectedSingleMakeup.defaultColorIndex || !isSameIntensity) { - return YES; - } - } - break; - } - } - } - - return NO; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/Model/FUCombinationMakeupModel.h b/FULiveDemo/Modules/Makeup/Model/FUCombinationMakeupModel.h deleted file mode 100644 index 219615f6..00000000 --- a/FULiveDemo/Modules/Makeup/Model/FUCombinationMakeupModel.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// FUCombinationMakeupModel.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/11. -// Copyright © 2021 FaceUnity. All rights reserved. -// -// 组合妆模型 - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUCombinationMakeupModel : NSObject - -/// 名称 -@property (nonatomic, copy) NSString *name; -/// icon -@property (nonatomic, copy) NSString *icon; -/// 当前程度值 -@property (nonatomic, assign) double value; -/// 滤镜名称(v8.0.0之后不需要) -@property (nonatomic, copy) NSString *selectedFilter; -/// 滤镜程度 -@property (nonatomic, assign) double selectedFilterLevel; -/// bundle名称 -@property (nonatomic, copy) NSString *bundleName; -/// 是否允许自定义 -@property (nonatomic, assign) BOOL isAllowedEdit; -/// 是否v8.0.0之后新组合妆(只用一个bundle) -@property (nonatomic, assign) BOOL isCombined; -/// 子妆容数组 -@property (nonatomic, copy) NSArray *singleMakeupArray; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/Model/FUCombinationMakeupModel.m b/FULiveDemo/Modules/Makeup/Model/FUCombinationMakeupModel.m deleted file mode 100644 index a5e40c64..00000000 --- a/FULiveDemo/Modules/Makeup/Model/FUCombinationMakeupModel.m +++ /dev/null @@ -1,20 +0,0 @@ -// -// FUCombinationMakeupModel.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/11. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUCombinationMakeupModel.h" - -@implementation FUCombinationMakeupModel - -+ (NSDictionary *)mj_replacedKeyFromPropertyName { - return @{ - @"icon" : @"imageStr", - @"bundleName" : @"makeupBundle" - }; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/Model/FUMakeupModel.h b/FULiveDemo/Modules/Makeup/Model/FUMakeupModel.h deleted file mode 100644 index ecb747d3..00000000 --- a/FULiveDemo/Modules/Makeup/Model/FUMakeupModel.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FUMakeupModel.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/22. -// Copyright © 2021 FaceUnity. All rights reserved. -// -// 单个妆容类型模型,对应自定义妆容任一一项 - -#import - -@class FUSingleMakeupModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUMakeupModel : NSObject - -@property (nonatomic, copy) NSString *name; -/// 妆容可选类型数组(如口红包括:雾面、润泽、珠光等) -@property (nonatomic, copy) NSArray *singleMakeups; -/// 当前类型选中的索引 -@property (nonatomic, assign) NSInteger selectedIndex; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/Model/FUMakeupModel.m b/FULiveDemo/Modules/Makeup/Model/FUMakeupModel.m deleted file mode 100644 index 32160ab7..00000000 --- a/FULiveDemo/Modules/Makeup/Model/FUMakeupModel.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// FUMakeupModel.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/22. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMakeupModel.h" - -@implementation FUMakeupModel - -+ (NSDictionary *)mj_replacedKeyFromPropertyName { - return @{ - @"singleMakeups" : @"sgArr" - }; -} - -+ (NSDictionary *)mj_objectClassInArray { - return @{ - @"singleMakeups" : @"FUSingleMakeupModel" - }; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/Model/FUSingleMakeupModel.h b/FULiveDemo/Modules/Makeup/Model/FUSingleMakeupModel.h deleted file mode 100644 index d7b8b63a..00000000 --- a/FULiveDemo/Modules/Makeup/Model/FUSingleMakeupModel.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// FUSingleMakeupModel.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// -// 子妆模型 - -#import -#import "FUMakeupDefine.h" -#import "FUSingleMakeupProtocol.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUSingleMakeupModel : NSObject - -/// icon -@property (nonatomic, copy) NSString *icon; -/// 标题 -@property (nonatomic, copy) NSString *title; -/// 是否使用眉毛变形 -@property (nonatomic, assign) BOOL isBrowWarp; -/// 眉毛类型(0柳叶眉 1上挑眉 2一字眉 3英气眉 4远山眉 5标准眉 6扶形眉 7剑眉 8日常风 9日系风) -@property (nonatomic, assign) NSInteger browWarpType; -/// 子妆可选颜色数组 -@property (nonatomic, copy) NSArray *colors; -/// 默认选择颜色索引 -@property (nonatomic, assign) NSInteger defaultColorIndex; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/Model/FUSingleMakeupModel.m b/FULiveDemo/Modules/Makeup/Model/FUSingleMakeupModel.m deleted file mode 100644 index 9cfbf080..00000000 --- a/FULiveDemo/Modules/Makeup/Model/FUSingleMakeupModel.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// FUSingleMakeupModel.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUSingleMakeupModel.h" - -@implementation FUSingleMakeupModel - -@synthesize bundleName, value, realValue, colorsArray, isTwoColorLip, lipType; - -+ (NSDictionary *)mj_replacedKeyFromPropertyName { - return @{ - @"type" : @"makeType", - @"bundleName" : @"namaBundle", - @"icon" : @"iconStr", - @"colorsArray" : @"colorStrV", - @"lipType" : @"lip_type", - @"isTwoColorLip" : @"is_two_color", - @"isBrowWarp" : @"brow_warp", - @"browWarpType" : @"brow_warp_type" - }; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/VC/FUMakeupRenderMediaViewController.h b/FULiveDemo/Modules/Makeup/VC/FUMakeupRenderMediaViewController.h deleted file mode 100644 index a6c87f61..00000000 --- a/FULiveDemo/Modules/Makeup/VC/FUMakeupRenderMediaViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUMakeupRenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2022/6/14. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUMakeupRenderMediaViewController : FURenderMediaViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/VC/FUMakeupRenderMediaViewController.m b/FULiveDemo/Modules/Makeup/VC/FUMakeupRenderMediaViewController.m deleted file mode 100644 index 3edc05df..00000000 --- a/FULiveDemo/Modules/Makeup/VC/FUMakeupRenderMediaViewController.m +++ /dev/null @@ -1,248 +0,0 @@ -// -// FUMakeupRenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2022/6/14. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FUMakeupRenderMediaViewController.h" - -#import "FUCombinationMakeupView.h" -#import "FUCustomizedMakeupView.h" -#import "FUColourView.h" - -#import "FUMakeupManager.h" - -#import "FUCombinationMakeupModel.h" -#import "FUMakeupModel.h" -#import "FUSingleMakeupModel.h" - -@interface FUMakeupRenderMediaViewController () - -/// 组合妆选择视图 -@property (nonatomic, strong) FUCombinationMakeupView *combinationMakeupView; -/// 自定义子妆视图 -@property (nonatomic, strong) FUCustomizedMakeupView *customizedMakeupView; -/// 子妆颜色选择视图 -@property (nonatomic, strong) FUColourView *colorSelectView; - -@property (nonatomic, strong) FUMakeupManager *makeupManager; - -@end - -@implementation FUMakeupRenderMediaViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self configureMakeupUI]; -} - -#pragma mark - UI - -- (void)configureMakeupUI { - - [self.view addSubview:self.combinationMakeupView]; - [self.combinationMakeupView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.height.mas_offset(FUHeightIncludeBottomSafeArea(144)); - }]; - - [self.view addSubview:self.customizedMakeupView]; - [self.customizedMakeupView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.height.mas_offset(FUHeightIncludeBottomSafeArea(190)); - }]; - - // 自定义美妆视图默认隐藏 - self.customizedMakeupView.transform = CGAffineTransformMakeTranslation(0, FUHeightIncludeBottomSafeArea(190)); - self.customizedMakeupView.hidden = YES; - - [self.view addSubview:self.colorSelectView]; - [self.colorSelectView mas_makeConstraints:^(MASConstraintMaker *make) { - make.trailing.equalTo(self.view.mas_trailing).mas_offset(-15); - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-192); - } else { - make.bottom.equalTo(self.view.mas_bottom).mas_offset(-192); - } - make.size.mas_offset(CGSizeMake(60, 250)); - }]; - - [self refreshDownloadButtonTransformWithHeight:120 show:YES]; -} - -#pragma mark - Private methods - -/// 更新美颜滤镜 -- (void)updateBeautyFilter:(FUCombinationMakeupModel *)model { - if (!model.selectedFilter || [model.selectedFilter isEqualToString:@""]) { - // 没有滤镜则使用默认滤镜"origin" - self.baseManager.beauty.filterName = @"origin"; - self.baseManager.beauty.filterLevel = model.value; - } else { - self.baseManager.beauty.filterName = [model.selectedFilter lowercaseString]; - self.baseManager.beauty.filterLevel = model.value; - } -} - -- (void)refreshColorViewWithIndex:(NSInteger)index { - if (index < 0 || index >= self.makeupManager.makeups.count) { - return; - } - FUMakeupModel *model = self.makeupManager.makeups[index]; - FUSingleMakeupModel *singleModel = model.singleMakeups[model.selectedIndex]; - if (singleModel.type == FUSingleMakeupTypeFoundation || singleModel.colors.count == 0) { - self.colorSelectView.hidden = YES; - } else { - self.colorSelectView.hidden = NO; - [self.colorSelectView setDataColors:singleModel.colors]; - [self.colorSelectView setSelCell:(int)singleModel.defaultColorIndex]; - } -} - -#pragma mark - FUCombinationMakeupViewDelegate - -- (void)combinationMakeupView:(FUCombinationMakeupView *)view didSelectCombinationMakeup:(FUCombinationMakeupModel *)model { - if (!model.isCombined) { - // 老组合妆需要更新美颜滤镜,滤镜值设置给Beauty - [self updateBeautyFilter:model]; - } else { - // 新组合妆,更新滤镜,滤镜值设置给Makeup - if (!model.selectedFilter || [model.selectedFilter isEqualToString:@""]) { - self.baseManager.beauty.filterName = @"origin"; - } else { - self.baseManager.beauty.filterName = [model.selectedFilter lowercaseString]; - } - } - self.makeupManager.currentCombinationMakeupModel = model; -} - -- (void)combinationMakeupView:(FUCombinationMakeupView *)view didChangeCombinationMakeupValue:(FUCombinationMakeupModel *)model { - [self.makeupManager updateIntensityOfCombinationMakeup:model]; - if (!model.isCombined) { - // 老组合妆需要更新美颜滤镜 - [self updateBeautyFilter:model]; - } -} - -- (void)combinationMakeupViewDidClickCustomize { - // 对比更新自定义妆容数据 - [self.makeupManager compareCustomizedMakeupsWithCurrentCombinationMakeup]; - [self.customizedMakeupView reloadData:self.makeupManager.makeups]; - // 每次进入自定义页面默认从头开始自定义 - [self.customizedMakeupView selectMakeupAtIndex:0]; - // 刷新颜色选择控件 - [self refreshColorViewWithIndex:0]; - // UI - [self.combinationMakeupView dismiss]; - [self.customizedMakeupView show]; - - [self refreshDownloadButtonTransformWithHeight:170 show:YES]; -} - -#pragma mark - FUCustomizedMakeupViewDelegate - -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didChangeMakeupCategoryWithSingleMakeup:(FUSingleMakeupModel *)model { - if (model.colors.count > model.defaultColorIndex) { - // 更新颜色值 - [self.makeupManager updateColorOfCustomizedSingleMakeup:model]; - // 刷新颜色选择控件 - [self refreshColorViewWithIndex:model.type]; - } else { - self.colorSelectView.hidden = YES; - } -} - -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didSelectedSingleMakeup:(FUSingleMakeupModel *)model { - model.realValue = model.value; - // 更新子妆bundle - [self.makeupManager updateCustomizedSingleMakeup:model]; - // 更新程度值 - [self.makeupManager updateIntensityOfSingleMakeup:model]; - if (model.colors.count > model.defaultColorIndex) { - // 更新颜色值 - [self.makeupManager updateColorOfCustomizedSingleMakeup:model]; - // 刷新颜色选择控件 - [self refreshColorViewWithIndex:model.type]; - } else { - self.colorSelectView.hidden = YES; - } - // 单个妆容标题提示 -// if (model.title) { -// self.tipLabel.hidden = NO; -// self.tipLabel.text = FUNSLocalizedString(model.title, nil); -// [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; -// } -} - -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didChangeSingleMakeupValue:(FUSingleMakeupModel *)model { - model.realValue = model.value; - [self.makeupManager updateIntensityOfSingleMakeup:model]; -} - -- (void)customizedMakeupViewDidClickBack { - // 根据自定义后妆容是否有变化决定是否选中组合妆 - if (self.makeupManager.isChangedMakeup) { - [self.combinationMakeupView deselectCurrentCombinationMakeup]; - self.makeupManager.currentCombinationMakeupModel = nil; - } - // UI - if (!self.colorSelectView.hidden) { - self.colorSelectView.hidden = YES; - } - [self.customizedMakeupView dismiss]; - [self.combinationMakeupView show]; - [self refreshDownloadButtonTransformWithHeight:120 show:YES]; -} - -#pragma mark - FUColourViewDelegate - -- (void)colourViewDidSelIndex:(int)index { - FUMakeupModel *makeupModel = self.makeupManager.makeups[self.customizedMakeupView.selectedCategoryIndex]; - FUSingleMakeupModel *singleMakeupModel = makeupModel.singleMakeups[makeupModel.selectedIndex]; - singleMakeupModel.defaultColorIndex = index; - [self.makeupManager updateColorOfCustomizedSingleMakeup:singleMakeupModel]; -} - - -#pragma mark - Getters - -- (FUCombinationMakeupView *)combinationMakeupView { - if (!_combinationMakeupView) { - _combinationMakeupView = [[FUCombinationMakeupView alloc] initWithFrame:CGRectZero]; - [_combinationMakeupView reloadData:self.makeupManager.combinationMakeups]; - _combinationMakeupView.delegate = self; - // 默认选中 - [_combinationMakeupView selectCombinationMakeupAtIndex:1]; - } - return _combinationMakeupView; -} - -- (FUCustomizedMakeupView *)customizedMakeupView { - if (!_customizedMakeupView) { - _customizedMakeupView = [[FUCustomizedMakeupView alloc] initWithFrame:CGRectZero]; - _customizedMakeupView.delegate = self; - } - return _customizedMakeupView; -} - -- (FUColourView *)colorSelectView { - if (!_colorSelectView) { - _colorSelectView = [[FUColourView alloc] initWithFrame:CGRectMake(0, 0, 60, 250)]; - _colorSelectView.delegate = self; - _colorSelectView.hidden = YES; - } - return _colorSelectView; -} - -- (FUMakeupManager *)makeupManager { - if (!_makeupManager) { - _makeupManager = [[FUMakeupManager alloc] init]; - } - return _makeupManager; -} - - -@end diff --git a/FULiveDemo/Modules/Makeup/VC/FUMakeupViewController.h b/FULiveDemo/Modules/Makeup/VC/FUMakeupViewController.h deleted file mode 100644 index dec4a9e5..00000000 --- a/FULiveDemo/Modules/Makeup/VC/FUMakeupViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUMakeupViewController.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUMakeupViewController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/VC/FUMakeupViewController.m b/FULiveDemo/Modules/Makeup/VC/FUMakeupViewController.m deleted file mode 100644 index 76901c91..00000000 --- a/FULiveDemo/Modules/Makeup/VC/FUMakeupViewController.m +++ /dev/null @@ -1,276 +0,0 @@ -// -// FUMakeupViewController.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMakeupViewController.h" - -#import "FUCombinationMakeupView.h" -#import "FUCustomizedMakeupView.h" -#import "FUColourView.h" - -#import "FUMakeupManager.h" - -#import "FUCombinationMakeupModel.h" -#import "FUMakeupModel.h" -#import "FUSingleMakeupModel.h" - -@interface FUMakeupViewController () - -/// 组合妆选择视图 -@property (nonatomic, strong) FUCombinationMakeupView *combinationMakeupView; -/// 自定义子妆视图 -@property (nonatomic, strong) FUCustomizedMakeupView *customizedMakeupView; -/// 子妆颜色选择视图 -@property (nonatomic, strong) FUColourView *colorSelectView; - -@property (nonatomic, strong) FUMakeupManager *makeupManager; - -@end - -@implementation FUMakeupViewController - -#pragma mark - Life cycle - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self configureUI]; -} - --(void)viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - - // 添加点位测试开关 - if (FUShowLandmark) { - [FULandmarkManager show]; - } - -} --(void)viewWillDisappear:(BOOL)animated{ - [super viewWillDisappear:animated]; - - // 移除点位测试开关 - if (FUShowLandmark) { - [FULandmarkManager dismiss]; - } -} - -#pragma mark - UI - -- (void)configureUI { - - [self.view insertSubview:self.combinationMakeupView belowSubview:self.photoBtn]; - [self.combinationMakeupView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.height.mas_offset(FUHeightIncludeBottomSafeArea(144)); - }]; - - [self.view insertSubview:self.customizedMakeupView belowSubview:self.photoBtn]; - [self.customizedMakeupView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.height.mas_offset(FUHeightIncludeBottomSafeArea(190)); - }]; - - // 自定义美妆视图默认隐藏 - self.customizedMakeupView.transform = CGAffineTransformMakeTranslation(0, FUHeightIncludeBottomSafeArea(190)); - self.customizedMakeupView.hidden = YES; - - [self.view addSubview:self.colorSelectView]; - [self.colorSelectView mas_makeConstraints:^(MASConstraintMaker *make) { - make.trailing.equalTo(self.view.mas_trailing).mas_offset(-15); - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-192); - } else { - make.bottom.equalTo(self.view.mas_bottom).mas_offset(-192); - } - make.size.mas_offset(CGSizeMake(60, 250)); - }]; - - // 调整拍照按钮位置 - self.photoBtn.transform = CGAffineTransformConcat(CGAffineTransformMakeTranslation(0, -100), CGAffineTransformMakeScale(0.8, 0.8)); -} - -#pragma mark - Private methods - -/// 更新美颜滤镜 -- (void)updateBeautyFilter:(FUCombinationMakeupModel *)model { - if (!model.selectedFilter || [model.selectedFilter isEqualToString:@""]) { - // 没有滤镜则使用默认滤镜"origin" - self.baseManager.beauty.filterName = @"origin"; - self.baseManager.beauty.filterLevel = model.value; - } else { - self.baseManager.beauty.filterName = [model.selectedFilter lowercaseString]; - self.baseManager.beauty.filterLevel = model.value; - } -} - -- (void)refreshColorViewWithIndex:(NSInteger)index { - if (index < 0 || index >= self.makeupManager.makeups.count) { - return; - } - FUMakeupModel *model = self.makeupManager.makeups[index]; - FUSingleMakeupModel *singleModel = model.singleMakeups[model.selectedIndex]; - if (singleModel.type == FUSingleMakeupTypeFoundation || singleModel.colors.count == 0) { - self.colorSelectView.hidden = YES; - } else { - self.colorSelectView.hidden = NO; - [self.colorSelectView setDataColors:singleModel.colors]; - [self.colorSelectView setSelCell:(int)singleModel.defaultColorIndex]; - } -} - -#pragma mark - Event response - -- (void)dismissTipLabel { - self.tipLabel.hidden = YES; -} - -#pragma mark - FUCombinationMakeupViewDelegate - -- (void)combinationMakeupView:(FUCombinationMakeupView *)view didSelectCombinationMakeup:(FUCombinationMakeupModel *)model { - if (!model.isCombined) { - // 老组合妆需要更新美颜滤镜,滤镜值设置给Beauty - [self updateBeautyFilter:model]; - } else { - // 新组合妆,更新滤镜,滤镜值设置给Makeup - if (!model.selectedFilter || [model.selectedFilter isEqualToString:@""]) { - self.baseManager.beauty.filterName = @"origin"; - } else { - self.baseManager.beauty.filterName = [model.selectedFilter lowercaseString]; - } - } - self.makeupManager.currentCombinationMakeupModel = model; -} - -- (void)combinationMakeupView:(FUCombinationMakeupView *)view didChangeCombinationMakeupValue:(FUCombinationMakeupModel *)model { - [self.makeupManager updateIntensityOfCombinationMakeup:model]; - if (!model.isCombined) { - // 老组合妆需要更新美颜滤镜 - [self updateBeautyFilter:model]; - } -} - -- (void)combinationMakeupViewDidClickCustomize { - // 对比更新自定义妆容数据 - [self.makeupManager compareCustomizedMakeupsWithCurrentCombinationMakeup]; - [self.customizedMakeupView reloadData:self.makeupManager.makeups]; - // 每次进入自定义页面默认从头开始自定义 - [self.customizedMakeupView selectMakeupAtIndex:0]; - // 刷新颜色选择控件 - [self refreshColorViewWithIndex:0]; - // UI - [self.combinationMakeupView dismiss]; - [self.customizedMakeupView show]; - [UIView animateWithDuration:0.2 animations:^{ - self.photoBtn.transform = CGAffineTransformConcat(CGAffineTransformMakeTranslation(0, -160), CGAffineTransformMakeScale(0.8, 0.8)); - }]; -} - -#pragma mark - FUCustomizedMakeupViewDelegate - -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didChangeMakeupCategoryWithSingleMakeup:(FUSingleMakeupModel *)model { - if (model.colors.count > model.defaultColorIndex) { - // 更新颜色值 - [self.makeupManager updateColorOfCustomizedSingleMakeup:model]; - // 刷新颜色选择控件 - [self refreshColorViewWithIndex:model.type]; - } else { - self.colorSelectView.hidden = YES; - } -} - -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didSelectedSingleMakeup:(FUSingleMakeupModel *)model { - model.realValue = model.value; - // 更新子妆bundle - [self.makeupManager updateCustomizedSingleMakeup:model]; - // 更新程度值 - [self.makeupManager updateIntensityOfSingleMakeup:model]; - if (model.colors.count > model.defaultColorIndex) { - // 更新颜色值 - [self.makeupManager updateColorOfCustomizedSingleMakeup:model]; - // 刷新颜色选择控件 - [self refreshColorViewWithIndex:model.type]; - } else { - self.colorSelectView.hidden = YES; - } - // 单个妆容标题提示 - if (model.title) { - self.tipLabel.hidden = NO; - self.tipLabel.text = FUNSLocalizedString(model.title, nil); - [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; - } -} - -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didChangeSingleMakeupValue:(FUSingleMakeupModel *)model { - model.realValue = model.value; - [self.makeupManager updateIntensityOfSingleMakeup:model]; -} - -- (void)customizedMakeupViewDidClickBack { - // 根据自定义后妆容是否有变化决定是否选中组合妆 - if (self.makeupManager.isChangedMakeup) { - [self.combinationMakeupView deselectCurrentCombinationMakeup]; - self.makeupManager.currentCombinationMakeupModel = nil; - } - // UI - if (!self.colorSelectView.hidden) { - self.colorSelectView.hidden = YES; - } - [self.customizedMakeupView dismiss]; - [self.combinationMakeupView show]; - [UIView animateWithDuration:0.2 animations:^{ - self.photoBtn.transform = CGAffineTransformConcat(CGAffineTransformMakeTranslation(0, -100), CGAffineTransformMakeScale(0.8, 0.8)); - }]; -} - -#pragma mark - FUColourViewDelegate - -- (void)colourViewDidSelIndex:(int)index { - FUMakeupModel *makeupModel = self.makeupManager.makeups[self.customizedMakeupView.selectedCategoryIndex]; - FUSingleMakeupModel *singleMakeupModel = makeupModel.singleMakeups[makeupModel.selectedIndex]; - singleMakeupModel.defaultColorIndex = index; - [self.makeupManager updateColorOfCustomizedSingleMakeup:singleMakeupModel]; -} - -#pragma mark - Getters - -- (FUCombinationMakeupView *)combinationMakeupView { - if (!_combinationMakeupView) { - _combinationMakeupView = [[FUCombinationMakeupView alloc] initWithFrame:CGRectZero]; - [_combinationMakeupView reloadData:self.makeupManager.combinationMakeups]; - _combinationMakeupView.delegate = self; - // 默认选中 - [_combinationMakeupView selectCombinationMakeupAtIndex:1]; - } - return _combinationMakeupView; -} - -- (FUCustomizedMakeupView *)customizedMakeupView { - if (!_customizedMakeupView) { - _customizedMakeupView = [[FUCustomizedMakeupView alloc] initWithFrame:CGRectZero]; - _customizedMakeupView.delegate = self; - } - return _customizedMakeupView; -} - -- (FUColourView *)colorSelectView { - if (!_colorSelectView) { - _colorSelectView = [[FUColourView alloc] initWithFrame:CGRectMake(0, 0, 60, 250)]; - _colorSelectView.delegate = self; - _colorSelectView.hidden = YES; - } - return _colorSelectView; -} - -- (FUMakeupManager *)makeupManager { - if (!_makeupManager) { - _makeupManager = [[FUMakeupManager alloc] init]; - } - return _makeupManager; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupCell.h b/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupCell.h deleted file mode 100644 index 76c41c9c..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupCell.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FUCombinationMakeupCell.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUCombinationMakeupCell : UICollectionViewCell - -@property (nonatomic, strong, readonly) UIImageView *fuImageView; - -@property (nonatomic, strong, readonly) UILabel *fuTitleLabel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupCell.m b/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupCell.m deleted file mode 100644 index 271ed6a3..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupCell.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// FUCombinationMakeupCell.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUCombinationMakeupCell.h" - -@interface FUCombinationMakeupCell () - -@property (nonatomic, strong) UIImageView *fuImageView; -@property (nonatomic, strong) UILabel *fuTitleLabel; - -@end - -@implementation FUCombinationMakeupCell - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor clearColor]; - [self.contentView addSubview:self.fuImageView]; - [self.contentView addSubview:self.fuTitleLabel]; - } - return self; -} - -- (void)setSelected:(BOOL)selected { - [super setSelected:selected]; - self.fuImageView.layer.borderWidth = selected ? 3 : 0; - self.fuImageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1].CGColor : [UIColor clearColor].CGColor; - self.fuTitleLabel.textColor = selected ? [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1] : [UIColor whiteColor]; -} - -#pragma mark - Getters - -- (UIImageView *)fuImageView { - if (!_fuImageView) { - _fuImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetWidth(self.frame))]; - _fuImageView.layer.masksToBounds = YES; - _fuImageView.layer.cornerRadius = 3; - } - return _fuImageView; -} - -- (UILabel *)fuTitleLabel { - if (!_fuTitleLabel) { - _fuTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.frame) - 11, CGRectGetWidth(self.frame), 11)]; - _fuTitleLabel.font = [UIFont systemFontOfSize:10]; - _fuTitleLabel.textColor = [UIColor whiteColor]; - _fuTitleLabel.textAlignment = NSTextAlignmentCenter; - _fuTitleLabel.adjustsFontSizeToFitWidth = YES; - } - return _fuTitleLabel; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupView.h b/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupView.h deleted file mode 100644 index d78ff759..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupView.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// FUCombinationMakeupView.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -@class FUCombinationMakeupModel, FUCombinationMakeupView; - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUCombinationMakeupViewDelegate - -/// 选中组合妆 -- (void)combinationMakeupView:(FUCombinationMakeupView *)view didSelectCombinationMakeup:(FUCombinationMakeupModel *)model; - -/// 组合妆程度值变化 -- (void)combinationMakeupView:(FUCombinationMakeupView *)view didChangeCombinationMakeupValue:(FUCombinationMakeupModel *)model; - -/// 自定义妆容 -- (void)combinationMakeupViewDidClickCustomize; - -@end - -@interface FUCombinationMakeupView : UIView - -@property (nonatomic, assign) BOOL showing; -@property (nonatomic, weak) id delegate; - -- (void)reloadData:(NSArray *)combinationMakeups; - -/// 选中组合妆 -/// @param index 索引 -- (void)selectCombinationMakeupAtIndex:(NSInteger)index; - -/// 取消选中当前组合妆 -- (void)deselectCurrentCombinationMakeup; - -- (void)show; - -- (void)dismiss; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupView.m b/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupView.m deleted file mode 100644 index 8e628035..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCombinationMakeupView.m +++ /dev/null @@ -1,290 +0,0 @@ -// -// FUCombinationMakeupView.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/12. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUCombinationMakeupView.h" -#import "FUCombinationMakeupCell.h" -#import "FUCombinationMakeupModel.h" - -static NSString * const kFUCombinationMakeupCellIdentifierKey = @"FUCombinationMakeupCell"; - -@interface FUCombinationMakeupView () - -@property (nonatomic, strong) UICollectionView *collectionView; - -@property (nonatomic, strong) FUSlider *slider; -/// 自定义按钮 -@property (nonatomic, strong) FUSquareButton *customizeButton; - -/// 组合妆数据 -@property (nonatomic, copy) NSArray *combinationMakeupArray; -/// 当前选中索引 -@property (nonatomic, assign) NSInteger selectedIndex; - -@end - -@implementation FUCombinationMakeupView - -#pragma mark - Initializer - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor clearColor]; - _selectedIndex = -1; - - [self configureUI]; - } - return self; -} - -#pragma mark - UI - -- (void)configureUI { - // 毛玻璃效果 - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - [self addSubview:effectview]; - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(self); - }]; - - [self addSubview:self.customizeButton]; - [self.customizeButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.mas_leading).mas_offset(16); - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.mas_safeAreaLayoutGuideBottom).mas_offset(-18); - } else { - make.bottom.equalTo(self.mas_bottom).mas_offset(-18); - } - make.size.mas_offset(CGSizeMake(54, 70)); - }]; - - UIView *line = [[UIView alloc] init]; - line.backgroundColor = [UIColor colorWithHexColorString:@"E5E5E5" alpha:0.2]; - [self addSubview:line]; - [line mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.mas_leading).mas_offset(85); - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.mas_safeAreaLayoutGuideBottom).mas_offset(-33); - } else { - make.bottom.equalTo(self.mas_bottom).mas_offset(-33); - } - make.size.mas_offset(CGSizeMake(1, 40)); - }]; - - [self addSubview:self.collectionView]; - [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(line.mas_trailing); - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.mas_safeAreaLayoutGuideBottom).mas_offset(-4); - } else { - make.bottom.equalTo(self.mas_bottom).mas_offset(-4); - } - make.trailing.equalTo(self.mas_trailing); - make.height.mas_offset(98); - }]; - - [self addSubview:self.slider]; - [self.slider mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.mas_leading).mas_offset(34); - make.trailing.equalTo(self.mas_trailing).mas_offset(-34); - make.bottom.equalTo(self.collectionView.mas_top).mas_offset(-6); - }]; -} - -#pragma mark - Instance methos - -- (void)reloadData:(NSArray *)combinationMakeups { - _combinationMakeupArray = combinationMakeups; - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView reloadData]; - }); -} - -- (void)selectCombinationMakeupAtIndex:(NSInteger)index { - if (index < 0 || index >= self.combinationMakeupArray.count) { - return; - } - self.selectedIndex = index; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - }); -} - -- (void)deselectCurrentCombinationMakeup { - if (self.selectedIndex == -1) { - return; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView deselectItemAtIndexPath:[NSIndexPath indexPathForItem:self.selectedIndex inSection:0] animated:NO]; - _selectedIndex = -1; - [self refreshSubviews]; - }); - -} - -- (void)show { - self.hidden = NO; - [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ - self.transform = CGAffineTransformIdentity; - } completion:^(BOOL finished) { - }]; -} - -- (void)dismiss { - [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - self.transform = CGAffineTransformMakeTranslation(0, CGRectGetHeight(self.bounds)); - } completion:^(BOOL finished) { - self.hidden = YES; - }]; -} - -#pragma mark - Private methods - -- (void)refreshSubviews { - if (self.selectedIndex == -1) { - dispatch_async(dispatch_get_main_queue(), ^{ - // 自定义按钮状态 - self.customizeButton.enabled = YES; - // slider状态 - self.slider.hidden = YES; - [self mas_updateConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(114)); - }]; - }); - } else { - FUCombinationMakeupModel *selectedModel = self.combinationMakeupArray[self.selectedIndex]; - dispatch_async(dispatch_get_main_queue(), ^{ - // 自定义按钮状态 - self.customizeButton.enabled = selectedModel.isAllowedEdit; - // slider状态 - if (self.selectedIndex < 1) { - self.slider.hidden = YES; - } - [self mas_updateConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(self.selectedIndex < 1 ? FUHeightIncludeBottomSafeArea(114) : FUHeightIncludeBottomSafeArea(144)); - }]; - [UIView animateWithDuration:0.15 animations:^{ - [self.superview layoutIfNeeded]; - } completion:^(BOOL finished) { - if (self.selectedIndex >= 1) { - self.slider.hidden = NO; - self.slider.value = selectedModel.value; - } - }]; - }); - } -} - -#pragma mark - Event response - -- (void)customizeAction { - if (self.delegate && [self.delegate respondsToSelector:@selector(combinationMakeupViewDidClickCustomize)]) { - [self.delegate combinationMakeupViewDidClickCustomize]; - } -} - -- (void)sliderValueChangedAction { - FUCombinationMakeupModel *model = self.combinationMakeupArray[self.selectedIndex]; - model.value = self.slider.value; - if (self.delegate && [self.delegate respondsToSelector:@selector(combinationMakeupView:didChangeCombinationMakeupValue:)]) { - [self.delegate combinationMakeupView:self didChangeCombinationMakeupValue:model]; - } -} - -#pragma mark - Collection view data source - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.combinationMakeupArray.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - FUCombinationMakeupCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCombinationMakeupCellIdentifierKey forIndexPath:indexPath]; - FUCombinationMakeupModel *model = self.combinationMakeupArray[indexPath.item]; - cell.fuImageView.image = [UIImage imageNamed:model.icon]; - cell.fuTitleLabel.text = FUNSLocalizedString(model.name, nil); - return cell; -} - -#pragma mark - Collection view delegate - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - self.selectedIndex = indexPath.item; -} - -#pragma mark - Collection view delegate flow layout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { - return (UIEdgeInsets){0, 16, 0, 16}; -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return (CGSize){54, 70}; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { - return 16; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { - return 16; -} - -#pragma mark - Setters - -- (void)setSelectedIndex:(NSInteger)selectedIndex { - if (selectedIndex == _selectedIndex || selectedIndex < 0 || selectedIndex >= self.combinationMakeupArray.count) { - return; - } - _selectedIndex = selectedIndex; - FUCombinationMakeupModel *selectedModel = self.combinationMakeupArray[selectedIndex]; - if (self.delegate && [self.delegate respondsToSelector:@selector(combinationMakeupView:didSelectCombinationMakeup:)]) { - [self.delegate combinationMakeupView:self didSelectCombinationMakeup:selectedModel]; - } - [self refreshSubviews]; -} - -#pragma mark - Getters - -- (UICollectionView *)collectionView { - if (!_collectionView) { - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; - _collectionView.backgroundColor = [UIColor clearColor]; - _collectionView.showsHorizontalScrollIndicator = NO; - _collectionView.dataSource = self; - _collectionView.delegate = self; - [_collectionView registerClass:[FUCombinationMakeupCell class] forCellWithReuseIdentifier:kFUCombinationMakeupCellIdentifierKey]; - } - return _collectionView; -} - -- (FUSlider *)slider { - if (!_slider) { - _slider = [[FUSlider alloc] initWithFrame:CGRectZero]; - [_slider addTarget:self action:@selector(sliderValueChangedAction) forControlEvents:UIControlEventValueChanged]; - _slider.hidden = YES; - } - return _slider; -} - -- (FUSquareButton *)customizeButton { - if (!_customizeButton) { - _customizeButton = [[FUSquareButton alloc] initWithFrame:CGRectMake(0, 0, 54, 70) interval:6]; - [_customizeButton setImage:[UIImage imageNamed:@"makeup_custom_nor"] forState:UIControlStateNormal]; - [_customizeButton setTitle:FUNSLocalizedString(@"自定义", nil) forState:UIControlStateNormal]; - [_customizeButton setTitleColor:[UIColor colorWithWhite:1 alpha:0.5] forState:UIControlStateDisabled]; - [_customizeButton addTarget:self action:@selector(customizeAction) forControlEvents:UIControlEventTouchUpInside]; - _customizeButton.enabled = NO; - } - return _customizeButton; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupCell.h b/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupCell.h deleted file mode 100644 index 8f7883ef..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupCell.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUCustomizedMakeupCell.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/19. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUCustomizedMakeupCategoryCell : UICollectionViewCell - -/// 蓝点提示 -@property (nonatomic, strong, readonly) UIView *tipView; -@property (nonatomic, strong, readonly) UILabel *categoryNameLabel; - -@end - -@interface FUCustomizedMakeupItemCell : UICollectionViewCell - -@property (nonatomic, strong, readonly) UIImageView *fuImageView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupCell.m b/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupCell.m deleted file mode 100644 index 280d14bb..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupCell.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// FUCustomizedMakeupCell.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/19. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUCustomizedMakeupCell.h" - -@implementation FUCustomizedMakeupCategoryCell - -@synthesize tipView = _tipView, categoryNameLabel = _categoryNameLabel; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self.contentView addSubview:self.categoryNameLabel]; - [self.categoryNameLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.contentView); - }]; - - [self.contentView addSubview:self.tipView]; - [self.tipView mas_makeConstraints:^(MASConstraintMaker *make) { - make.trailing.equalTo(self.contentView.mas_trailing).mas_offset(-4); - make.top.equalTo(self.contentView.mas_top).mas_offset(10); - make.size.mas_offset(CGSizeMake(4, 4)); - }]; - } - return self; -} - -#pragma mark - Override methods - -- (void)setSelected:(BOOL)selected { - [super setSelected:selected]; - self.categoryNameLabel.textColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1] : [UIColor whiteColor]; -} - -#pragma mark - Getters - -- (UIView *)tipView { - if (!_tipView) { - _tipView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 4, 4)]; - _tipView.backgroundColor = [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1]; - _tipView.layer.masksToBounds = YES; - _tipView.layer.cornerRadius = 2; - _tipView.hidden = YES; - } - return _tipView; -} - -- (UILabel *)categoryNameLabel { - if (!_categoryNameLabel) { - _categoryNameLabel = [[UILabel alloc] init]; - _categoryNameLabel.font = [UIFont systemFontOfSize:13]; - _categoryNameLabel.textColor = [UIColor whiteColor]; - } - return _categoryNameLabel; -} - -@end - -@implementation FUCustomizedMakeupItemCell - -@synthesize fuImageView = _fuImageView; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self.contentView addSubview:self.fuImageView]; - - } - return self; -} - -- (void)setSelected:(BOOL)selected { - [super setSelected:selected]; - self.fuImageView.layer.borderWidth = selected ? 3 : 0; - self.fuImageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1].CGColor : [UIColor clearColor].CGColor; -} - -#pragma mark - Getters - -- (UIImageView *)fuImageView { - if (!_fuImageView) { - _fuImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetWidth(self.frame))]; - _fuImageView.layer.masksToBounds = YES; - _fuImageView.layer.cornerRadius = 3; - } - return _fuImageView; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupView.h b/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupView.h deleted file mode 100644 index a5ea0b52..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupView.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// FUCustomizedMakeupView.h -// FULiveDemo -// -// Created by 项林平 on 2021/11/19. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -@class FUCustomizedMakeupView, FUMakeupModel, FUSingleMakeupModel; - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUCustomizedMakeupViewDelegate - -/// 妆容分类切换 -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didChangeMakeupCategoryWithSingleMakeup:(FUSingleMakeupModel *)model; -/// 选中某个妆容选项 -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didSelectedSingleMakeup:(FUSingleMakeupModel *)model; -/// 妆容程度值变化 -- (void)customizedMakeupView:(FUCustomizedMakeupView *)view didChangeSingleMakeupValue:(FUSingleMakeupModel *)model; -/// 点击返回 -- (void)customizedMakeupViewDidClickBack; - -@end - -@interface FUCustomizedMakeupView : UIView - -/// 选中类型索引 -@property (nonatomic, assign, readonly) NSInteger selectedCategoryIndex; - -@property (nonatomic, weak) id delegate; - -- (void)reloadData:(NSArray *)makeups; - -/// 选中妆容 -/// @param index 索引 -- (void)selectMakeupAtIndex:(NSInteger)index; - -- (void)show; - -- (void)dismiss; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupView.m b/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupView.m deleted file mode 100644 index 3521c7d4..00000000 --- a/FULiveDemo/Modules/Makeup/View/FUCustomizedMakeupView.m +++ /dev/null @@ -1,322 +0,0 @@ -// -// FUCustomizedMakeupView.m -// FULiveDemo -// -// Created by 项林平 on 2021/11/19. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUCustomizedMakeupView.h" -#import "FUCustomizedMakeupCell.h" - -#import "FUMakeupModel.h" -#import "FUSingleMakeupModel.h" - -#import "FUMakeupDefine.h" - -static NSString * const kFUCustomizedMakeupItemCellIdentifierKey = @"FUCustomizedMakeupItemCell"; -static NSString * const kFUCustomizedMakeupCategoryCellIdentifierKey = @"FUCustomizedMakeupCategoryCell"; - -@interface FUCustomizedMakeupView () - -@property (nonatomic, strong) UICollectionView *categoriesCollectionView; -@property (nonatomic, strong) UICollectionView *itemsCollectionView; -@property (nonatomic, strong) FUSlider *slider; - -@property (nonatomic, copy) NSArray *makeups; - -/// 选中类型索引 -@property (nonatomic, assign) NSInteger selectedCategoryIndex; - -@end - -@implementation FUCustomizedMakeupView - -#pragma mark - Initializer - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor clearColor]; - [self configureUI]; - } - return self; -} - -#pragma mark - UI - -- (void)configureUI { - // 毛玻璃效果 - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - [self addSubview:effectview]; - [effectview mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.bottom.equalTo(self); - }]; - - UIView *categoryView = [[UIView alloc] init]; - categoryView.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:1.0]; - [self addSubview:categoryView]; - [categoryView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self); - make.height.mas_offset(FUHeightIncludeBottomSafeArea(49)); - }]; - - [categoryView addSubview:self.categoriesCollectionView]; - [self.categoriesCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.leading.trailing.equalTo(categoryView); - make.height.mas_offset(49); - }]; - - UIView *horizontalLine = [[UIView alloc] init]; - horizontalLine.backgroundColor = [UIColor colorWithWhite:1 alpha:0.2]; - [self addSubview:horizontalLine]; - [horizontalLine mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.equalTo(self); - make.bottom.equalTo(categoryView.mas_top); - make.height.mas_offset(0.5); - }]; - - UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [backButton setImage:[UIImage imageNamed:@"makeup_return_nor"] forState:UIControlStateNormal]; - [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:backButton]; - [backButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.mas_leading).mas_offset(16); - make.bottom.equalTo(horizontalLine.mas_top).mas_offset(-22); - make.size.mas_offset(CGSizeMake(54, 54)); - }]; - - UIView *line = [[UIView alloc] init]; - line.backgroundColor = [UIColor colorWithHexColorString:@"E5E5E5" alpha:0.2]; - [self addSubview:line]; - [line mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.mas_leading).mas_offset(85); - make.bottom.equalTo(horizontalLine.mas_top).mas_offset(-29); - make.size.mas_offset(CGSizeMake(1, 40)); - }]; - - [self addSubview:self.itemsCollectionView]; - [self.itemsCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(line.mas_trailing); - make.bottom.equalTo(horizontalLine.mas_top); - make.trailing.equalTo(self.mas_trailing); - make.height.mas_offset(98); - }]; - - [self addSubview:self.slider]; - [self.slider mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.mas_leading).mas_offset(34); - make.trailing.equalTo(self.mas_trailing).mas_offset(-34); - make.bottom.equalTo(self.itemsCollectionView.mas_top).mas_offset(-6); - }]; -} - -#pragma mark - Instance methods - -- (void)reloadData:(NSArray *)makeups { - _makeups = makeups; - dispatch_async(dispatch_get_main_queue(), ^{ - [self.categoriesCollectionView reloadData]; - }); -} - -- (void)selectMakeupAtIndex:(NSInteger)index { - if (index < 0 || index >= self.makeups.count) { - return; - } - self.selectedCategoryIndex = index; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.categoriesCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; - }); - - [self selectItemAtIndex:self.makeups[self.selectedCategoryIndex].selectedIndex]; -} - -- (void)show { - self.hidden = NO; - [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - self.transform = CGAffineTransformIdentity; - } completion:^(BOOL finished) { - }]; -} - -- (void)dismiss { - [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ - self.transform = CGAffineTransformMakeTranslation(0, CGRectGetHeight(self.bounds)); - } completion:^(BOOL finished) { - self.hidden = YES; - }]; -} - -#pragma mark - Private methods - -- (void)selectItemAtIndex:(NSInteger)index { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.itemsCollectionView reloadData]; - [self.itemsCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; - [self updateSubviews]; - }); -} - -- (void)updateSubviews { - FUMakeupModel *model = self.makeups[self.selectedCategoryIndex]; - if (model.selectedIndex == 0) { - self.slider.hidden = YES; - } - [self mas_updateConstraints:^(MASConstraintMaker *make) { - make.height.mas_offset(model.selectedIndex == 0 ? FUHeightIncludeBottomSafeArea(155) : FUHeightIncludeBottomSafeArea(190)); - }]; - [UIView animateWithDuration:0.15 animations:^{ - [self.superview layoutIfNeeded]; - } completion:^(BOOL finished) { - if (model.selectedIndex > 0) { - self.slider.hidden = NO; - self.slider.value = model.singleMakeups[model.selectedIndex].value; - } - }]; -} - -#pragma mark - Event response - -- (void)backAction:(UIButton *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupViewDidClickBack)]) { - [self.delegate customizedMakeupViewDidClickBack]; - } -} - -- (void)sliderValueChangedAction { - FUMakeupModel *model = self.makeups[self.selectedCategoryIndex]; - FUSingleMakeupModel *singleModel = model.singleMakeups[model.selectedIndex]; - if ((singleModel.value == 0 && self.slider.value > 0) || (singleModel.value > 0 && self.slider.value == 0)) { - // 需要刷新UI - dispatch_async(dispatch_get_main_queue(), ^{ - [self.categoriesCollectionView reloadData]; - [self.categoriesCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.selectedCategoryIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; - }); - } - singleModel.value = self.slider.value; - if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupView:didChangeSingleMakeupValue:)]) { - [self.delegate customizedMakeupView:self didChangeSingleMakeupValue:singleModel]; - } -} - -#pragma mark - Collection view data source - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return collectionView == self.categoriesCollectionView ? self.makeups.count : self.makeups[self.selectedCategoryIndex].singleMakeups.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - if (collectionView == self.categoriesCollectionView) { - FUCustomizedMakeupCategoryCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCustomizedMakeupCategoryCellIdentifierKey forIndexPath:indexPath]; - FUMakeupModel *makeupModel = self.makeups[indexPath.item]; - cell.categoryNameLabel.text = FUNSLocalizedString(makeupModel.name, nil); - cell.tipView.hidden = makeupModel.selectedIndex == 0 || makeupModel.singleMakeups[makeupModel.selectedIndex].value == 0; - return cell; - } else { - FUCustomizedMakeupItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCustomizedMakeupItemCellIdentifierKey forIndexPath:indexPath]; - FUMakeupModel *makeupModel = self.makeups[self.selectedCategoryIndex]; - FUSingleMakeupModel *singleMakeupModel = makeupModel.singleMakeups[indexPath.item]; - if (singleMakeupModel.type == FUSingleMakeupTypeFoundation && indexPath.item > 0) { - // 粉底只设置icon背景色 - NSArray *color = singleMakeupModel.colors[singleMakeupModel.defaultColorIndex]; - cell.fuImageView.backgroundColor = [UIColor colorWithRed:[color[0] floatValue] green:[color[1] floatValue] blue:[color[2] floatValue] alpha:[color[3] floatValue]]; - cell.fuImageView.image = nil; - } else { - // 设置icon图片 - cell.fuImageView.backgroundColor = [UIColor clearColor]; - cell.fuImageView.image = [UIImage imageNamed:singleMakeupModel.icon]; - } - return cell; - } -} - -#pragma mark - Collection view delegate - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - if (collectionView == self.categoriesCollectionView) { - if (self.selectedCategoryIndex == indexPath.item) { - return; - } - self.selectedCategoryIndex = indexPath.item; - [self selectItemAtIndex:self.makeups[self.selectedCategoryIndex].selectedIndex]; - if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupView:didChangeMakeupCategoryWithSingleMakeup:)]) { - [self.delegate customizedMakeupView:self didChangeMakeupCategoryWithSingleMakeup:self.makeups[self.selectedCategoryIndex].singleMakeups[self.makeups[self.selectedCategoryIndex].selectedIndex]]; - } - } else { - FUMakeupModel *currentModel = self.makeups[self.selectedCategoryIndex]; - if (currentModel.selectedIndex == indexPath.item) { - return; - } - currentModel.selectedIndex = indexPath.item; - if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupView:didSelectedSingleMakeup:)]) { - [self.delegate customizedMakeupView:self didSelectedSingleMakeup:currentModel.singleMakeups[currentModel.selectedIndex]]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [self.categoriesCollectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:self.selectedCategoryIndex inSection:0]]]; - [self.categoriesCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.selectedCategoryIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - [self updateSubviews]; - }); - } -} - -#pragma mark - Collection view delegate flow layout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { - return collectionView == self.itemsCollectionView ? (UIEdgeInsets){0, 16, 0, 16} : UIEdgeInsetsZero; -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return collectionView == self.itemsCollectionView ? (CGSize){54, 54} : (CGSize){70, 49}; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { - return collectionView == self.itemsCollectionView ? 16 : 0; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { - return collectionView == self.itemsCollectionView ? 16 : 0; -} - -#pragma mark - Getters - -- (UICollectionView *)categoriesCollectionView { - if (!_categoriesCollectionView) { - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - _categoriesCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; - _categoriesCollectionView.backgroundColor = [UIColor clearColor]; - _categoriesCollectionView.showsHorizontalScrollIndicator = NO; - _categoriesCollectionView.dataSource = self; - _categoriesCollectionView.delegate = self; - [_categoriesCollectionView registerClass:[FUCustomizedMakeupCategoryCell class] forCellWithReuseIdentifier:kFUCustomizedMakeupCategoryCellIdentifierKey]; - } - return _categoriesCollectionView; -} - -- (UICollectionView *)itemsCollectionView { - if (!_itemsCollectionView) { - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - _itemsCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; - _itemsCollectionView.backgroundColor = [UIColor clearColor]; - _itemsCollectionView.showsHorizontalScrollIndicator = NO; - _itemsCollectionView.dataSource = self; - _itemsCollectionView.delegate = self; - [_itemsCollectionView registerClass:[FUCustomizedMakeupItemCell class] forCellWithReuseIdentifier:kFUCustomizedMakeupItemCellIdentifierKey]; - } - return _itemsCollectionView; -} - -- (FUSlider *)slider { - if (!_slider) { - _slider = [[FUSlider alloc] initWithFrame:CGRectZero]; - [_slider addTarget:self action:@selector(sliderValueChangedAction) forControlEvents:UIControlEventValueChanged]; - _slider.hidden = YES; - } - return _slider; -} - -@end diff --git a/FULiveDemo/Modules/Makeup/ViewController/FUMakeupImageRenderViewController.h b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupImageRenderViewController.h new file mode 100644 index 00000000..c4ebd4b4 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupImageRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUMakeupImageRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUImageRenderViewController.h" +#import "FUMakeupImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeupImageRenderViewController : FUImageRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/ViewController/FUMakeupImageRenderViewController.m b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupImageRenderViewController.m new file mode 100644 index 00000000..f4486f73 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupImageRenderViewController.m @@ -0,0 +1,62 @@ +// +// FUMakeupImageRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUMakeupImageRenderViewController.h" +#import + +@interface FUMakeupImageRenderViewController () + +@end + +@implementation FUMakeupImageRenderViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [[FUMakeupComponentManager sharedManager] addComponentViewToView:self.view]; + [FUMakeupComponentManager sharedManager].delegate = self; + // 更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:[FUMakeupComponentManager sharedManager].componentViewHeight + 10 hidden:NO animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + [[FUMakeupComponentManager sharedManager] removeComponentView]; + [FUMakeupComponentManager sharedManager].delegate = nil; +} + +#pragma mark - Event response + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + +#pragma mark - FUMakeupComponentDelegate + +- (void)makeupComponentViewHeightDidChange:(CGFloat)height { + // 美妆视图高度变化时需要更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:height + 10 hidden:NO animated:YES]; +} + +- (void)makeupComponentNeedsDisplayPromptContent:(NSString *)content { + if (content.length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.text = content; + self.tipLabel.hidden = NO; + [FUMakeupImageRenderViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); +} + +@end diff --git a/FULiveDemo/Modules/Makeup/ViewController/FUMakeupVideoRenderViewController.h b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupVideoRenderViewController.h new file mode 100644 index 00000000..f9240a8c --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupVideoRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUMakeupVideoRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUVideoRenderViewController.h" +#import "FUMakeupVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeupVideoRenderViewController : FUVideoRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/ViewController/FUMakeupVideoRenderViewController.m b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupVideoRenderViewController.m new file mode 100644 index 00000000..e16ce846 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupVideoRenderViewController.m @@ -0,0 +1,62 @@ +// +// FUMakeupVideoRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUMakeupVideoRenderViewController.h" +#import + +@interface FUMakeupVideoRenderViewController () + +@end + +@implementation FUMakeupVideoRenderViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [[FUMakeupComponentManager sharedManager] addComponentViewToView:self.view]; + [FUMakeupComponentManager sharedManager].delegate = self; + // 更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:[FUMakeupComponentManager sharedManager].componentViewHeight + 10 hidden:NO animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + [[FUMakeupComponentManager sharedManager] removeComponentView]; + [FUMakeupComponentManager sharedManager].delegate = nil; +} + +#pragma mark - Event response + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + +#pragma mark - FUMakeupComponentDelegate + +- (void)makeupComponentViewHeightDidChange:(CGFloat)height { + // 美妆视图高度变化时需要更新保存按钮位置 + [self updateBottomConstraintsOfDownloadButton:height + 10 hidden:NO animated:YES]; +} + +- (void)makeupComponentNeedsDisplayPromptContent:(NSString *)content { + if (content.length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.text = content; + self.tipLabel.hidden = NO; + [FUMakeupVideoRenderViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); +} + +@end diff --git a/FULiveDemo/Modules/Makeup/ViewController/FUMakeupViewController.h b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupViewController.h new file mode 100644 index 00000000..2551efa2 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupViewController.h @@ -0,0 +1,17 @@ +// +// FUMakeupViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/7. +// + +#import "FURenderViewController.h" +#import "FUMakeupViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeupViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/ViewController/FUMakeupViewController.m b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupViewController.m new file mode 100644 index 00000000..35caa130 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewController/FUMakeupViewController.m @@ -0,0 +1,69 @@ +// +// FUMakeupViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/7. +// + +#import "FUMakeupViewController.h" +#import + +@interface FUMakeupViewController () + +@end + +@implementation FUMakeupViewController + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [[FUMakeupComponentManager sharedManager] addComponentViewToView:self.view]; + [FUMakeupComponentManager sharedManager].delegate = self; + // 更新拍照/录制按钮位置 + [self updateBottomConstraintsOfCaptureButton:[FUMakeupComponentManager sharedManager].componentViewHeight + 10 animated:NO]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + [[FUMakeupComponentManager sharedManager] removeComponentView]; + [FUMakeupComponentManager sharedManager].delegate = nil; +} + +- (void)dealloc { + [FUMakeupComponentManager destory]; +} + + +#pragma mark - Event response + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + +#pragma mark - FUMakeupComponentDelegate + +- (void)makeupComponentViewHeightDidChange:(CGFloat)height { + // 美妆视图高度变化时需要更新拍照/录制按钮的位置 + [self updateBottomConstraintsOfCaptureButton:height + 10 animated:YES]; +} + +- (void)makeupComponentNeedsDisplayPromptContent:(NSString *)content { + if (content.length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.text = content; + self.tipLabel.hidden = NO; + [FUMakeupViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); +} + +@end diff --git a/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupImageRenderViewModel.h b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupImageRenderViewModel.h new file mode 100644 index 00000000..b815b326 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupImageRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUMakeupImageRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeupImageRenderViewModel : FUImageRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupImageRenderViewModel.m b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupImageRenderViewModel.m new file mode 100644 index 00000000..dee32103 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupImageRenderViewModel.m @@ -0,0 +1,12 @@ +// +// FUMakeupImageRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUMakeupImageRenderViewModel.h" + +@implementation FUMakeupImageRenderViewModel + +@end diff --git a/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupVideoRenderViewModel.h b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupVideoRenderViewModel.h new file mode 100644 index 00000000..8b0a44a5 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupVideoRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUMakeupVideoRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeupVideoRenderViewModel : FUVideoRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupVideoRenderViewModel.m b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupVideoRenderViewModel.m new file mode 100644 index 00000000..84ac0359 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupVideoRenderViewModel.m @@ -0,0 +1,12 @@ +// +// FUMakeupVideoRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUMakeupVideoRenderViewModel.h" + +@implementation FUMakeupVideoRenderViewModel + +@end diff --git a/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupViewModel.h b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupViewModel.h new file mode 100644 index 00000000..1d90d211 --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupViewModel.h @@ -0,0 +1,16 @@ +// +// FUMakeupViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/7. +// + +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMakeupViewModel : FURenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupViewModel.m b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupViewModel.m new file mode 100644 index 00000000..54bdbeaf --- /dev/null +++ b/FULiveDemo/Modules/Makeup/ViewModel/FUMakeupViewModel.m @@ -0,0 +1,25 @@ +// +// FUMakeupViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/7. +// + +#import "FUMakeupViewModel.h" + +@implementation FUMakeupViewModel + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleMakeup; +} + +- (BOOL)supportMediaRendering { + if ([[FURenderKitManager sharedManager].configurations[@"美妆导图"] boolValue]) { + return YES; + } + return NO; +} + +@end diff --git a/FULiveDemo/Modules/MusicFilter/Manager/FUMusicFilterManager.h b/FULiveDemo/Modules/MusicFilter/Manager/FUMusicFilterManager.h deleted file mode 100644 index f07a642f..00000000 --- a/FULiveDemo/Modules/MusicFilter/Manager/FUMusicFilterManager.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// FUMusicFilterManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -#import "FUStickerProtocol.h" -NS_ASSUME_NONNULL_BEGIN - -@interface FUMusicFilterManager : FUMetaManager - -@property (nonatomic, strong, nullable) FUMusicFilter *musicItem; - -@property (nonatomic, copy) NSArray *musicFilterItems; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/MusicFilter/Manager/FUMusicFilterManager.m b/FULiveDemo/Modules/MusicFilter/Manager/FUMusicFilterManager.m deleted file mode 100644 index 13d4b0a8..00000000 --- a/FULiveDemo/Modules/MusicFilter/Manager/FUMusicFilterManager.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// FUMusicFilterManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMusicFilterManager.h" - -@interface FUMusicFilterManager () { - NSString *_musicPath; -} -@end - -@implementation FUMusicFilterManager -@synthesize selectedItem; - -- (instancetype)init { - self = [super init]; - if (self) { - _musicPath = [[NSBundle mainBundle] pathForResource:@"douyin" ofType:@"mp3"]; - } - return self; -} - -- (void)loadItem:(NSString *)itemName - completion:(void (^ __nullable)(BOOL finished))completion { - self.selectedItem = itemName; - if (itemName != nil && ![itemName isEqual: @"resetItem"]) { - [self loadItem]; - if (completion) { - completion(YES); - } - } else { - [self releaseItem]; - if (completion) { - completion(NO); - } - } -} - - -- (void)loadItem { - NSString *itemName = self.selectedItem; - NSString *path = [[NSBundle mainBundle] pathForResource:[itemName stringByAppendingPathExtension:@"bundle"] ofType:nil]; - FUMusicFilter *newItem = [[FUMusicFilter alloc] initWithPath:path name:@"music"]; - newItem.musicPath = _musicPath; - [FURenderKit shareRenderKit].musicFilter = newItem; - self.musicItem = newItem; -} - -- (void)releaseItem { - self.musicItem = nil; - [FURenderKit shareRenderKit].musicFilter = nil; -} - -- (NSArray *)musicFilterItems { - if (!_musicFilterItems) { - _musicFilterItems = @[@"resetItem", @"douyin_01", @"douyin_02"]; - } - return _musicFilterItems; -} - -@end diff --git a/FULiveDemo/Modules/MusicFilter/VC/FUMusicFilterController.h b/FULiveDemo/Modules/MusicFilter/VC/FUMusicFilterController.h deleted file mode 100644 index 2725c4a9..00000000 --- a/FULiveDemo/Modules/MusicFilter/VC/FUMusicFilterController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUMusicFilterController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUMusicFilterController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/MusicFilter/VC/FUMusicFilterController.m b/FULiveDemo/Modules/MusicFilter/VC/FUMusicFilterController.m deleted file mode 100644 index bde69d9c..00000000 --- a/FULiveDemo/Modules/MusicFilter/VC/FUMusicFilterController.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// FUMusicFilterController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUMusicFilterController.h" -#import "FUMusicFilterManager.h" -#import - -@interface FUMusicFilterController () -@property (strong, nonatomic) FUItemsView *itemsView; -@property (strong, nonatomic) FUMusicFilterManager *musicManager; -@end - -@implementation FUMusicFilterController -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - self.musicManager = [[FUMusicFilterManager alloc] init]; - [self setupView]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; -} - --(void)setupView{ - self.itemsView = [[FUItemsView alloc] init]; - self.itemsView.delegate = self; - [self.view addSubview:self.itemsView]; - self.itemsView.items = self.musicManager.musicFilterItems; - [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } - }]; - - /* 初始状态 */ - NSInteger selectedIndex = self.musicManager.musicFilterItems.count > 0 ? 1 : 0; - self.itemsView.selectedIndex = selectedIndex ; - - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; -} - --(void)viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - - /* 返回当前界面的时候,重新加载 */ - if (self.itemsView.selectedIndex < 0) { - self.itemsView.selectedIndex = [self.musicManager.musicFilterItems indexOfObject:self.musicManager.selectedItem]; - }else { - [self.musicManager loadItem:self.itemsView.items[self.itemsView.selectedIndex] completion:nil]; - } -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - [self.itemsView startAnimation]; - NSString *item = itemsView.items[index]; - [self.musicManager loadItem:item completion:^(BOOL finished) { - [self.itemsView stopAnimation]; - }]; - - [self.musicManager.musicItem stop]; - if (index > 0) { - [self.musicManager.musicItem play]; - } else { - [self.musicManager releaseItem]; - } -} - --(void)headButtonViewSegmentedChange:(UISegmentedControl *)sender{ - [super headButtonViewSegmentedChange:sender]; - [self.musicManager.musicItem play]; -} - --(void)headButtonViewSwitchAction:(UIButton *)btn { - [super headButtonViewSwitchAction:btn]; - if (self.musicManager.musicItem) { - [self.musicManager.musicItem play]; - } -} - -- (void)headButtonViewBackAction:(UIButton *)btn { - [super headButtonViewBackAction:btn]; - [self.musicManager releaseItem]; -} - -#pragma mark --- Observer - -- (void)applicationWillResignActive{ - [self.musicManager.musicItem stop]; -} - -- (void)applicationDidBecomeActive { - if (![self.musicManager.selectedItem isEqualToString:@"noitem"]) { - [self.musicManager.musicItem play]; - } -} -@end diff --git a/FULiveDemo/Modules/MusicFilter/ViewController/FUMusicFilterViewController.h b/FULiveDemo/Modules/MusicFilter/ViewController/FUMusicFilterViewController.h new file mode 100644 index 00000000..34dc3243 --- /dev/null +++ b/FULiveDemo/Modules/MusicFilter/ViewController/FUMusicFilterViewController.h @@ -0,0 +1,18 @@ +// +// FUMusicFilterViewController.h +// FULiveDemo +// +// Created by 孙慕 on 2019/1/31. +// Copyright © 2019年 FaceUnity. All rights reserved. +// + +#import "FURenderViewController.h" +#import "FUMusicFilterViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMusicFilterViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/MusicFilter/ViewController/FUMusicFilterViewController.m b/FULiveDemo/Modules/MusicFilter/ViewController/FUMusicFilterViewController.m new file mode 100644 index 00000000..40685d60 --- /dev/null +++ b/FULiveDemo/Modules/MusicFilter/ViewController/FUMusicFilterViewController.m @@ -0,0 +1,83 @@ +// +// FUMusicFilterViewController.m +// FULiveDemo +// +// Created by 孙慕 on 2019/1/31. +// Copyright © 2019年 FaceUnity. All rights reserved. +// + +#import "FUMusicFilterViewController.h" + +@interface FUMusicFilterViewController () + +@property (nonatomic, strong) FUItemsView *itemsView; + +@property (nonatomic, strong, readonly) FUMusicFilterViewModel *viewModel; + +@end + +@implementation FUMusicFilterViewController + +@dynamic viewModel; + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setupView]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; +} + +-(void)setupView{ + self.itemsView = [[FUItemsView alloc] init]; + self.itemsView.delegate = self; + [self.view addSubview:self.itemsView]; + self.itemsView.items = self.viewModel.musicFilterItems; + + [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_bottom); + make.left.right.equalTo(self.view); + make.height.mas_equalTo(FUHeightIncludeBottomSafeArea(84)); + }]; + + self.itemsView.selectedIndex = 1; + + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; +} + +- (void)applicationWillResignActive { + if (self.viewModel.selectedIndex > 0 && [FURenderKit shareRenderKit].musicFilter.musicPath) { + [[FURenderKit shareRenderKit].musicFilter pause]; + } +} + +- (void)applicationDidBecomeActive { + if (self.viewModel.selectedIndex > 0 && [FURenderKit shareRenderKit].musicFilter.musicPath) { + [[FURenderKit shareRenderKit].musicFilter resume]; + } +} + +#pragma mark - FUItemsViewDelegate + +- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { + self.viewModel.selectedIndex = index; +} + +#pragma mark - FUHeadButtonViewDelegate + +- (void)headButtonViewSwitchAction:(UIButton *)btn { + [super headButtonViewSwitchAction:btn]; + if ([FURenderKit shareRenderKit].musicFilter) { + [[FURenderKit shareRenderKit].musicFilter play]; + } +} + +- (void)headButtonViewSegmentedChange:(UISegmentedControl *)sender { + [super headButtonViewSegmentedChange:sender]; + if ([FURenderKit shareRenderKit].musicFilter) { + [[FURenderKit shareRenderKit].musicFilter play]; + } +} + +@end diff --git a/FULiveDemo/Modules/MusicFilter/ViewModel/FUMusicFilterViewModel.h b/FULiveDemo/Modules/MusicFilter/ViewModel/FUMusicFilterViewModel.h new file mode 100644 index 00000000..c0e84090 --- /dev/null +++ b/FULiveDemo/Modules/MusicFilter/ViewModel/FUMusicFilterViewModel.h @@ -0,0 +1,21 @@ +// +// FUMusicFilterViewModel.h +// FULiveDemo +// +// Created by Chen on 2021/2/25. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUMusicFilterViewModel : FURenderViewModel + +@property (nonatomic, copy, readonly) NSArray *musicFilterItems; + +@property (nonatomic, assign) NSInteger selectedIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/MusicFilter/ViewModel/FUMusicFilterViewModel.m b/FULiveDemo/Modules/MusicFilter/ViewModel/FUMusicFilterViewModel.m new file mode 100644 index 00000000..ba180cc3 --- /dev/null +++ b/FULiveDemo/Modules/MusicFilter/ViewModel/FUMusicFilterViewModel.m @@ -0,0 +1,47 @@ +// +// FUMusicFilterViewModel.m +// FULiveDemo +// +// Created by Chen on 2021/2/25. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUMusicFilterViewModel.h" + +@interface FUMusicFilterViewModel () + +@property (nonatomic, copy) NSArray *musicFilterItems; + +@end + +@implementation FUMusicFilterViewModel + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex < 0 || selectedIndex >= self.musicFilterItems.count) { + return; + } + _selectedIndex = selectedIndex; + if (selectedIndex == 0) { + [FURenderKit shareRenderKit].musicFilter = nil; + } else { + NSString *path = [[NSBundle mainBundle] pathForResource:self.musicFilterItems[selectedIndex] ofType:@"bundle"]; + FUMusicFilter *musicFilter = [[FUMusicFilter alloc] initWithPath:path name:@"FUMusicFilter"]; + musicFilter.musicPath = [[NSBundle mainBundle] pathForResource:@"douyin" ofType:@"mp3"]; + [FURenderKit shareRenderKit].musicFilter = musicFilter; + } +} + +- (NSArray *)musicFilterItems { + if (!_musicFilterItems) { + _musicFilterItems = @[@"reset_item", @"douyin_01", @"douyin_02"]; + } + return _musicFilterItems; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleMusicFilter; +} + +@end diff --git a/FULiveDemo/Modules/NieLian/FUAvatarEditController.h b/FULiveDemo/Modules/NieLian/FUAvatarEditController.h deleted file mode 100644 index 56333edb..00000000 --- a/FULiveDemo/Modules/NieLian/FUAvatarEditController.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// FUAvatarEditController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" -#import "FUWholeAvatarModel.h" - - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, FUAvatarEditState) { - FUAvatarEditStateNew, - FUAvatarEditStateUpdate -}; - -typedef void(^FUAvatarEditSuccess)(BOOL isAdd); - -@interface FUAvatarEditController : FUBaseViewController - -/* 单个完整扭脸模型*/ -@property (nonatomic, strong) FUWholeAvatarModel *avatarModel; - -@property(copy ,nonatomic) FUAvatarEditSuccess returnBlock; - -@property(assign ,nonatomic) FUAvatarEditState state; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/FUAvatarEditController.m b/FULiveDemo/Modules/NieLian/FUAvatarEditController.m deleted file mode 100644 index cadbd85f..00000000 --- a/FULiveDemo/Modules/NieLian/FUAvatarEditController.m +++ /dev/null @@ -1,295 +0,0 @@ -// -// FUAvatarEditController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarEditController.h" -#import -#import "FUAvatarEditView.h" -#import "FUAvatarCustomView.h" -#import "FUAvatarPresenter.h" -#import "FUAvatarPresenter.h" -#import "FUImageHelper.h" -#import -#import "MJExtension.h" - - -@interface FUAvatarEditController () -@property(strong,nonatomic) FUAvatarEditView *avatarEditView; - -@property (nonatomic, strong) UIGestureRecognizer *panGesture; -@property (nonatomic, strong) UIGestureRecognizer *pinchGesture; -@end - -@implementation FUAvatarEditController{ - dispatch_semaphore_t semaphore; - UIImage *mCaptureImage; -} - - -- (BOOL)prefersStatusBarHidden{ - return YES; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - self.view.backgroundColor = [UIColor whiteColor]; - self.headButtonView.hidden = YES; - self.photoBtn.hidden = YES; - - /* 加载背景 */ - [[FUManager shareManager] loadBgAvatar]; - - /* 进入捏脸状态 */ - [[FUManager shareManager] enterAvatar]; - [[FUManager shareManager] clearAvatar]; - [[FUManager shareManager] lazyAvatar]; - if (_state == FUAvatarEditStateNew) { - [[FUAvatarPresenter shareManager] showAProp:[FUAvatarPresenter shareManager].wholeAvatarArray.firstObject]; - }else{ - [[FUAvatarPresenter shareManager] showAProp:self.avatarModel]; - } - - [self setupView]; -} - --(void)setupView{ - self.tipLabel.hidden = YES; - self.noTrackLabel.hidden = YES; - self.headButtonView.hidden = YES; - self.photoBtn.hidden = YES; - for (UIGestureRecognizer *g in self.renderView.gestureRecognizers) { - [self.renderView removeGestureRecognizer:g]; - } - - self.renderView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 317); - - UIButton *backBtn = [[UIButton alloc] init]; - [backBtn addTarget:self action:@selector(backBtnClick) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:backBtn]; - [backBtn setImage:[UIImage imageNamed:@"demo_icon_back"] forState:UIControlStateNormal]; - [self.view addSubview:backBtn]; - - UIButton *savaBtn = [[UIButton alloc] init]; - [savaBtn addTarget:self action:@selector(savaBtnBtnClick) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:savaBtn]; - [savaBtn setImage:[UIImage imageNamed:@"demo_icon_save"] forState:UIControlStateNormal]; - [self.view addSubview:savaBtn]; - - /* 编辑视图 */ - NSMutableArray *newModel = [NSMutableArray array]; - for ( FUAvatarModel *model in self.avatarModel.avatarModels) { - [newModel addObject:[model copy]]; - } - _avatarEditView = [[FUAvatarEditView alloc] initWithFrame:CGRectZero withData:newModel]; - _avatarEditView.delegate = self; - [self.view addSubview:_avatarEditView]; - - [_avatarEditView mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } else { - make.bottom.equalTo(self.view.mas_bottom); - } - make.right.left.equalTo(self.view); - make.height.mas_equalTo(317); - }]; - - [backBtn mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(11); - } else { - make.top.equalTo(self.view.mas_top).offset(11); - } - make.left.equalTo(self.view).offset(13); - make.height.width.mas_equalTo(46); - }]; - - [savaBtn mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(11); - } else { - make.top.equalTo(self.view.mas_top).offset(11); - } - make.right.equalTo(self.view).offset(-13); - make.height.width.mas_equalTo(46); - }]; -} - - --(void)backBtnClick{ - if (_avatarEditView.isCustomState) { - if(![self.avatarEditView.avatarCustomView isParamValueChange]){ - self.avatarEditView.isCustomState = NO; - return; - } - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:NSLocalizedString(@"返回后当前操作将不会保存?",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - }]; - [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - __weak typeof(self)weakSelf = self ; - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - weakSelf.avatarEditView.isCustomState = NO; - [weakSelf.avatarEditView.avatarCustomView resetDefaultValue]; - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [self presentViewController:alertCon animated:YES completion:^{ - }]; - return; - } - - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:NSLocalizedString(@"返回后当前操作将不会保存哦",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - }]; - [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - __weak typeof(self)weakSelf = self ; - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - [[FUManager shareManager] quitAvatar]; - - if (weakSelf.returnBlock) { - weakSelf.returnBlock(NO); - } - [weakSelf.navigationController popViewControllerAnimated:YES]; - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [self presentViewController:alertCon animated:YES completion:^{ - }]; - -} - -/* 保存模型 */ --(void)savaBtnBtnClick{ - if (_avatarEditView.isCustomState) { - _avatarEditView.isCustomState = NO; - return; - } - /* 修改modle */ - if (self.state == FUAvatarEditStateNew) { - UIImage *image = [self captureImage]; - [[FUAvatarPresenter shareManager] addWholeAvatar:self.avatarEditView.dataArray icon:image]; - }else{ - UIImage *image = [self captureImage]; - _avatarModel.image = image; - /* 修改缓存数据 */ - self.avatarModel.avatarModels = self.avatarEditView.dataArray; - } - - /* 跟新本地存储 */ - [[FUAvatarPresenter shareManager] dataWriteToFile]; - - /* 保存捏脸 */ - [[FUManager shareManager] recomputeAvatar]; - /* 提示 */ - [SVProgressHUD showSuccessWithStatus:NSLocalizedString(@"道具保存成功",nil)]; - [self.navigationController popViewControllerAnimated:YES]; - - /* 更新一级界面 */ - if (self.returnBlock) { - BOOL isAdd = self.state == FUAvatarEditStateNew ? YES:NO; - self.returnBlock(isAdd); - } -} - --(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer{ - CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) ; - [[FUManager shareManager] renderAvatarPixelBuffer:pixelBuffer]; - [self.renderView displayPixelBuffer:pixelBuffer]; - - if (!mCaptureImage && semaphore) { - CVPixelBufferRetain(pixelBuffer); - mCaptureImage = [self imageFromPixelBuffer:pixelBuffer]; - dispatch_semaphore_signal(semaphore); - CVPixelBufferRelease(pixelBuffer); - } - -} -#pragma mark - FUAvatarEditViewDelegate --(void)avatarEditViewDidCustom:(BOOL)isCustomStata{ - if (isCustomStata) { - [UIView animateWithDuration:0.25 animations:^{ - float h = self.avatarEditView.avatarCustomView.frame.size.height + 49; - self.renderView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - h); - }]; - }else{ - [UIView animateWithDuration:0.25 animations:^{ - float h = self.avatarEditView.frame.size.height; - self.renderView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - h); - }]; - } -} - --(void)viewDidLayoutSubviews{ - [super viewDidLayoutSubviews]; -// _renderView.frame = CGRectMake(0,-10, [UIScreen mainScreen].bounds.size.width, 160); - - NSLog(@"_________%@",NSStringFromCGRect(self.renderView.frame)); - -} - - - - - --(UIImage *)captureImage{ - mCaptureImage = nil; - semaphore = dispatch_semaphore_create(0); - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - return mCaptureImage; - -} - -#pragma mark - s图片处理 --(UIImage *)imageFromPixelBuffer:(CVPixelBufferRef)pixelBufferRef { - - CVPixelBufferLockBaseAddress(pixelBufferRef, 0); - - int w = (int)CVPixelBufferGetWidth(pixelBufferRef); - int h = (int)CVPixelBufferGetHeight(pixelBufferRef); - - int defaultW = w; -// int defaultH = h / 2 ; - - int x = (w - defaultW) /2; - int y = (h - defaultW) /2; - - CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBufferRef]; - - CIContext *temporaryContext = [CIContext contextWithOptions:nil]; - CGImageRef videoImage = [temporaryContext - createCGImage:ciImage - fromRect:CGRectMake(x, y, - defaultW, - defaultW)]; - - UIImage *image = [UIImage imageWithCGImage:videoImage]; - CGImageRelease(videoImage); - CVPixelBufferUnlockBaseAddress(pixelBufferRef, 0); - - return image; -} - - --(void)viewWillDisappear:(BOOL)animated{ - [super viewWillDisappear:animated]; - /* 去除背景 */ - [[FUManager shareManager] destoryItemAboutType:FUNamaHandleTypeAvtarbg]; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/FUAvatarsController.h b/FULiveDemo/Modules/NieLian/FUAvatarsController.h deleted file mode 100755 index ed6d29fb..00000000 --- a/FULiveDemo/Modules/NieLian/FUAvatarsController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FUMyItemsViewController.h -// FULiveDemo -// -// Created by L on 2018/3/1. -// Copyright © 2018年 刘洋. All rights reserved. -// - -#import - -@protocol FUAvatarsControllerDelegate - -@optional -- (void)myItemViewDidDelete; - -@end - -@interface FUAvatarsController : UIViewController - -@property (nonatomic, assign) idmDelegate ; -@end diff --git a/FULiveDemo/Modules/NieLian/FUAvatarsController.m b/FULiveDemo/Modules/NieLian/FUAvatarsController.m deleted file mode 100755 index c4bce193..00000000 --- a/FULiveDemo/Modules/NieLian/FUAvatarsController.m +++ /dev/null @@ -1,259 +0,0 @@ -// -// FUMyItemsViewController.m -// FULiveDemo -// -// Created by L on 2018/3/1. -// Copyright © 2018年 刘洋. All rights reserved. -// - -#import "FUAvatarsController.h" -#import "FUAvatarPresenter.h" -#import "FUYItuMeItemCell.h" -#import "FUWholeAvatarModel.h" - -@interface FUAvatarsController () - -@property (weak, nonatomic) IBOutlet UICollectionView *collectionView; -@property (weak, nonatomic) IBOutlet UIButton *deleteBtn; -@property (weak, nonatomic) IBOutlet UIImageView *noItemImage; -@property (weak, nonatomic) IBOutlet UILabel *noItemLabel; - -@property (weak, nonatomic) IBOutlet UIButton *selectAllBtn; - -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *iXBottom; - -@property (nonatomic, strong) NSMutableArray *selectedIndex ; -@property (nonatomic, strong) NSMutableArray *dataArray; -@property (weak, nonatomic) IBOutlet UIView *bottomView; -@property (weak, nonatomic) IBOutlet UILabel *mTitleLabel; -@end - -@implementation FUAvatarsController - -- (void)viewDidLoad { - [super viewDidLoad]; - -// self.noItemImage.hidden = [FUManager shareManager].myStickers.count != 0; -// self.noItemLabel.hidden = [FUManager shareManager].myStickers.count != 0; - self.noItemLabel.text = NSLocalizedString(@"暂无制作道具哦~",nil); - self.mTitleLabel.text = NSLocalizedString(@"删除道具",nil); - [self.selectAllBtn setTitle:NSLocalizedString(@"全选",nil) forState:UIControlStateNormal]; - [self.deleteBtn setTitle:NSLocalizedString(@"删除",nil) forState:UIControlStateNormal]; - self.selectedIndex = [NSMutableArray arrayWithCapacity:1]; - - [self.collectionView registerClass:[FUYItuMeItemCell class] forCellWithReuseIdentifier:@"YItuMeItemCell"]; - _dataArray = [NSMutableArray array]; - - for (int i = 0; i < [FUAvatarPresenter shareManager].wholeAvatarArray.count ; i ++ ) { - if (i < defaultAvatarNum) { - continue; - } - [_dataArray addObject:[FUAvatarPresenter shareManager].wholeAvatarArray[i]]; - } - if(_dataArray.count == 0){ - _noItemImage.hidden = NO; - _noItemLabel.hidden = NO; - } - -// if ([[FULiveTool getPlatformtype] isEqualToString:@"iPhone X"]) { -// self.iXBottom.constant = 34 ; -// [self.view layoutIfNeeded]; -// } -} - - //全选 -- (IBAction)selectAllItems:(UIButton *)sender { - - if (_dataArray.count == 0) { - return ; - } - - if (_dataArray.count == self.selectedIndex.count) { - - [self.selectedIndex removeAllObjects]; - - self.selectAllBtn.titleLabel.text =NSLocalizedString(@"全选",nil); - [self.selectAllBtn setTitle:NSLocalizedString(@"全选",nil) forState:UIControlStateNormal ]; - }else { - - [self.selectedIndex removeAllObjects]; - for (int i = 0 ; i < _dataArray.count; i ++) { - [self.selectedIndex addObject:@(i)]; - } - - self.selectAllBtn.titleLabel.text = NSLocalizedString(@"取消",nil); - [self.selectAllBtn setTitle:NSLocalizedString(@"取消",nil) forState:UIControlStateNormal ]; - } - [self deleteBtnRefreshTitle]; - [self.collectionView reloadData ]; - -} - -// 删除 -- (IBAction)deleteAction:(UIButton *)sender { - if (self.selectedIndex.count == 0) { - return ; - } - - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:NSLocalizedString(@"确定删除所选中的道具?",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - }]; - [cancleAction setValue:[self colorWithHexColorString:@"2C2E30"] forKey:@"titleTextColor"]; - - __weak typeof(self)weakSelf = self ; - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - [weakSelf certainDeleteAction ]; - }]; - [certainAction setValue:[self colorWithHexColorString:@"869DFF"] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [self presentViewController:alertCon animated:YES completion:^{ - }]; -} - -- (void)certainDeleteAction { - - NSMutableArray *temArray = [NSMutableArray array]; - for (NSNumber *num in self.selectedIndex) { - NSInteger index = [num integerValue]; - [temArray addObject:_dataArray[index]]; - } - for (FUWholeAvatarModel *obj in temArray) { - [[FUAvatarPresenter shareManager].wholeAvatarArray removeObject:obj]; - [_dataArray removeObject:obj]; - } - - [self.collectionView reloadData]; - [self.selectedIndex removeAllObjects]; - - self.selectAllBtn.titleLabel.text = NSLocalizedString(@"全选",nil) ; - [self.selectAllBtn setTitle:NSLocalizedString(@"全选",nil) forState:UIControlStateNormal ]; - - [self deleteBtnRefreshTitle]; - - if(_dataArray.count == 0){ - _noItemImage.hidden = NO; - _noItemLabel.hidden = NO; - }else{ - _noItemImage.hidden = YES; - _noItemLabel.hidden = YES; - } - /* 更新存储 */ - [[FUAvatarPresenter shareManager] dataWriteToFile]; - if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(myItemViewDidDelete)]) { - [self.mDelegate myItemViewDidDelete]; - } -} - -- (void)deleteBtnRefreshTitle { - - if (self.selectedIndex.count == 0) { - self.bottomView.backgroundColor = [UIColor colorWithRed:198/255.0 green:198/255.0 blue:198/255.0 alpha:1.0]; - self.deleteBtn.titleLabel.text = NSLocalizedString(@"删除",nil); - [self.deleteBtn setTitle:NSLocalizedString(@"删除",nil) forState:UIControlStateNormal]; - }else { - self.bottomView.backgroundColor = [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0]; - self.deleteBtn.titleLabel.text = [NSString stringWithFormat:NSLocalizedString(@"删除(%ld)",nil), (unsigned long)self.selectedIndex.count]; - [self.deleteBtn setTitle:[NSString stringWithFormat:NSLocalizedString(@"删除(%ld)",nil), (unsigned long)self.selectedIndex.count] forState:UIControlStateNormal]; - } -} - -- (IBAction)dismissSelf:(UIButton *)sender { - - [self.navigationController popViewControllerAnimated:YES]; -} -#pragma mark ---- UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _dataArray.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUYItuMeItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"YItuMeItemCell" forIndexPath:indexPath]; - FUWholeAvatarModel *modle = _dataArray[indexPath.row]; - cell.itemImage.image = modle.image; - - if ([self.selectedIndex containsObject:@(indexPath.row)]) { - cell.contentView.layer.borderWidth = 1.5; - cell.contentView.layer.cornerRadius = 2.5; - cell.contentView.layer.borderColor = [self colorWithHexColorString:@"869DFF"].CGColor; - }else { - cell.contentView.layer.borderWidth = 0; - } - - - return cell ; -} - - -#pragma mark ---- UICollectionViewDelegate -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - if ([self.selectedIndex containsObject:@(indexPath.row)]) { - [self.selectedIndex removeObject:@(indexPath.row)]; - }else { - [self.selectedIndex addObject:@(indexPath.row)]; - } - - [collectionView reloadData]; - - self.deleteBtn.titleLabel.text = [NSString stringWithFormat:NSLocalizedString(@"删除(%ld)",nil), (unsigned long)self.selectedIndex.count]; - [self.deleteBtn setTitle:[NSString stringWithFormat:NSLocalizedString(@"删除(%ld)",nil), (unsigned long)self.selectedIndex.count] forState:UIControlStateNormal]; - - if (self.selectedIndex.count == _dataArray.count) { - - self.selectAllBtn.titleLabel.text = NSLocalizedString(@"取消",nil) ; - [self.selectAllBtn setTitle:NSLocalizedString(@"取消",nil) forState:UIControlStateNormal ]; - }else { - - self.selectAllBtn.titleLabel.text = NSLocalizedString(@"全选",nil) ; - [self.selectAllBtn setTitle:NSLocalizedString(@"全选",nil) forState:UIControlStateNormal ]; - } - - if (self.selectedIndex.count == 0) { - self.bottomView.backgroundColor = [UIColor colorWithRed:198/255.0 green:198/255.0 blue:198/255.0 alpha:1.0]; - }else { - self.bottomView.backgroundColor = [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0]; - } -} -// -//- (void)didReceiveMemoryWarning { -// [super didReceiveMemoryWarning]; -//} - -#pragma mark 十六进制颜色 --(UIColor *)colorWithHexColorString:(NSString *)hexColorString{ - return [self colorWithHexColorString:hexColorString alpha:1.0f]; -} - -#pragma mark 十六进制颜色 -- (UIColor *)colorWithHexColorString:(NSString *)hexColorString alpha:(float)alpha{ - - unsigned int red, green, blue; - - NSRange range; - - range.length =2; - - range.location =0; - - [[NSScanner scannerWithString:[hexColorString substringWithRange:range]]scanHexInt:&red]; - - range.location =2; - - [[NSScanner scannerWithString:[hexColorString substringWithRange:range]]scanHexInt:&green]; - - range.location =4; - - [[NSScanner scannerWithString:[hexColorString substringWithRange:range]]scanHexInt:&blue]; - - UIColor *color = [UIColor colorWithRed:(float)(red/255.0f)green:(float)(green/255.0f)blue:(float)(blue/255.0f)alpha:alpha]; - - return color; -} - -@end diff --git a/FULiveDemo/Modules/NieLian/FUAvatarsController.xib b/FULiveDemo/Modules/NieLian/FUAvatarsController.xib deleted file mode 100755 index 7c3efdf0..00000000 --- a/FULiveDemo/Modules/NieLian/FUAvatarsController.xib +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/NieLian/FUFacepupController.h b/FULiveDemo/Modules/NieLian/FUFacepupController.h deleted file mode 100644 index c2fd529f..00000000 --- a/FULiveDemo/Modules/NieLian/FUFacepupController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUFacepupController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUFacepupController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/FUFacepupController.m b/FULiveDemo/Modules/NieLian/FUFacepupController.m deleted file mode 100644 index c9fb75d9..00000000 --- a/FULiveDemo/Modules/NieLian/FUFacepupController.m +++ /dev/null @@ -1,188 +0,0 @@ -// -// FUFacepupController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUFacepupController.h" -#import "FUAvatarCollectionView.h" -#import "FUAvatarEditController.h" -#import "FUManager.h" -#import "FUAvatarsController.h" -#import "FUAvatarPresenter.h" -#import "FUWholeAvatarModel.h" - -@interface FUFacepupController () -@property(strong,nonatomic) FUAvatarCollectionView *avatarCollectionView; - -@property(strong,nonatomic) UIButton *addBtn; - -@end - -@implementation FUFacepupController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - [[FUManager shareManager] loadAvatarBundel]; - /* 进入捏脸 */ - [[FUManager shareManager] enterAvatar]; - - [self setupView]; -} - --(void)setupView{ - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -50); - /* 删除按钮 */ - UIButton *deletBtn = [[UIButton alloc] init]; - deletBtn.titleLabel.font = [UIFont systemFontOfSize:11]; - [deletBtn setTitle:NSLocalizedString(@"删除模型", nil) forState:UIControlStateNormal]; - [deletBtn setTitleColor:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forState:UIControlStateNormal]; - [deletBtn addTarget:self action:@selector(pushDeletView) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:deletBtn]; - deletBtn.layer.backgroundColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0].CGColor; - deletBtn.layer.cornerRadius = 16; - deletBtn.layer.shadowColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.15].CGColor; - deletBtn.layer.shadowOffset = CGSizeMake(0,0); - deletBtn.layer.shadowOpacity = 1; - deletBtn.layer.shadowRadius = 4; - - /* 新建捏脸 */ - self.addBtn = [[UIButton alloc] init]; - _addBtn.layer.backgroundColor = [UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0].CGColor; - _addBtn.layer.cornerRadius = 16; - _addBtn.titleLabel.font = [UIFont systemFontOfSize:11]; - [_addBtn setTitle:NSLocalizedString(@"新建模型", nil) forState:UIControlStateNormal]; - [_addBtn setTitleColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0] forState:UIControlStateNormal]; - [_addBtn addTarget:self action:@selector(pushFaceEditView) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:_addBtn]; - - /* collectionView */ - _avatarCollectionView = [[FUAvatarCollectionView alloc] init]; - _avatarCollectionView.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - _avatarCollectionView.delegate = self; - [_avatarCollectionView updataCurrentSel:1]; - [self.view addSubview:_avatarCollectionView]; - - /* 添加约束 */ - [_avatarCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } else { - make.bottom.equalTo(self.view.mas_bottom); - } - make.right.left.equalTo(self.view); - make.height.mas_equalTo(84); - }]; - - [deletBtn mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(_avatarCollectionView.mas_top).offset(-18); - } else { - make.bottom.equalTo(_avatarCollectionView.mas_top).offset(-18); - } - make.left.equalTo(self.view).offset(17); - make.height.mas_equalTo(32); - make.width.mas_equalTo(84); - }]; - - [_addBtn mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(_avatarCollectionView.mas_top).offset(-18); - } else { - make.bottom.equalTo(_avatarCollectionView.mas_top).offset(-18); - } - make.right.equalTo(self.view).offset(-17); - make.height.mas_equalTo(32); - make.width.mas_equalTo(84); - }]; -} - --(void)pushDeletView{ - dispatch_async(dispatch_get_main_queue(), ^{ - FUAvatarsController *vc = [[FUAvatarsController alloc] init]; - vc.mDelegate = self; - [self.navigationController pushViewController:vc animated:YES]; - }); -} - --(void)pushFaceEditView{ - [[FUManager shareManager] avatarBundleAddRender:YES]; - if (![[FUManager shareManager] avatarBundleIsload]) { - return; - } - FUAvatarEditController *vc = [[FUAvatarEditController alloc] init]; - if (_avatarCollectionView.selIndex == 0 || _avatarCollectionView.selIndex == 1) { - vc.state = FUAvatarEditStateNew; - FUWholeAvatarModel *model = [FUAvatarPresenter shareManager].wholeAvatarArray[0]; - vc.avatarModel = model; - }else{ - vc.state = FUAvatarEditStateUpdate; - int index = (int)_avatarCollectionView.selIndex - 1; - FUWholeAvatarModel *model = [FUAvatarPresenter shareManager].wholeAvatarArray[index]; - vc.avatarModel = model; - } - - __weak typeof(self)weakSelf = self ; - vc.returnBlock = ^(BOOL isAdd) { - if (isAdd) { - /* 刷新选中最后一个 */ - [weakSelf.avatarCollectionView updataCurrentSel:(int)[FUAvatarPresenter shareManager].wholeAvatarArray.count]; - }else{ - [weakSelf.avatarCollectionView updataCurrentSel:(int)weakSelf.avatarCollectionView.selIndex]; - } - - }; - [self.navigationController pushViewController:vc animated:YES]; -} - -#pragma mark - FUAvatarsControllerDelegate --(void)myItemViewDidDelete{ - /* 刷新选中最后一个 */ - [self.avatarCollectionView updataCurrentSel:(int)[FUAvatarPresenter shareManager].wholeAvatarArray.count]; -} - - --(void)avatarCollectionViewDidSel:(int)index{ - if (index == 0) { -// [[FUManager shareManager] destoryItemAboutType:FUNamaHandleTypeAvtarHead]; - [[FUManager shareManager] avatarBundleAddRender:NO]; - [[FUManager shareManager] destoryItemAboutType:FUNamaHandleTypeAvtarHiar]; - [_addBtn setTitle:NSLocalizedString(@"新建模型", nil) forState:UIControlStateNormal]; - _addBtn.hidden = YES; - return; - } - _addBtn.hidden = NO; - [[FUManager shareManager] avatarBundleAddRender:YES]; - [[FUManager shareManager] enterAvatar]; - [[FUManager shareManager] clearAvatar]; - FUWholeAvatarModel *model = nil; - if (index == 0 || index == 1) { - model = [FUAvatarPresenter shareManager].wholeAvatarArray[0]; - [_addBtn setTitle:NSLocalizedString(@"新建模型", nil) forState:UIControlStateNormal]; - }else{ - model = [FUAvatarPresenter shareManager].wholeAvatarArray[index - 1]; - [_addBtn setTitle:NSLocalizedString(@"编辑模型", nil) forState:UIControlStateNormal]; - } - [[FUAvatarPresenter shareManager] showAProp:model]; - [[FUManager shareManager] recomputeAvatar]; -} - -#pragma mark - 重载 --(BOOL)needSetMultiSamples{ - return YES; -} - --(void)dealloc{ - [[FUManager shareManager] destoryItemAboutType:FUNamaHandleTypeAvtarbg]; - [[FUManager shareManager] destoryItemAboutType:FUNamaHandleTypeAvtarHead]; - [[FUManager shareManager] destoryItemAboutType:FUNamaHandleTypeAvtarHiar]; - /* 退捏脸出 */ - [[FUManager shareManager] recomputeAvatar]; - [[FUManager shareManager] quitAvatar]; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/Model/FUAvatarModel.h b/FULiveDemo/Modules/NieLian/Model/FUAvatarModel.h deleted file mode 100644 index e8010cc6..00000000 --- a/FULiveDemo/Modules/NieLian/Model/FUAvatarModel.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// FUAvatarModel.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import - -typedef NS_ENUM(NSUInteger, FUAvatarType) { - FUAvatarTypeHair = 0, - FUAvatarTypeFace , - FUAvatarTypeEye, - FUAvatarTypeMouth, - FUAvatarTypeNose -}; - - -NS_ASSUME_NONNULL_BEGIN - -@interface FUAvatarColor : NSObject - -@property (nonatomic, assign) double r; -@property (nonatomic, assign) double g; -@property (nonatomic, assign) double b; -@property (nonatomic, assign) NSInteger intensity; -@property (nonatomic, copy) NSString* param; - -@end - -@interface FUAvatarParam: NSObject - -@property (nonatomic, copy) NSString* paramS; -@property (nonatomic, copy) NSString* paramB; -@property (nonatomic, copy) NSString* icon; -@property (nonatomic, copy) NSString* icon_sel; -@property (nonatomic, copy) NSString* title; -@property (nonatomic, assign) float value; - -@property (nonatomic,assign) BOOL haveCustom; -@end - - -@interface FUBundelModel : NSObject -@property (nonatomic, copy) NSString* bundleName; -@property (nonatomic, copy) NSString* iconName; -@property (nonatomic, copy) NSString* color; -@property (nonatomic, strong) NSArray *params; - -@end - - -@interface FUAvatarModel : NSObject - -@property (nonatomic, assign) FUAvatarType avatarType; -@property (nonatomic, copy) NSString* title; -@property (nonatomic,assign) BOOL haveCustom; -@property (nonatomic, assign) int colorsSelIndex; -@property (nonatomic, copy) NSString *colorsParam; -@property (nonatomic,strong) NSArray *colors; -@property (nonatomic, assign) int bundleSelIndex; -@property (nonatomic, strong) NSArray *bundles; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/Model/FUAvatarModel.m b/FULiveDemo/Modules/NieLian/Model/FUAvatarModel.m deleted file mode 100644 index ac930259..00000000 --- a/FULiveDemo/Modules/NieLian/Model/FUAvatarModel.m +++ /dev/null @@ -1,207 +0,0 @@ -// -// FUAvatarModel.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarModel.h" -#import - - -@implementation FUAvatarColor - //归档序列化 -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super init]) { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [self setValue:[aDecoder decodeObjectForKey:key] forKey:key]; - } - free(properties); - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [aCoder encodeObject:[self valueForKey:key] forKey:key]; - } - free(properties); -} - --(id)copyWithZone:(NSZone *)zone{ - FUAvatarColor *color = [[FUAvatarColor alloc] init]; - color.r = self.r; - color.g = self.g; - color.b = self.b; - color.intensity = self.intensity; - return color; -} - -@end - - -@implementation FUAvatarParam - //归档序列化 -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super init]) { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [self setValue:[aDecoder decodeObjectForKey:key] forKey:key]; - } - free(properties); - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [aCoder encodeObject:[self valueForKey:key] forKey:key]; - } - free(properties); -} - --(id)copyWithZone:(NSZone *)zone{ - FUAvatarParam *parm = [[FUAvatarParam alloc] init]; - parm.paramS = self.paramS; - parm.paramB = self.paramB; - parm.icon = self.icon; - parm.icon_sel = self.icon_sel; - parm.title = self.title; - parm.value = self.value; - parm.haveCustom = self.haveCustom; - return parm; -} - -@end -@implementation FUBundelModel -+ (NSDictionary *)objectClassInArray{ - return @{ - @"params" : @"FUAvatarParam" - }; -} - - //归档序列化 -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super init]) { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [self setValue:[aDecoder decodeObjectForKey:key] forKey:key]; - } - free(properties); - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [aCoder encodeObject:[self valueForKey:key] forKey:key]; - } - free(properties); -} - - --(id)copyWithZone:(NSZone *)zone{ - FUBundelModel *bundlelModel = [[FUBundelModel alloc] init]; - bundlelModel.bundleName = self.bundleName; - bundlelModel.iconName = self.iconName; - bundlelModel.color = self.color; - NSMutableArray *params = [NSMutableArray array]; - for (FUAvatarParam *modle in self.params) { - [params addObject:[modle copy]]; - } - bundlelModel.params = params; - - return bundlelModel; -} - -@end - -@implementation FUAvatarModel - -+ (NSDictionary *)objectClassInArray{ - return @{ - @"bundles" : @"FUBundelModel", - @"colors" : @"FUAvatarColor", - }; -} - - - //归档序列化 -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super init]) { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [self setValue:[aDecoder decodeObjectForKey:key] forKey:key]; - } - free(properties); - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - u_int count; - objc_property_t *properties = class_copyPropertyList([self class], &count); - for (int i = 0; i < count; i++) { - const char *propertyName = property_getName(properties[i]); - NSString *key = [NSString stringWithUTF8String:propertyName]; - [aCoder encodeObject:[self valueForKey:key] forKey:key]; - } - free(properties); -} - --(id)copyWithZone:(NSZone *)zone{ - FUAvatarModel *modle = [[FUAvatarModel alloc] init]; - modle.avatarType = self.avatarType; - modle.title = self.title; - modle.haveCustom = self.haveCustom; - modle.colorsSelIndex = self.colorsSelIndex; - modle.colorsParam = self.colorsParam; - modle.bundleSelIndex = self.bundleSelIndex; - NSMutableArray *colors = [NSMutableArray array]; - NSMutableArray *bundles = [NSMutableArray array]; - - for (FUAvatarColor *modle0 in self.colors) { - [colors addObject:[modle0 copy]]; - } - modle.colors = colors; - - for (FUAvatarColor *modle0 in self.bundles) { - [bundles addObject:[modle0 copy]]; - } - modle.bundles = bundles; - - return modle; -} - -@end - - - - - diff --git a/FULiveDemo/Modules/NieLian/Model/FUWholeAvatarModel.h b/FULiveDemo/Modules/NieLian/Model/FUWholeAvatarModel.h deleted file mode 100644 index 51b62a0d..00000000 --- a/FULiveDemo/Modules/NieLian/Model/FUWholeAvatarModel.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FUWholeAvatarModel.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/22. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import -#import "FUAvatarModel.h" -#import - -/* 整体模型 */ - -NS_ASSUME_NONNULL_BEGIN - -@interface FUWholeAvatarModel : NSObject - - -@property (nonatomic, strong) UIImage* image; - -@property (nonatomic, strong) NSArray *avatarModels; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/Model/FUWholeAvatarModel.m b/FULiveDemo/Modules/NieLian/Model/FUWholeAvatarModel.m deleted file mode 100644 index c8289883..00000000 --- a/FULiveDemo/Modules/NieLian/Model/FUWholeAvatarModel.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUWholeAvatarModel.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/22. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUWholeAvatarModel.h" - -@implementation FUWholeAvatarModel -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:_image forKey:@"image"]; - [coder encodeObject:_avatarModels forKey:@"avatarModel"]; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super init]; - if (self) { - _image = [coder decodeObjectForKey:@"image"]; - _avatarModels = [coder decodeObjectForKey:@"avatarModel"]; - } - return self; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/Presenter/FUAvatarPresenter.h b/FULiveDemo/Modules/NieLian/Presenter/FUAvatarPresenter.h deleted file mode 100644 index 40d4d2ec..00000000 --- a/FULiveDemo/Modules/NieLian/Presenter/FUAvatarPresenter.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// FUAvatarPresenter.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import -#import - -#define defaultAvatarNum 1 - -NS_ASSUME_NONNULL_BEGIN - -@class FUWholeAvatarModel; -@class FUAvatarModel; - -@interface FUAvatarPresenter : NSObject -+ (FUAvatarPresenter *)shareManager; - -/* 所有完整扭脸模型 */ -@property (nonatomic, strong) NSMutableArray *wholeAvatarArray; - --(void)addWholeAvatar:(NSArray *)array icon:(UIImage *)image; - --(void)dataWriteToFile; -/* 展示一个模式 */ --(void)showAProp:(FUWholeAvatarModel *)wholeAvatarModel; - -/* 保存图片 */ -+ (NSString *)saveImg:(UIImage *)image withVideoMid:(NSString *)imgName; - /* 获取图片 */ -+ (UIImage *)loadImageWithVideoMid:(NSString *)imgName; - -/* 重置人脸初始化模型 */ --(void)restAvatarModelData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/Presenter/FUAvatarPresenter.m b/FULiveDemo/Modules/NieLian/Presenter/FUAvatarPresenter.m deleted file mode 100644 index dbe6d8e9..00000000 --- a/FULiveDemo/Modules/NieLian/Presenter/FUAvatarPresenter.m +++ /dev/null @@ -1,170 +0,0 @@ -// -// FUAvatarPresenter.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarPresenter.h" -#import "FUAvatarModel.h" -#import "FUWholeAvatarModel.h" -#import "MJExtension.h" -#import "FUManager.h" -#import "FUAvatarModel.h" -@interface FUAvatarPresenter() -/* 单个完整扭脸模型 (包含脸,鼻子,眼,嘴,头发)*/ -@property (nonatomic, strong) NSMutableArray *dataDataArray; - -@end; -@implementation FUAvatarPresenter -static FUAvatarPresenter *shareManager = NULL; - -+ (FUAvatarPresenter *)shareManager -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - shareManager = [[FUAvatarPresenter alloc] init]; - - - }); - - return shareManager; -} - --(instancetype)init{ - if (self = [super init]) { - - [self restAvatarModelData]; - self.wholeAvatarArray = [NSMutableArray array]; //[self loadWholeAvatarArray]; - UIImage *image = [UIImage imageNamed:@"demo_icon_corner_marker"]; - [self addWholeAvatar:self.dataDataArray icon:image]; -// [self addWholeAvatar:self.dataDataArray icon:image]; - [self.wholeAvatarArray addObjectsFromArray:[self loadWholeAvatarArray]]; - - } - return self; -} - --(void)restAvatarModelData{ - /* 模板 */ - NSString *wholePath=[[NSBundle mainBundle] pathForResource:@"avatar" ofType:@"json"]; - NSData *wholeData=[[NSData alloc] initWithContentsOfFile:wholePath]; - NSDictionary *wholeDic=[NSJSONSerialization JSONObjectWithData:wholeData options:NSJSONReadingMutableContainers error:nil]; - self.dataDataArray = [FUAvatarModel mj_objectArrayWithKeyValuesArray:wholeDic[@"data"]]; -} - -#pragma mark - 保存 - --(void)dataWriteToFile{//只写入自己创建的道具 - NSArray *arr = [FUAvatarPresenter shareManager].wholeAvatarArray; - if (defaultAvatarNum >= arr.count) { - [[NSFileManager defaultManager] removeItemAtPath:[FUAvatarPresenter dataPath] error:nil]; - return; - } - NSMutableArray *writeArr = [NSMutableArray array]; - for (int i = 0; i < arr.count; i ++) { - if (i >= defaultAvatarNum) { - [writeArr addObject:arr[i]]; - } - } - - NSString *path = [FUAvatarPresenter dataPath]; - [NSKeyedArchiver archiveRootObject:writeArr toFile:path]; -} - --(NSMutableArray *)loadWholeAvatarArray{ - NSString *path = [FUAvatarPresenter dataPath]; - NSMutableArray *newArr = [[NSKeyedUnarchiver unarchiveObjectWithFile:path] mutableCopy]; - - return newArr; -} - -+(NSString *)dataPath{ - NSString *paths =[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; - NSString *path = [paths stringByAppendingString:@"/wholeAvatar.plist"]; - return path; -} - -#pragma mark - 对外接口 - --(void)addWholeAvatar:(NSArray *)array icon:(UIImage *)image{ - FUWholeAvatarModel *model = [[FUWholeAvatarModel alloc] init]; - NSMutableArray *newArray = [NSMutableArray array]; - for (FUAvatarModel *model in array) { - [newArray addObject:[model copy]]; - } - model.avatarModels = newArray; - model.image = image; - - [self.wholeAvatarArray addObject:model]; -} - - --(void)showAProp:(FUWholeAvatarModel *)wholeAvatarModel{ - - for (int i = (int)wholeAvatarModel.avatarModels.count - 1; i >= 0; i --) { - FUAvatarModel *avatarModel = wholeAvatarModel.avatarModels[i]; - int colorIndex = avatarModel.colorsSelIndex; - int bundleIndex = avatarModel.bundleSelIndex; - - /* bind美发道具 */ - if (avatarModel.avatarType == FUAvatarTypeHair) { - [[FUManager shareManager] avatarBindHairItem:avatarModel.bundles[bundleIndex].bundleName]; - - /* 重设置颜色 */ - FUAvatarColor *colorModel = avatarModel.colors[colorIndex]; - [[FUManager shareManager] setAvatarHairColorParam:avatarModel.colorsParam colorWithRed:colorModel.r green:colorModel.g blue:colorModel.b intensity:(int)colorModel.intensity]; - - continue; - } - - if (avatarModel.bundles[bundleIndex].params.count > 0) {//参数设置类型 - for (FUAvatarParam *model0 in avatarModel.bundles[bundleIndex].params) { - if ([model0.paramS isEqualToString:@""]) { - continue; - } - if (model0.value < 0) { - [[FUManager shareManager] setAvatarParam:model0.paramS value:fabsf(model0.value)]; - [[FUManager shareManager] setAvatarParam:model0.paramB value:0]; - }else{ - [[FUManager shareManager] setAvatarParam:model0.paramS value:0]; - [[FUManager shareManager] setAvatarParam:model0.paramB value:fabsf(model0.value)]; - } - } - - } - - if (FUAvatarTypeNose != avatarModel.avatarType) { - /* 重设置颜色 */ - FUAvatarColor *colorModel = avatarModel.colors[colorIndex]; - [[FUManager shareManager] setAvatarItemParam:avatarModel.colorsParam colorWithRed:colorModel.r green:colorModel.g blue:colorModel.b]; - } - } -} - - -+ (NSString *)saveImg:(UIImage *)image withVideoMid:(NSString *)imgName{ - - if (!image) { - return nil; - } - if (!imgName) { - return nil; - } - NSData *imagedata=UIImagePNGRepresentation(image); - //NSData *imagedata=UIImageJEPGRepresentation(m_imgFore,1.0); - NSString *savedImagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imgName]]; - [imagedata writeToFile:savedImagePath atomically:YES]; - return savedImagePath; -} - -+(UIImage *)loadImageWithVideoMid:(NSString *)imgName{ - NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imgName]]; - - UIImage *img = [UIImage imageWithContentsOfFile:imagePath]; - return img; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarBottomColletionView.h b/FULiveDemo/Modules/NieLian/View/FUAvatarBottomColletionView.h deleted file mode 100644 index aefd1919..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarBottomColletionView.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// FUAvatarBottomColletionView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import -#import "FUAvatarModel.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUAvatarBottomColletionViewDelegate - -@optional - -- (void)avatarBottomColletionDidSelectedIndex:(NSInteger)index; -@end - - - -@interface FUAvatarBottomBottomCell : UICollectionViewCell - -@property (strong, nonatomic) UILabel *botlabel; - -@property (assign, nonatomic) BOOL isSel; - - -@end - -@interface FUAvatarBottomColletionView : UIView - -@property (nonatomic, strong) NSArray *dataArray; /**道具分类数组*/ - -@property (assign, nonatomic) BOOL isSel; - -@property (nonatomic, assign) iddelegate ; - -@property (assign, nonatomic,readonly) NSInteger selIndex; -@end - - - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarBottomColletionView.m b/FULiveDemo/Modules/NieLian/View/FUAvatarBottomColletionView.m deleted file mode 100644 index 969d3320..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarBottomColletionView.m +++ /dev/null @@ -1,110 +0,0 @@ -// -// FUAvatarBottomColletionView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarBottomColletionView.h" - -#pragma mark - FUAvatarBottomBottomCell -@implementation FUAvatarBottomBottomCell -- (id)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self){ - - _botlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 60, 20)]; - _botlabel.textAlignment = NSTextAlignmentCenter; - _botlabel.textColor = [UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0]; - _botlabel.font = [UIFont systemFontOfSize:13]; - self.botlabel.center = self.contentView.center; - [self.contentView addSubview:_botlabel]; - } - - return self; -} - --(void)setIsSel:(BOOL)isSel{ - _isSel = isSel; - if (isSel) { - _botlabel.textColor = [UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0]; - }else{ - _botlabel.textColor = [UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0]; - } -} -@end - - -#pragma mark - FUAvatarBottomColletionView - -@interface FUAvatarBottomColletionView() - -@property (strong, nonatomic) UICollectionView *collection; - -@property (assign, nonatomic) NSInteger selIndex; -@end - -@implementation FUAvatarBottomColletionView - -static NSString *cellID = @"bottomCell"; - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self){ - self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(60, 49); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, frame.size.height) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - [_collection registerClass:[FUAvatarBottomBottomCell class] forCellWithReuseIdentifier:cellID]; - _collection.backgroundColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - - } - - return self; -} - - --(void)setDataArray:(NSArray *)dataArray{ - _dataArray = dataArray; - [self.collection reloadData]; -} - - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _dataArray.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUAvatarBottomBottomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - - cell.botlabel.text = NSLocalizedString(self.dataArray[indexPath.row].title, nil); - cell.isSel = _selIndex == indexPath.row ? YES:NO; - - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - _selIndex = indexPath.row; - [_collection reloadData]; - if ([self.delegate respondsToSelector:@selector(avatarBottomColletionDidSelectedIndex:)]) { - [self.delegate avatarBottomColletionDidSelectedIndex:_selIndex]; - } -} - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarCell.h b/FULiveDemo/Modules/NieLian/View/FUAvatarCell.h deleted file mode 100644 index 7afb7f6d..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarCell.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FUCollectionViewCell.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUAvatarCell : UICollectionViewCell -@property (strong, nonatomic) UIImageView *image0; -@property (strong, nonatomic) UIImageView *image1; - -@property (assign, nonatomic) BOOL isSel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarCell.m b/FULiveDemo/Modules/NieLian/View/FUAvatarCell.m deleted file mode 100644 index 4c9802cd..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarCell.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// FUCollectionViewCell.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarCell.h" - -@interface FUAvatarCell() -@property (strong, nonatomic) CAShapeLayer *dottedLineBorder; -@end -@implementation FUAvatarCell - - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - self.backgroundColor = [UIColor whiteColor]; - self.layer.cornerRadius = 4; - self.clipsToBounds = YES; - - _image0 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)]; - [self.contentView addSubview:_image0]; - - _image1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)]; - [self.contentView addSubview:_image1]; - - _dottedLineBorder = [[CAShapeLayer alloc] init]; - _dottedLineBorder.frame = self.bounds; - [_dottedLineBorder setLineWidth:2]; - [_dottedLineBorder setFillColor:[UIColor clearColor].CGColor]; - - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:5]; - _dottedLineBorder.path = path.CGPath; - [self.contentView.layer addSublayer:_dottedLineBorder]; - } - - return self; -} --(void)setIsSel:(BOOL)isSel{ - _isSel = isSel; - if (isSel) { - [_dottedLineBorder setStrokeColor:[UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0].CGColor]; - }else{ - [_dottedLineBorder setStrokeColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0].CGColor]; - } -} -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarCollectionView.h b/FULiveDemo/Modules/NieLian/View/FUAvatarCollectionView.h deleted file mode 100644 index 1c945665..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarCollectionView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// FUAvatarCollectionView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUAvatarCollectionViewDelegate - -@optional --(void)avatarCollectionViewDidSel:(int)index; - -@end - -@interface FUAvatarCollectionView : UIView -@property (strong, nonatomic,readonly) UICollectionView *collection; - -@property (nonatomic, assign) iddelegate; - -@property (assign, nonatomic,readonly) NSInteger selIndex; - -/* 设置默认 */ --(void)updataCurrentSel:(int)index; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarCollectionView.m b/FULiveDemo/Modules/NieLian/View/FUAvatarCollectionView.m deleted file mode 100644 index 1b0fd984..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarCollectionView.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// FUAvatarCollectionView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarCollectionView.h" -#import -#import "FUAvatarCell.h" -#import "FUManager.h" -#import "FUAvatarPresenter.h" -#import "FUWholeAvatarModel.h" - -@interface FUAvatarCollectionView() -@property (strong, nonatomic) UICollectionView *collection; - -@property (assign, nonatomic) NSInteger selIndex; -@end - -@implementation FUAvatarCollectionView - -static NSString *cellID = @"AvatarCell"; --(instancetype)initWithFrame:(CGRect)frame{ - if (self = [super initWithFrame:frame]) { - [self setupView]; - } - return self; -} - - --(void)setupView{ - self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(60, 60); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - - [_collection registerClass:[FUAvatarCell class] forCellWithReuseIdentifier:cellID]; - - [_collection mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.right.left.bottom.equalTo(self); - }]; -} - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return [FUAvatarPresenter shareManager].wholeAvatarArray.count + 1; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUAvatarCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - - if (indexPath.row == 0) { - cell.isSel = _selIndex == indexPath.row ? YES : NO; - cell.image1.image = [UIImage imageNamed:@"demo_avatar_icon_cancel"]; - cell.image0.image = [UIImage imageNamed:@"demo_avatar_icon_cancel"]; - }else{ - FUWholeAvatarModel *modle = [FUAvatarPresenter shareManager].wholeAvatarArray[indexPath.row - 1]; - cell.isSel = _selIndex == indexPath.row ? YES : NO; - cell.image1.image = modle.image; - cell.image0.image = [UIImage imageNamed:@"demo_icon_template_male"]; - } - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(12, 16, 12, 16); -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - if(_selIndex == indexPath.row){ - return; - } - _selIndex = indexPath.row; - [self.collection reloadItemsAtIndexPaths:[self.collection indexPathsForVisibleItems]]; - if ([self.delegate respondsToSelector:@selector(avatarCollectionViewDidSel:)]) { - [self.delegate avatarCollectionViewDidSel:(int)indexPath.row]; - } -} - - --(void)updataCurrentSel:(int)index{ - _selIndex = index; - [_collection reloadData]; - if ([self.delegate respondsToSelector:@selector(avatarCollectionViewDidSel:)]) { - [self.delegate avatarCollectionViewDidSel:index]; - } - [_collection scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO]; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarContentColletionView.h b/FULiveDemo/Modules/NieLian/View/FUAvatarContentColletionView.h deleted file mode 100644 index cc4aa263..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarContentColletionView.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// FUAvatarContentColletionView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import -#import "FUAvatarModel.h" -NS_ASSUME_NONNULL_BEGIN - -@protocol FUAvatarContentColletionViewDelegate - -@optional - -- (void)avatarContentColletionViewDidSelectedIndex:(NSInteger)index; -@end - - -@interface FUAvatarContentCell : UICollectionViewCell -@property (strong, nonatomic) UIImageView *image; -@property (strong, nonatomic) UILabel *titleLabel; -@property (assign, nonatomic) BOOL isSel; -@end - -NS_ASSUME_NONNULL_END - - - -NS_ASSUME_NONNULL_BEGIN - -@interface FUAvatarContentColletionView : UIView -@property (nonatomic, strong) FUAvatarModel *avatarModel; - -@property (nonatomic, assign) iddelegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarContentColletionView.m b/FULiveDemo/Modules/NieLian/View/FUAvatarContentColletionView.m deleted file mode 100644 index 67fc61a3..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarContentColletionView.m +++ /dev/null @@ -1,144 +0,0 @@ -// -// FUAvatarContentColletionView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarContentColletionView.h" - - -@interface FUAvatarContentCell() -@property (strong, nonatomic) CAShapeLayer *dottedLineBorder; -@end -@implementation FUAvatarContentCell -- (id)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self) - { - _image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 74, 74)]; - _image.center = self.contentView.center; - _image.layer.cornerRadius = 8; - _image.layer.masksToBounds = YES; - [self.contentView addSubview:_image]; - - _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 45, 82, 20)]; - _titleLabel.text = NSLocalizedString(@"自定义", nil); - _titleLabel.textColor = [UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0]; - _titleLabel.textAlignment = NSTextAlignmentCenter; - _titleLabel.font = [UIFont systemFontOfSize:12]; - [self addSubview:_titleLabel]; - - self.layer.cornerRadius = 8; - self.layer.masksToBounds = YES; - self.layer.backgroundColor = [UIColor colorWithRed:249/255.0 green:249/255.0 blue:252/255.0 alpha:1.0].CGColor; - - _dottedLineBorder = [[CAShapeLayer alloc] init]; - _dottedLineBorder.frame = self.bounds; - _dottedLineBorder.hidden = YES; - [_dottedLineBorder setLineWidth:5]; - [_dottedLineBorder setFillColor:[UIColor clearColor].CGColor]; - [_dottedLineBorder setStrokeColor:[UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1.0].CGColor]; - - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:8]; - _dottedLineBorder.path = path.CGPath; - [self.contentView.layer addSublayer:_dottedLineBorder]; - - - - } - - return self; -} - --(void)setIsSel:(BOOL)isSel{ - _isSel = isSel; - _dottedLineBorder.hidden = !isSel; - -} - -@end - -@interface FUAvatarContentColletionView() - -@property (strong, nonatomic) UICollectionView *collection; - -@property (assign, nonatomic) NSInteger selIndex; -@end - -@implementation FUAvatarContentColletionView - -static NSString *cellID = @"colorCell"; - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self){ - self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(82, 82); - layout.scrollDirection = UICollectionViewScrollDirectionVertical; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, frame.size.height) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - [_collection registerClass:[FUAvatarContentCell class] forCellWithReuseIdentifier:cellID]; - _collection.backgroundColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - - } - - return self; -} --(void)setAvatarModel:(FUAvatarModel *)avatarModel{ - _avatarModel = avatarModel; - _selIndex = _avatarModel.bundleSelIndex; - [CATransaction setDisableActions:YES]; - [self.collection reloadData]; - [CATransaction commit]; -} - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _avatarModel.bundles.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - FUAvatarContentCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - - cell.image.image = [UIImage imageNamed:_avatarModel.bundles[indexPath.row].iconName]; - cell.isSel = indexPath.row == _selIndex ? YES :NO; - - if (_avatarModel.haveCustom) { - cell.titleLabel.hidden = indexPath.row == 0 ? NO :YES; - }else{ - cell.titleLabel.hidden = YES; - } - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(10, 10, 10, 10); -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - if(_selIndex == indexPath.row && indexPath.row != 0){ - return; - } - _selIndex = indexPath.row; - [self.collection reloadItemsAtIndexPaths:[self.collection indexPathsForVisibleItems]]; - if ([self.delegate respondsToSelector:@selector(avatarContentColletionViewDidSelectedIndex:)]) { - [self.delegate avatarContentColletionViewDidSelectedIndex:indexPath.row]; - } - _avatarModel.bundleSelIndex = (int)_selIndex; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarCustomView.h b/FULiveDemo/Modules/NieLian/View/FUAvatarCustomView.h deleted file mode 100644 index 9cb4569d..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarCustomView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FUAvatarCustomView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import - - - -NS_ASSUME_NONNULL_BEGIN -@class FUAvatarModel; -@interface FUAvatarCustomCell : UICollectionViewCell -@property (strong, nonatomic) UIImageView *image; - -@end - -@interface FUAvatarCustomView : UIView -@property (nonatomic, strong) FUAvatarModel *avatarModel; -@property (nonatomic, strong) FUAvatarModel *oldAvatarModel; -/* 恢复默认0 */ --(void)resetDefaultValue; -/* 值是否有变化 */ --(BOOL)isParamValueChange; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarCustomView.m b/FULiveDemo/Modules/NieLian/View/FUAvatarCustomView.m deleted file mode 100644 index 8dbb7701..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarCustomView.m +++ /dev/null @@ -1,261 +0,0 @@ -// -// FUAvatarCustomView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/21. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarCustomView.h" -#import "FUAvatarSlider.h" -#import "FUAvatarModel.h" -#import "FUManager.h" - - -#pragma mark - FUAvatarCustomCell -@implementation FUAvatarCustomCell -- (id)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self){ - _image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 45, 45)]; - _image.center = self.contentView.center; - [self.contentView addSubview:_image]; - } - - return self; -} -@end - - -#pragma mark - FUAvatarCustomView -@interface FUAvatarCustomView() -@property (strong, nonatomic) UICollectionView *collection; - -@property (strong, nonatomic) UILabel *explainLabel; -@property (strong, nonatomic) UILabel *titleLabel; -@property (strong, nonatomic) FUAvatarSlider *slider; - -@property (assign, nonatomic) NSInteger selIndex; -@end - -static NSString *cellID = @"avatarCustomCell"; - -@implementation FUAvatarCustomView - -- (id)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self){ - [self setupSubView]; - } - - return self; -} - - --(void)setupSubView{ - _explainLabel = [[UILabel alloc] init]; - _explainLabel.frame = CGRectMake(17,20,80,20); - _explainLabel.textAlignment = NSTextAlignmentCenter; - _explainLabel.numberOfLines = 0; - _explainLabel.text = @"额头宽窄"; - _explainLabel.textColor = [UIColor colorWithRed:102/255.0 green:102/255.0 blue:102/255.0 alpha:1.0]; - _explainLabel.font = [UIFont systemFontOfSize:12]; - [self addSubview:_explainLabel]; - - _slider = [[FUAvatarSlider alloc] initWithFrame:CGRectMake(_explainLabel.frame.origin.x + 5 + _explainLabel.frame.size.width, 20, [UIScreen mainScreen].bounds.size.width - _explainLabel.frame.size.width - 40, 20)]; - [_slider addTarget:self action:@selector(sliderChangeValue:) forControlEvents:UIControlEventValueChanged]; - _slider.hidden = YES; - _slider.type = FUSliderCellType101; - [self addSubview:_slider]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 20; - layout.itemSize = CGSizeMake(45, 45); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 60, [UIScreen mainScreen].bounds.size.width, 85) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - [_collection registerClass:[FUAvatarCustomCell class] forCellWithReuseIdentifier:cellID]; - _collection.backgroundColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - - - UIView *sqView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_collection.frame), [UIScreen mainScreen].bounds.size.width, 1/[UIScreen mainScreen].scale)]; - sqView.backgroundColor = [UIColor colorWithRed:102/255.0 green:102/255.0 blue:102/255.0 alpha:1.0]; - [self addSubview:sqView]; - - _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,CGRectGetMaxY(sqView.frame),[UIScreen mainScreen].bounds.size.width,49)]; - _titleLabel.text = @"脸型"; - _titleLabel.textColor = [UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0]; - _titleLabel.font = [UIFont systemFontOfSize:14]; - _titleLabel.textAlignment = NSTextAlignmentCenter; - [self addSubview:_titleLabel]; -} - --(void)setAvatarModel:(FUAvatarModel *)avatarModel{ - _avatarModel = avatarModel; - _oldAvatarModel = [avatarModel copy]; - _titleLabel.text = NSLocalizedString(avatarModel.title, nil); - _selIndex = 0; - _slider.hidden = YES; - _explainLabel.hidden = YES; - -// if (_avatarModel.bundleSelIndex != 0) { -// int index = _avatarModel.bundleSelIndex; -// for (int i = 0; i < _avatarModel.bundles[0].params.count; i ++) { -// _avatarModel.bundles[0].params[i].value = 0; -// } -// -// } - [self.collection reloadData]; - -} - -#pragma mark - UI事件 - --(void)sliderChangeValue:(FUAvatarSlider *)slider{ - NSLog(@"-----%lf",slider.value); - if(_selIndex < 1){ - NSLog(@"重置不能调节"); - return; - } - - FUAvatarParam *paramModel = _avatarModel.bundles[0].params[_selIndex - 1]; - paramModel.value = (slider.value - 0.5) * 2; - if (slider.value > 0.5) { - [[FUManager shareManager] setAvatarParam:paramModel.paramS value:0]; - [[FUManager shareManager] setAvatarParam:paramModel.paramB value:(slider.value - 0.5) * 2]; - }else{ - [[FUManager shareManager] setAvatarParam:paramModel.paramS value:fabs(0.5 - slider.value) * 2]; - [[FUManager shareManager] setAvatarParam:paramModel.paramB value:0]; - } -} - - - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _avatarModel.bundles[0].params.count + 1; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - FUAvatarCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - - if (indexPath.row == 0) { - cell.image.image = [UIImage imageNamed:@"demo_avatar_reset"]; - }else{ - FUAvatarParam *modle = _avatarModel.bundles[0].params[indexPath.row - 1]; - - cell.image.image = _selIndex == indexPath.row ?[UIImage imageNamed:modle.icon_sel] : [UIImage imageNamed:modle.icon]; - } - - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(20, 10, 20, 10); -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - FUBundelModel *modle = _avatarModel.bundles[0]; - if (indexPath.row == 0) {//重置 - [self restBundleParm:modle]; - }else{ - _selIndex = indexPath.row; - _slider.value = (modle.params[_selIndex - 1].value + 1)/2; - _explainLabel.hidden = NO; - _slider.hidden = NO; - _explainLabel.hidden = NO; - _explainLabel.text = NSLocalizedString(_avatarModel.bundles[0].params[_selIndex - 1].title, nil); - _slider.value = (1 + _avatarModel.bundles[0].params[_selIndex - 1].value) / 2; - [_collection reloadData]; - } -} - --(void)restBundleParm:(FUBundelModel *)modle{ - UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:NSLocalizedString(@"是否将所有参数恢复到默认值",nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"取消",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - }]; - [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - UIAlertAction *certainAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"确定",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - - [self setAvatarValueZero]; - }]; - [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"]; - - [alertCon addAction:cancleAction]; - [alertCon addAction:certainAction]; - - [[self viewControllerFromView:self] presentViewController:alertCon animated:YES completion:^{ - }]; -} - - -- (UIViewController *)viewControllerFromView:(UIView *)view { - for (UIView *next = [view superview]; next; next = next.superview) { - UIResponder *nextResponder = [next nextResponder]; - if ([nextResponder isKindOfClass:[UIViewController class]]) { - return (UIViewController *)nextResponder; - } - } - return nil; -} - - --(void)resetDefaultValue{ - FUBundelModel *modle = _avatarModel.bundles[0]; - FUBundelModel *oldModle = _oldAvatarModel.bundles[0]; - - for (int i = 0; i < modle.params.count; i ++) { - FUAvatarParam *param = modle.params[i]; - FUAvatarParam *oldParam = oldModle.params[i]; - param.value = oldParam.value; - - if (param.value < 0) { - [[FUManager shareManager] setAvatarParam:param.paramB value:0]; - [[FUManager shareManager] setAvatarParam:param.paramS value:fabsf(param.value)]; - }else{ - [[FUManager shareManager] setAvatarParam:param.paramS value:0]; - [[FUManager shareManager] setAvatarParam:param.paramB value:fabsf(param.value)]; - } - } - _slider.hidden = YES; - [_collection reloadData]; -} - --(void)setAvatarValueZero{ - for (FUAvatarParam *param in _avatarModel.bundles[0].params) { - param.value = 0; - [[FUManager shareManager] setAvatarParam:param.paramB value:0]; - [[FUManager shareManager] setAvatarParam:param.paramS value:0]; - } -// _selIndex = 0; -// _slider.hidden = YES; -// _explainLabel.hidden = YES; - _slider.value = 0.5; - [_collection reloadData]; -} - - - --(BOOL)isParamValueChange{ - /* 自定义数据 */ - FUBundelModel *modle = _avatarModel.bundles[0]; - FUBundelModel *oldModle = _oldAvatarModel.bundles[0]; - - for (int i = 0; i < modle.params.count; i ++) { - if (modle.params[i].value != oldModle.params[i].value) return YES; - } - - return NO; -} - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarEditView.h b/FULiveDemo/Modules/NieLian/View/FUAvatarEditView.h deleted file mode 100644 index 0c7d2597..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarEditView.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// FUAvatarEditView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import -#import "FUAvatarContentColletionView.h" -#import "FUAvatarCustomView.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUAvatarEditViewDelegate - -@optional --(void)avatarEditViewDidCustom:(BOOL)isCustomStata; - -@end - -@interface FUAvatarEditView : UIView - -- (id)initWithFrame:(CGRect)frame withData:(NSArray *)dataArray; - -@property (nonatomic, assign) iddelegate; - -@property (assign, nonatomic) BOOL isCustomState; - -@property (strong, nonatomic,readonly) FUAvatarContentColletionView *avatarContentColletionView; - -@property (strong, nonatomic) FUAvatarCustomView *avatarCustomView; - -/* 单个完整扭脸模型 (包含脸,鼻子,眼,嘴,头发)*/ -@property (nonatomic, strong) NSArray *dataArray; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarEditView.m b/FULiveDemo/Modules/NieLian/View/FUAvatarEditView.m deleted file mode 100644 index 85f4edca..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarEditView.m +++ /dev/null @@ -1,207 +0,0 @@ -// -// FUAvatarEditView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUAvatarEditView.h" -#import "FUColorCollectionView.h" -#import "FUAvatarContentColletionView.h" -#import "FUAvatarBottomColletionView.h" -#import "FUAvatarPresenter.h" -#import "FUAvatarCustomView.h" -#import "FUManager.h" -#import "FUAvatarModel.h" - - -@interface FUAvatarEditView() - -@property (strong, nonatomic) FUColorCollectionView *colorCollectionView; - -@property (strong, nonatomic) FUAvatarContentColletionView *avatarContentColletionView; - -@property (strong, nonatomic) FUAvatarBottomColletionView *avatarBottomColletionView; - -@end -@implementation FUAvatarEditView - - - -- (id)initWithFrame:(CGRect)frame withData:(NSArray *)dataArray{ - self = [super initWithFrame:frame]; - if (self){ - self.dataArray = dataArray; - _avatarCustomView = [[FUAvatarCustomView alloc] initWithFrame:CGRectMake(0, 123,[UIScreen mainScreen].bounds.size.width, 194)]; - _avatarCustomView.avatarModel = self.dataArray[0] ; - _avatarCustomView.backgroundColor = [UIColor whiteColor]; - _avatarCustomView.hidden = YES; - [self addSubview:_avatarCustomView]; - - _colorCollectionView = [[FUColorCollectionView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 60)]; - _colorCollectionView.avatarModel = self.dataArray[0]; - _colorCollectionView.backgroundColor = [UIColor whiteColor]; - _colorCollectionView.delegate = self; - [self addSubview:_colorCollectionView]; - - _avatarContentColletionView = [[FUAvatarContentColletionView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_colorCollectionView.frame),[UIScreen mainScreen].bounds.size.width, 208)]; - _avatarContentColletionView.delegate = self; - _avatarContentColletionView.avatarModel = self.dataArray[0]; - _avatarContentColletionView.backgroundColor = [UIColor whiteColor]; - [self addSubview:_avatarContentColletionView]; - - _avatarBottomColletionView = [[FUAvatarBottomColletionView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_avatarContentColletionView.frame),[UIScreen mainScreen].bounds.size.width, 49)]; - _avatarBottomColletionView.delegate = self; - _avatarBottomColletionView.backgroundColor = [UIColor whiteColor]; - _avatarBottomColletionView.dataArray = self.dataArray; - [self addSubview:_avatarBottomColletionView]; - } - - return self; -} - -#pragma mark - set - --(void)setIsCustomState:(BOOL)isCustomState{ - _isCustomState = isCustomState; - if (_isCustomState) { - _avatarBottomColletionView.hidden = YES; - _colorCollectionView.hidden = YES; - _avatarContentColletionView.hidden = YES; - _avatarCustomView.hidden = NO; - - int bottomIndex = (int)_avatarBottomColletionView.selIndex; - /* 默认的值 */ - FUAvatarModel *modle = self.dataArray[bottomIndex]; - _avatarCustomView.avatarModel = modle; - }else{ - _avatarBottomColletionView.hidden = NO; - _colorCollectionView.hidden = NO; - _avatarContentColletionView.hidden = NO; - _avatarCustomView.hidden = YES; - } - - if ([self.delegate respondsToSelector:@selector(avatarEditViewDidCustom:)]) { - [self.delegate avatarEditViewDidCustom:_isCustomState]; - } - -} -#pragma mark - FUColorCollectionViewDelegate - --(void)colorCollectionViewDidSelectedIndex:(NSInteger)index{ - if (_avatarBottomColletionView.selIndex == 0) {//选中的发型 - FUAvatarColor *colorModel = self.colorCollectionView.avatarModel.colors[index]; - - [[FUManager shareManager] setAvatarHairColorParam:self.colorCollectionView.avatarModel.colorsParam colorWithRed:colorModel.r green:colorModel.g blue:colorModel.b intensity:(int)colorModel.intensity]; - }else{ - FUAvatarColor *colorModel = self.colorCollectionView.avatarModel.colors[index]; - - [[FUManager shareManager] setAvatarItemParam:self.colorCollectionView.avatarModel.colorsParam colorWithRed:colorModel.r green:colorModel.g blue:colorModel.b]; - } -} - - - -#pragma mark - FUAvatarBottomColletionViewDelegate --(void)avatarBottomColletionDidSelectedIndex:(NSInteger)index{ - _colorCollectionView.avatarModel = self.dataArray[index]; - _avatarContentColletionView.avatarModel = self.dataArray[index]; - - /* update UI */ - if (index == 4 || (index == 0 && _avatarContentColletionView.avatarModel.bundleSelIndex == 0 )) {//鼻子没有颜色 + 光头 - [UIView animateWithDuration:0.25 animations:^{ - CGRect frame = _avatarContentColletionView.frame; - _avatarContentColletionView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); - }]; - }else{ - [UIView animateWithDuration:0.25 animations:^{ - CGRect frame = _avatarContentColletionView.frame; - _avatarContentColletionView.frame = CGRectMake(0, _colorCollectionView.frame.size.height, frame.size.width, frame.size.height); - }]; - - } - -} - - -#pragma mark - FUAvatarContentColletionViewDelegate - -- (void)avatarContentColletionViewDidSelectedIndex:(NSInteger)index{ - int bottomIndex = (int)_avatarBottomColletionView.selIndex; - - /* update UI */ - if ((bottomIndex == 0 && index == 0) || bottomIndex == 4) {//鼻子没有颜色 + 光头 - [UIView animateWithDuration:0.25 animations:^{ - CGRect frame = _avatarContentColletionView.frame; - _avatarContentColletionView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); - }]; - }else{ - [UIView animateWithDuration:0.25 animations:^{ - CGRect frame = _avatarContentColletionView.frame; - _avatarContentColletionView.frame = CGRectMake(0, _colorCollectionView.frame.size.height, frame.size.width, frame.size.height); - }]; - - } - - FUAvatarModel *modle = self.dataArray[bottomIndex]; - - /* bind美发道具 */ - if (bottomIndex == 0) { - [[FUManager shareManager] avatarBindHairItem:modle.bundles[index].bundleName]; - - /* 重设置颜色 */ - int colorIndex = (int)_colorCollectionView.selIndex; - FUAvatarColor *colorModel = self.colorCollectionView.avatarModel.colors[colorIndex]; - [[FUManager shareManager] setAvatarHairColorParam:self.colorCollectionView.avatarModel.colorsParam colorWithRed:colorModel.r green:colorModel.g blue:colorModel.b intensity:(int)colorModel.intensity]; - - return; - } - - if (index == 0) {//自定义 - if (modle.haveCustom) { - self.isCustomState = YES; - } - /* 参数设置类型 */ - for (FUAvatarParam *model0 in modle.bundles[index].params) { - if (model0.value < 0) { - [[FUManager shareManager] setAvatarParam:model0.paramS value:fabsf(model0.value)]; - [[FUManager shareManager] setAvatarParam:model0.paramB value:0]; - }else{ - [[FUManager shareManager] setAvatarParam:model0.paramS value:0]; - [[FUManager shareManager] setAvatarParam:model0.paramB value:fabsf(model0.value)]; - } - } - }else if (modle.bundles[index].params.count > 0) {//参数设置类型 - for (FUAvatarParam *model0 in modle.bundles[index].params) { - if (model0.value < 0) { - [[FUManager shareManager] setAvatarParam:model0.paramS value:fabsf(model0.value)]; - [[FUManager shareManager] setAvatarParam:model0.paramB value:0]; - }else{ - [[FUManager shareManager] setAvatarParam:model0.paramS value:0]; - [[FUManager shareManager] setAvatarParam:model0.paramB value:fabsf(model0.value)]; - } - } - - /* 产品要求将自定义设置为0 */ - for (FUAvatarParam *param in modle.bundles[0].params) { - param.value = 0; - } - } - - - if(bottomIndex != 4){//鼻子不需要设置颜色 - /* 重设置颜色 */ - int colorIndex = (int)_colorCollectionView.selIndex; - FUAvatarColor *colorModel = self.colorCollectionView.avatarModel.colors[colorIndex]; - [[FUManager shareManager] setAvatarItemParam:self.colorCollectionView.avatarModel.colorsParam colorWithRed:colorModel.r green:colorModel.g blue:colorModel.b]; - } - -} - - --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ - NSLog(@"1111"); -} - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarSlider.h b/FULiveDemo/Modules/NieLian/View/FUAvatarSlider.h deleted file mode 100755 index 81170ca3..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarSlider.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FUSlider.h -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -typedef NS_ENUM(NSUInteger, FUAvatarSliderType) { - FUSliderCellType01, /* 正常滑杆 */ - FUSliderCellType101, /* ±50 滑杆 */ -}; - -@interface FUAvatarSlider : UISlider - -@property (nonatomic, assign) FUAvatarSliderType type ; -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUAvatarSlider.m b/FULiveDemo/Modules/NieLian/View/FUAvatarSlider.m deleted file mode 100755 index 1f2b9cc5..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUAvatarSlider.m +++ /dev/null @@ -1,215 +0,0 @@ -// -// FUSlider.m -// FUAPIDemoBar -// -// Created by L on 2018/6/27. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUAvatarSlider.h" - -@interface FUAvatarSlider() -/* 提示文字 */ -@property (nonatomic,strong) UILabel *mIndicateLabel; -@property (nonatomic,strong) UIView *middleView; -@property (nonatomic,strong) UIView *line; -//刻度背景 -@property (nonatomic,strong) UIImageView *bgImageView; -@end - -@implementation FUAvatarSlider -#pragma mark ---- 懒加载 ----- --(UIView *)middleView{ - if (!_middleView) { - _middleView = [[UIView alloc] initWithFrame:CGRectMake(2, self.frame.size.height /2.0 - 2, 100, 4)]; - _middleView.backgroundColor = [UIColor colorWithRed:32/255.0 green:160/255.0 blue:255/255.0 alpha:1.0]; - - } - return _middleView; -} - --(UIView *)line{ - if (!_line) { - _line = [[UIView alloc] init]; - _line.backgroundColor = [UIColor whiteColor]; - _line.layer.masksToBounds = YES ; - _line.layer.cornerRadius = 1.0 ; - _line.frame = CGRectMake(self.frame.size.width / 2.0 - 1.0, 8.0, 2.0, self.frame.size.height - 16) ; - } - return _line; -} - --(UIImageView *)bgImageView{ - if (!_bgImageView) { - _bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"airbubbles"]]; - _bgImageView.alpha = 0; - } - return _bgImageView; -} - -- (void)awakeFromNib -{ - [super awakeFromNib]; - self.maximumTrackTintColor = [UIColor whiteColor]; - self.minimumTrackTintColor = [UIColor redColor]; - [self setThumbImage:[UIImage imageNamed:@"figure-slider-dot"] forState:UIControlStateNormal]; - - self.middleView.hidden = YES; - self.line.hidden = YES; - - [self addSubview:self.bgImageView]; - - _mIndicateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,-self.frame.size.height + 2,50, 20)]; - _mIndicateLabel.textAlignment = NSTextAlignmentCenter; - _mIndicateLabel.textColor = [UIColor whiteColor]; - _mIndicateLabel.font = [UIFont systemFontOfSize:11]; - _mIndicateLabel.backgroundColor = [UIColor clearColor]; - [self addSubview:_mIndicateLabel]; - -} - -- (id)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self){ - [self setupSubView]; - } - - return self; -} - - --(void)setupSubView{ - self.maximumTrackTintColor = [UIColor whiteColor]; - self.minimumTrackTintColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0]; - [self setThumbImage:[UIImage imageNamed:@"figure-slider-dot"] forState:UIControlStateNormal]; - [self setMaximumTrackImage:[UIImage imageNamed:@"control_Long_strip_nor"] forState:UIControlStateNormal]; - [self setMinimumTrackImage:[UIImage imageNamed:@"control_Long_strip_sel"] forState:UIControlStateNormal]; - - self.middleView.hidden = YES; - self.line.hidden = YES; - - [self addSubview:self.bgImageView]; - - _mIndicateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,-self.frame.size.height + 2,50, 20)]; - _mIndicateLabel.textAlignment = NSTextAlignmentCenter; - _mIndicateLabel.textColor = [UIColor whiteColor]; - _mIndicateLabel.font = [UIFont systemFontOfSize:11]; - _mIndicateLabel.backgroundColor = [UIColor clearColor]; - [self addSubview:_mIndicateLabel]; - - -} - --(void)setType:(FUAvatarSliderType)type { - _type = type ; - if (_type == FUSliderCellType101) { - self.line.hidden = NO ; - self.middleView.hidden = NO ; - [self setMinimumTrackImage:[UIImage imageNamed:@"control_Long_strip_nor"] forState:UIControlStateNormal]; - }else{ - self.line.hidden = YES ; - self.middleView.hidden = YES ; - [self setMinimumTrackImage:[UIImage imageNamed:@"control_Long_strip_sel"] forState:UIControlStateNormal]; - [self setMinimumTrackTintColor:[UIColor colorWithRed:32/255.0 green:160/255.0 blue:255/255.0 alpha:1.0]]; - } -} - - -// 后设置 value -- (void)setValue:(float)value animated:(BOOL)animated { - [super setValue:value animated:animated]; - - if (_type == FUSliderCellType101) { - CGFloat currentValue = value - 0.5; - CGFloat width = currentValue * (self.frame.size.width - 4); - if (width < 0 ) { - width = -width ; - } - CGFloat X = currentValue > 0 ? self.frame.size.width / 2.0 : self.frame.size.width / 2.0 - width ; - CGRect frame = _middleView.frame ; - frame = CGRectMake(X, frame.origin.y, width, frame.size.height) ; - _middleView.frame = frame ; - - _mIndicateLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100 * 2) - 100]; - CGFloat x = value * (self.frame.size.width - 20) - _mIndicateLabel.frame.size.width * 0.5 + 10; - CGRect frame1 = _mIndicateLabel.frame; - frame1.origin.x = x; - frame1.origin.y = -40; - - CGRect frame2 = self.bgImageView.frame; - frame2.origin.x = frame1.origin.x + 8; - frame2.origin.y = frame1.origin.y - 8; - self.bgImageView.frame = frame2; - _mIndicateLabel.frame = frame1; - if (self.tracking ) { - if (self.mIndicateLabel.hidden) { - [self startAnimation]; - } - - }else{ - if (!self.mIndicateLabel.hidden) { - [self stopAnimation]; - } - } - }else{ - _mIndicateLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100)]; - CGFloat x = value * (self.frame.size.width - 20) - _mIndicateLabel.frame.size.width * 0.5 + 10; - CGRect frame = _mIndicateLabel.frame; - frame.origin.x = x; - frame.origin.y = -40; - _mIndicateLabel.frame = frame; - - CGRect frame2 = self.bgImageView.frame; - frame2.origin.x = frame.origin.x + 8; - frame2.origin.y = frame.origin.y - 8; - self.bgImageView.frame = frame2; - _mIndicateLabel.frame = frame; - if (self.tracking) { - if (self.mIndicateLabel.hidden) { - [self startAnimation]; - } - - }else{ - if (!self.mIndicateLabel.hidden) { - [self stopAnimation]; - } - } - } - -} - - --(void)startAnimation{ - - self.bgImageView.layer.affineTransform = CGAffineTransformMakeScale(0.1, 0.1); - [UIView animateWithDuration: 0.25 animations:^{ - self.bgImageView.layer.affineTransform = CGAffineTransformMakeScale(0.9, 0.9); - self.bgImageView.alpha = 1; - self.mIndicateLabel.hidden = NO; - } completion:^(BOOL finished) { - - }]; - -} - - - - --(void)stopAnimation{ - - self.bgImageView.alpha = 0; - self.mIndicateLabel.hidden = YES; - -} - - --(void)layoutSubviews { - [super layoutSubviews]; - _line.frame = CGRectMake(self.frame.size.width / 2.0 - 1.0, 8.0, 2.0, self.frame.size.height - 16); - [self insertSubview:_middleView atIndex: self.subviews.count - 2]; - [self insertSubview:_line atIndex:self.subviews.count - 2]; - CGFloat value = self.value ; - [self setValue:value animated:NO]; -} - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUColorCell.h b/FULiveDemo/Modules/NieLian/View/FUColorCell.h deleted file mode 100644 index aa1c920a..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUColorCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUColorCell.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUColorCell : UICollectionViewCell -@property (strong, nonatomic) UIImageView *image; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUColorCell.m b/FULiveDemo/Modules/NieLian/View/FUColorCell.m deleted file mode 100644 index 805a57c2..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUColorCell.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// FUColorCell.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUColorCell.h" - -@interface FUColorCell() - -@end - -@implementation FUColorCell - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - _image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; - _image.image = [UIImage imageNamed:@"demo_icon_selected"]; - [self.contentView addSubview:_image]; - - self.layer.cornerRadius = frame.size.width / 2; - self.layer.masksToBounds = YES; - } - - return self; -} - - -@end diff --git a/FULiveDemo/Modules/NieLian/View/FUColorCollectionView.h b/FULiveDemo/Modules/NieLian/View/FUColorCollectionView.h deleted file mode 100644 index 2b31c605..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUColorCollectionView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FUColorCollectionView.h -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUColorCollectionViewDelegate - - @optional - -- (void)colorCollectionViewDidSelectedIndex:(NSInteger)index; - @end - -@class FUAvatarModel; -@interface FUColorCollectionView : UIView -@property (nonatomic, strong) FUAvatarModel *avatarModel; - -@property (assign, nonatomic,readonly) NSInteger selIndex; - -@property (nonatomic, assign) iddelegate; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/NieLian/View/FUColorCollectionView.m b/FULiveDemo/Modules/NieLian/View/FUColorCollectionView.m deleted file mode 100644 index 3c8fe914..00000000 --- a/FULiveDemo/Modules/NieLian/View/FUColorCollectionView.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// FUColorCollectionView.m -// FULiveDemo -// -// Created by 孙慕 on 2019/3/20. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUColorCollectionView.h" -#import "FUColorCell.h" -#import "FUAvatarPresenter.h" -#import "FUColor.h" -#import "FUAvatarModel.h" -#import "FUManager.h" - -@interface FUColorCollectionView() - -@property (strong, nonatomic) UICollectionView *collection; - -@property (assign, nonatomic) NSInteger selIndex; -@end - -@implementation FUColorCollectionView - -static NSString *cellID = @"colorCell"; - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self){ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 0; - layout.minimumLineSpacing = 16; - layout.itemSize = CGSizeMake(40, 40); - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - _collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 60) collectionViewLayout:layout]; - _collection.backgroundColor = [UIColor clearColor]; - _collection.delegate = self; - _collection.dataSource = self; - [self addSubview:_collection]; - [_collection registerClass:[FUColorCell class] forCellWithReuseIdentifier:cellID]; - _collection.backgroundColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - - } - - return self; -} - - --(void)setAvatarModel:(FUAvatarModel *)avatarModel{ - _avatarModel = avatarModel; - _selIndex = avatarModel.colorsSelIndex; - [self.collection reloadData]; -} - -#pragma mark --- UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _avatarModel.colors.count; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FUColorCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; - - - cell.image.hidden = _selIndex == indexPath.row ? NO:YES; - FUAvatarColor *color = _avatarModel.colors[indexPath.row]; - cell.backgroundColor = [UIColor colorWithRed:color.r/255.0 green:color.g/255.0 blue:color.b/255.0 alpha:1.0]; //[FUColor colorWithHexString:_colors[indexPath.row] alpha:1.0]; - - return cell; -} - -#pragma mark --- UICollectionViewDelegateFlowLayout - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return UIEdgeInsetsMake(10, 10, 10, 10); -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - _selIndex = indexPath.row; - _avatarModel.colorsSelIndex = (int)_selIndex; - - [_collection reloadData]; - if ([self.delegate respondsToSelector:@selector(colorCollectionViewDidSelectedIndex:)]) { - [self.delegate colorCollectionViewDidSelectedIndex:(int)indexPath.row]; - } -} - -@end diff --git a/FULiveDemo/Modules/Poster/Manager/FUPosterManager.h b/FULiveDemo/Modules/Poster/Manager/FUPosterManager.h deleted file mode 100644 index 3c748492..00000000 --- a/FULiveDemo/Modules/Poster/Manager/FUPosterManager.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FUPosterManager.h -// FULiveDemo -// -// Created by lsh726 on 2021/3/7. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -NS_ASSUME_NONNULL_BEGIN - -@interface FUPosterManager : FUMetaManager - -+ (instancetype)sharedManager; - -+ (void)destory; - -@property (nonatomic, copy, readonly) NSArray *posterItems; - -@property (nonatomic, copy, readonly) NSArray *posterIcons; - -@property (nonatomic, copy, readonly) NSArray *posterList; - -@property (nonatomic, assign) NSInteger selectedIndex; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Poster/Manager/FUPosterManager.m b/FULiveDemo/Modules/Poster/Manager/FUPosterManager.m deleted file mode 100644 index eef474f9..00000000 --- a/FULiveDemo/Modules/Poster/Manager/FUPosterManager.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// FUPosterManager.m -// FULiveDemo -// -// Created by lsh726 on 2021/3/7. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUPosterManager.h" - -static dispatch_once_t onceToken; - -static FUPosterManager *instance = nil; - -@interface FUPosterManager () - -@property (nonatomic, copy) NSArray *posterItems; -@property (nonatomic, copy) NSArray *posterList; -@property (nonatomic, copy) NSArray *posterIcons; - - -@end - -@implementation FUPosterManager - -+ (instancetype)sharedManager { - dispatch_once(&onceToken, ^{ - instance = [[FUPosterManager alloc] init]; - }); - return instance; -} - -+ (void)destory { - onceToken = 0; - instance = nil; -} - -- (instancetype)init { - self = [super init]; - if (self) { - [FUAIKit shareKit].maxTrackFaces = 4; - [FUAIKit shareKit].faceProcessorDetectMode = FUFaceProcessorDetectModeImage; - } - return self; -} - -- (NSArray *)posterItems { - if (!_posterItems) { - _posterItems = @[@"poster1", @"poster2", @"poster3", @"poster4", @"poster5", @"poster6", @"poster7", @"poster8"]; - } - return _posterItems; -} - - -- (NSArray *)posterList { - if (!_posterList) { - _posterList = @[@"poster1_list", @"poster2_list", @"poster3_list", @"poster4_list", @"poster5_list", @"poster6_list", @"poster7_list", @"poster8_list"]; - } - return _posterList; -} - -- (NSArray *)posterIcons { - if (!_posterIcons) { - _posterIcons = @[@"poster1_icon", @"poster2_icon", @"poster3_icon", @"poster4_icon", @"poster5_icon", @"poster6_icon", @"poster7_icon", @"poster8_icon"]; - } - return _posterIcons; -} - -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.h b/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.h deleted file mode 100644 index 0ebcd0d3..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FUEditImageViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2018/10/9. -// Copyright © 2018年 L. All rights reserved. -// - -#import -typedef NS_ENUM(NSUInteger, FUEditImagePushFrom) { - FUEditImagePushFromPhoto, - FUEditImagePushFromAlbum, -}; -@interface FUEditImageViewController : UIViewController -@property (assign, nonatomic) FUEditImagePushFrom PushFrom; -@property (weak, nonatomic) IBOutlet UIImageView *mImageView; -@property (strong, nonatomic) UIImage *mPhotoImage; -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.m b/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.m deleted file mode 100644 index 1eee33cd..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.m +++ /dev/null @@ -1,351 +0,0 @@ -// -// FUEditImageViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2018/10/9. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUEditImageViewController.h" -#import "SVProgressHUD.h" -#import "FUBaseViewController.h" -#import "FUPosterManager.h" - -#import -#import - -@interface FUEditImageViewController () { - float photoLandmarks[239*2]; -} -@property (strong, nonatomic) FUItemsView *mItemView; -@property (weak, nonatomic) IBOutlet FLAnimatedImageView *loadingImage; -@property (weak, nonatomic) IBOutlet UIView *mNoFaceView; -@property (weak, nonatomic) IBOutlet UILabel *mTextLabel; -@property (weak, nonatomic) IBOutlet UIButton *OKBtn; - -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *mLayoutConstraintBottom; -/* 多人脸展示蒙版 */ -@property (strong, nonatomic)UIView *maskView; -/* 合成海报是否保存 */ -@property (assign, nonatomic) BOOL isSave; -@property (strong, nonatomic) NSMutableArray *faceInfoArray; //多人脸信息存放 -/* 返回 */ -@property (weak, nonatomic) IBOutlet UIButton *mBackBtn; -/* 下载 */ -@property (weak, nonatomic) IBOutlet UIButton *mDownLoadBtn; - -@property (strong, nonatomic) FUPosterManager *posterManager; -/// 是否不完整人脸 -@property (nonatomic, assign) BOOL incompleteFace; - -@property (nonatomic, strong) FUPoster *poster; - -@end - -@implementation FUEditImageViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view from its nib. - self.posterManager = [FUPosterManager sharedManager]; - _faceInfoArray = [NSMutableArray array]; //多人脸信息存放 - [self initializationView]; -} - --(void)viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - - [self setupPhotoMake]; -} - -/* 初始化 */ --(void)initializationView{ - - [_OKBtn setTitle:FUNSLocalizedString(@"知道了", nil) forState:UIControlStateNormal]; - - /* loading gif */ - NSData *loadingData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"loading.gif" ofType:nil]]; - self.loadingImage.animatedImage = [FLAnimatedImage animatedImageWithGIFData:loadingData]; - self.loadingImage.hidden = YES; - [self prefersStatusBarHidden]; - [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; - - self.mImageView.image = [UIImage imageNamed:self.posterManager.posterList[self.posterManager.selectedIndex]]; - - _mItemView = [[FUItemsView alloc] init]; - _mItemView.delegate = self; - _mItemView.items = self.posterManager.posterIcons; - _mItemView.selectedIndex = self.posterManager.selectedIndex; - [self.view addSubview:_mItemView]; - [_mItemView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - make.height.mas_offset(FUHeightIncludeBottomSafeArea(84)); - }]; -} - - -#pragma mark ---- 校验 & push处理 ----- -/* 人脸校验 */ --(void)setupPhotoMake{ - [FUManager resetTrackedResult]; - UIImage *image = [UIImage imageNamed:self.posterManager.posterItems[self.posterManager.selectedIndex]]; - [self.poster renderWithInputImage:self.mPhotoImage templateImage:image]; -} - -// 选择某一张脸 -- (void)selectFace:(UITapGestureRecognizer *)tap { - CGPoint point = [tap locationInView:self.maskView] ; - for (FUFaceRectInfo *info in _faceInfoArray) { - CGRect rect = [info rect]; - if (CGRectContainsPoint(rect, point)) { - [_maskView removeFromSuperview];//chooseFaceIds - [self.poster chooseFaceID: info.faceId]; - } - } -} - - -#pragma mark ---- 多人脸是添加选择蒙版 ----- -/* 多人脸是添加选择蒙版 */ --(void)addMakeViewWithFaceInfos:(NSArray *)faces - photoWidth:(int)width - photoHeight:(int)height { - //创建一个View - _maskView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; - [_maskView setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.6]]; - [self.view addSubview:_maskView]; - - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectFace:)]; - [self.maskView addGestureRecognizer:tap]; - - UIButton *tipBtn = [[UIButton alloc] initWithFrame:CGRectMake((_maskView.frame.size.width - 200)/2, 0, 200, 40)]; - [tipBtn setTitle:FUNSLocalizedString(@"检测到多人,请选择一人进行换脸", nil) forState:UIControlStateNormal]; - [tipBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - tipBtn.titleLabel.font = [UIFont systemFontOfSize:12]; - tipBtn.contentEdgeInsets = UIEdgeInsetsMake(6, 0, 0, 0); - [tipBtn setBackgroundImage:[UIImage imageNamed:@"poster_tip"] forState:UIControlStateNormal]; - [tipBtn addTarget:self action:@selector(tipBtnClick:) forControlEvents:UIControlEventTouchUpInside]; - [self.maskView addSubview:tipBtn]; - - CGRect imageAspectRect = AVMakeRectWithAspectRatioInsideRect(_mImageView.image.size, _mImageView.bounds); - UIBezierPath *path = [UIBezierPath bezierPathWithRect:_maskView.bounds]; - for (int i = 0; i < faces.count; i ++) { - FUFaceRectInfo *info = faces[i]; - CGRect rect = [self getFaceRect:info.rect - photoWidth:_mPhotoImage.size.width - photoHeight:_mPhotoImage.size.height - iamgeAspectRect:imageAspectRect]; - UIBezierPath *path1 = [[UIBezierPath bezierPathWithOvalInRect:rect] bezierPathByReversingPath];// [UIBezierPath bezierPathWithOvalInRect:rect bez]; - [path appendPath:path1]; - - if (CGRectGetMaxY(rect) > tipBtn.frame.origin.y) { - tipBtn.frame = CGRectMake((_maskView.frame.size.width - 200)/2, CGRectGetMaxY(rect) + 20, 200, 40); - } - info.rect = rect; - [_faceInfoArray addObject:info]; - } - - CAShapeLayer *shapeLayer = [CAShapeLayer layer]; - shapeLayer.path = path.CGPath; - //添加图层蒙板 - _maskView.layer.mask = shapeLayer; - -} - -/* 获取图片人脸区域 - * iamgeAspectRect 图片在父视图的相对位置 - */ -- (CGRect)getFaceRect:(CGRect)rect - photoWidth:(int)photoWidth - photoHeight:(int)photoHeight - iamgeAspectRect:(CGRect)iamgeAspectRect { - - //rect 是人脸在图片上的位置 所以人脸中心点x = (rect.origin.x + (rect.originx + rect.size.width))/2 , (originx + size.width) 为人脸x最大坐标,y最大坐标同理可得 - CGFloat centerX = (rect.origin.x + (rect.origin.x + rect.size.width)) * 0.5; - CGFloat centerY = (rect.origin.y + (rect.origin.y + rect.size.height)) * 0.5; - - CGFloat width = rect.size.width; - CGFloat height = rect.size.height; - - float scaleW = iamgeAspectRect.size.width / photoWidth; - float scaleH = iamgeAspectRect.size.height / photoHeight; - - width = width * scaleW; - height = height * scaleH; - - /** - * centerY * scaleH 在图片centerY 相对坐标, - * centerY * scaleH - height / 2, 即人脸在图片的originY 相对位置 - * centerY * scaleH - height / 2 + iamgeAspectRect.origin.y 即人脸在图片的父视图的originY位置 - * */ - float y = centerY * scaleH - height / 2 + iamgeAspectRect.origin.y; - float x = centerX * scaleW - width / 2 + iamgeAspectRect.origin.x; - CGRect retRect = CGRectMake(x, y, width, height); - return retRect; -} - -#pragma mark ---- FUItemsViewDelegate ----- -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - if (index == self.posterManager.selectedIndex) { - return; - } - _isSave = NO; - [self.mItemView startAnimation]; - self.posterManager.selectedIndex = index; - UIImage *image = [UIImage imageNamed:self.posterManager.posterItems[self.posterManager.selectedIndex]]; - [self.poster changeTempImage:image]; -} - -#pragma mark ---- SET ----- --(void)setMPhotoImage:(UIImage *)mPhotoImage{ - NSData *imageData = UIImageJPEGRepresentation(mPhotoImage, 1.0); - mPhotoImage = [UIImage imageWithData:imageData]; - _mPhotoImage = mPhotoImage; - self.mImageView.image = mPhotoImage; -} - - -#pragma mark ---- UI Action ----- - -- (IBAction)backAction:(id)sender { - [self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES]; -} - -/* 保存图片 */ -- (IBAction)loadAction:(id)sender { - - if (_mImageView.image) { - if (_isSave) { - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"图片已保存到相册", nil)]; - return; - } - UIImageWriteToSavedPhotosAlbum(_mImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); - } - -} - --(void)tipBtnClick:(UIButton *)btn{ - // [_maskView removeFromSuperview]; -} - -- (IBAction)knownAction:(id)sender { - - [self.navigationController popToViewController:self.navigationController.viewControllers[2] animated:YES]; -} - -- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo -{ - if(error != NULL){ - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存图片失败", nil)]; - }else{ - _isSave = YES; - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"图片已保存到相册", nil)]; - } -} - -#pragma mark - PosterDelegate -/** - * 检测输入照片人脸结果异常调用, 用于处理异常提示 UI逻辑. - * code: -1, 人脸异常(检测到人脸但是角度不对返回-1),0: 未检测到人脸 - */ -- (void)poster:(FUPoster *)poster inputImageTrackErrorCode:(int)code { - dispatch_async(dispatch_get_main_queue(), ^{ - self.mNoFaceView.hidden = NO; - if (code == -1) { - if (_PushFrom == FUEditImagePushFromPhoto) { - self.mTextLabel.text = FUNSLocalizedString(@"人脸偏转角度过大,请重新拍摄",nil); - }else{ - self.mTextLabel.text = FUNSLocalizedString(@"人脸偏转角度过大,请重新选择",nil); - } - } else if (code == 0) { - } - }); -} - -/** - * 输入照片检测到单人脸回调此方法 - */ -- (void)poster:(FUPoster *)poster trackedFaceInfo:(FUFaceRectInfo *)faceInfo { - CGRect faceRect = faceInfo.rect; - if (faceRect.origin.x < 0 || faceRect.origin.y < 0 || (faceRect.origin.x + faceRect.size.width > self.mPhotoImage.size.width) || (faceRect.origin.y + faceRect.size.height > self.mPhotoImage.size.height)) { - self.incompleteFace = YES; - // 处理人脸不完整情况 - self.mNoFaceView.hidden = NO; - self.mTextLabel.text = self.PushFrom == FUEditImagePushFromPhoto ? FUNSLocalizedString(@"人脸不全,请重新拍摄", nil) : FUNSLocalizedString(@"人脸不全,请重新选择", nil); - } else { - self.incompleteFace = NO; - self.mNoFaceView.hidden = YES; - } -} - -/** - * 输入照片检测到多张人脸回调此方法,用于UI层绘制多人脸 UI - */ -- (void)poster:(FUPoster *)poster trackedMultiFaceInfos:(NSArray *)faceInfos { - /* 添加遮罩选择逻辑 */ - dispatch_async(dispatch_get_main_queue(), ^{ - [self addMakeViewWithFaceInfos:faceInfos photoWidth:_mPhotoImage.size.width photoHeight:_mPhotoImage.size.height]; - }); -} - -/** - * 检测海报模版背景图片人脸结果(异常调用) - * code: -1, 人脸异常(检测到人脸但是角度不对返回-1) 0: 未检测到人脸 - */ -- (void)poster:(FUPoster *)poster tempImageTrackErrorCode:(int)code { - dispatch_async(dispatch_get_main_queue(), ^{ - self.mNoFaceView.hidden = NO; - if (code == -1) { - if (_PushFrom == FUEditImagePushFromPhoto) { - self.mTextLabel.text = FUNSLocalizedString(@"人脸偏转角度过大,请重新拍摄",nil); - }else{ - self.mTextLabel.text = FUNSLocalizedString(@"人脸偏转角度过大,请重新选择",nil); - } - } else if (code == 0) { - - } - }); -} - -/** - * inputImage 和 蒙板image 合成的结果回调 - * data : 海报蒙板和照片合成之后的图片数据 - */ - -- (void)poster:(FUPoster *)poster didRenderToImage:(UIImage *)image { - dispatch_async(dispatch_get_main_queue(), ^{ - self.mImageView.image = self.incompleteFace ? self.mPhotoImage : image; - self.loadingImage.hidden = YES; - self.view.userInteractionEnabled = YES; - [self.mItemView stopAnimation]; - }); -} - -- (NSNumber *)renderOfWarp { - id warpValue = [FUPosterManager sharedManager].selectedIndex == 5 ? @0.2 : nil; - return warpValue; -} - -#pragma mark ---- 重载系统方法 ----- -- (BOOL)prefersStatusBarHidden -{ - return YES;//隐藏为YES,显示为NO -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - - -- (FUPoster *)poster { - if (!_poster) { - NSString *path = [[NSBundle mainBundle] pathForResource:@"change_face" ofType:@"bundle"]; - _poster = [[FUPoster alloc] initWithPath:path name:@"change_face"]; - _poster.delegate = self; - } - return _poster; -} - -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.xib b/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.xib deleted file mode 100644 index 5064ac75..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUEditImageViewController.xib +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/Poster/VC/FUPosterController.h b/FULiveDemo/Modules/Poster/VC/FUPosterController.h deleted file mode 100644 index 7cb0ac78..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUPosterController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUPosterController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUPosterController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Poster/VC/FUPosterController.m b/FULiveDemo/Modules/Poster/VC/FUPosterController.m deleted file mode 100644 index 374fa2e9..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUPosterController.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// FUPosterController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/31. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUPosterController.h" -#import "FUSaveViewController.h" -#import -#import "FUEditImageViewController.h" -#import "UIImage+FU.h" - -@interface FUPosterController () - -@end - -@implementation FUPosterController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - - [self setupView]; - - self.headButtonView.selectedImageBtn.hidden = NO; - - [self.headButtonView.selectedImageBtn setImage:[UIImage imageNamed:@"相册icon"] forState:UIControlStateNormal]; -} - --(void)setupView{ - [self.headButtonView.mHomeBtn setImage:[UIImage imageNamed:@"save_nav_back_n"] forState:UIControlStateNormal]; - - [self.photoBtn setType:FUPhotoButtonTypeTakePhoto]; - UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face_contour"]]; - imageView.contentMode = UIViewContentModeScaleAspectFill; - imageView.frame = self.view.bounds; - [self.view addSubview:imageView]; - [self.view insertSubview:imageView atIndex:1]; - - self.tipLabel.text = FUNSLocalizedString(@"对准线框 正脸拍摄", nil); - self.tipLabel.font = [UIFont systemFontOfSize:13]; - self.tipLabel.hidden = NO; - [self.tipLabel mas_remakeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(self.noTrackLabel.mas_bottom).offset(100); - make.centerX.equalTo(self.view); - make.width.mas_equalTo(160); - make.height.mas_equalTo(22); - }]; -} - -/* 海报拍照后不急保存,重载父方法 */ --(void)takePhotoToSave:(UIImage *)image{ - FUSaveViewController *vc = [[FUSaveViewController alloc] init]; - vc.view.backgroundColor = [UIColor whiteColor]; - vc.mImage = image; - [self.navigationController pushViewController:vc animated:YES]; -} - -- (void)displayPromptText { - BOOL isHaveFace = [self.baseManager faceTrace]; - if (!isHaveFace) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"No_Face_Tracking",nil); - self.noTrackLabel.hidden = NO; - }); - } else { - if (!self.baseManager.trackedFullFace) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"Incomplete_face",nil); - self.noTrackLabel.hidden = NO; - }); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.hidden = YES; - }); - } - } -} - -- (BOOL)needsPresetSelections { - return NO; -} - -#pragma mark - 选择照片 --(void)didClickSelPhoto{ - - [self showImagePickerWithMediaType:(NSString *)kUTTypeImage]; - -} - -- (void)showImagePickerWithMediaType:(NSString *)mediaType { - - UIImagePickerController *picker = [[UIImagePickerController alloc] init]; - - picker.delegate = self; - picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; - picker.allowsEditing = NO; - picker.mediaTypes = @[mediaType] ; - [self presentViewController:picker animated:YES completion:nil]; -} - - -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - // 关闭相册 - [picker dismissViewControllerAnimated:YES completion:nil]; - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - CGFloat imagePixel = image.size.width * image.size.height; - // 超过限制像素需要压缩 - if (imagePixel > FUPicturePixelMaxSize) { - CGFloat ratio = FUPicturePixelMaxSize / imagePixel * 1.0; - image = [image fu_compress:ratio]; - } - // 图片转正 - if (image.imageOrientation != UIImageOrientationUp && image.imageOrientation != UIImageOrientationUpMirrored) { - image = [image fu_resetImageOrientationToUp]; - } - FUEditImageViewController *vc = [[FUEditImageViewController alloc] initWithNibName:@"FUEditImageViewController" bundle:nil]; - vc.view.backgroundColor = [UIColor blackColor]; - vc.PushFrom = FUEditImagePushFromAlbum; - [self.navigationController pushViewController:vc animated:YES]; - vc.mPhotoImage = image; -} - -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.h b/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.h deleted file mode 100644 index b3a15ac2..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// FUPosterListViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2018/10/8. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -@interface FUPosterListViewController : UIViewController - -@property (weak, nonatomic) IBOutlet UICollectionView *mPosterCollectionView; - -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.m b/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.m deleted file mode 100644 index ce5d5cdc..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// FUPosterListViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2018/10/8. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUPosterListViewController.h" -#import "FUPosterCell.h" -#import "FUPosterController.h" -#import "FUPosterManager.h" - -@interface FUPosterListViewController () - -@property (weak, nonatomic) IBOutlet UILabel *titleLabel; - -@property (nonatomic, assign) float itemW; -@property (nonatomic, assign) float itemH; - -@end - -static NSString *registerID = @"PosterCell"; - -@implementation FUPosterListViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - - - _titleLabel.text = FUNSLocalizedString(@"海报换脸", nil); - - self.view.backgroundColor = [UIColor colorWithRed:9/255 green:0 blue:23/255 alpha:1.0]; - _mPosterCollectionView.backgroundColor = [UIColor colorWithRed:9/255 green:0 blue:23/255 alpha:1.0]; - - _mPosterCollectionView.delegate = self; - _mPosterCollectionView.dataSource = self; - - _itemW = ([UIScreen mainScreen].bounds.size.width - 17 * 3) / 2; - _itemH = _itemW/324 * 358; - - //注册 - [_mPosterCollectionView registerNib:[UINib nibWithNibName:@"FUPosterCell" bundle:nil] forCellWithReuseIdentifier:registerID]; - - [self prefersStatusBarHidden]; - [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; -} - -- (void)dealloc { - [FUPosterManager destory]; -} - - -#pragma mark ---- UI action ----- - -- (IBAction)back:(id)sender { - [self.navigationController popViewControllerAnimated:YES]; -} - - - -#pragma mark collectionView代理方法 -//返回section个数 -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView -{ - return 1; -} - -//每个section的item个数 -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ - return [FUPosterManager sharedManager].posterList.count; - -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ - FUPosterCell *cell = (FUPosterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:registerID forIndexPath:indexPath]; - cell.mImageView.image = [UIImage imageNamed:[FUPosterManager sharedManager].posterList[indexPath.row]]; - return cell; -} - -//设置每个item的尺寸 -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ - - - return CGSizeMake(_itemW, _itemH); -} - - -//设置每个item的UIEdgeInsets -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section -{ - return UIEdgeInsetsMake(17, 17, 17, 17); -} - -//设置每个item水平间距 -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section -{ - return 10; -} - -//点击item方法 -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ - - FUPosterController *vc = [[FUPosterController alloc] init]; - [FUPosterManager sharedManager].selectedIndex = indexPath.item; - [self.navigationController pushViewController:vc animated:YES]; -} - -#pragma mark ---- 重载系统方法 ----- - -- (BOOL)prefersStatusBarHidden -{ - return YES;//隐藏为YES,显示为NO -} - -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.xib b/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.xib deleted file mode 100644 index ace88ee7..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUPosterListViewController.xib +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/Poster/VC/FUSaveViewController.h b/FULiveDemo/Modules/Poster/VC/FUSaveViewController.h deleted file mode 100644 index c668f8ff..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUSaveViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FUSaveViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2018/10/8. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -@interface FUSaveViewController : UIViewController -@property (weak, nonatomic) IBOutlet UIImageView *mImageView; -@property (strong, nonatomic) UIImage *mImage; -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUSaveViewController.m b/FULiveDemo/Modules/Poster/VC/FUSaveViewController.m deleted file mode 100644 index b9858228..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUSaveViewController.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// FUSaveViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2018/10/8. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUSaveViewController.h" -#import "FUEditImageViewController.h" -#import - -@interface FUSaveViewController () - -@property (weak, nonatomic) IBOutlet UIButton *closeBtn; -@property (weak, nonatomic) IBOutlet UIButton *doneBtn; - -@end - -@implementation FUSaveViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - /* 图片模式 */ - [FUAIKit shareKit].faceProcessorDetectMode = FUFaceProcessorDetectModeImage; - // Do any additional setup after loading the view from its nib. -} - --(void)setMImage:(UIImage *)mImage{ - _mImageView.image = mImage; - _mImage = mImage; -} - --(void)viewDidAppear:(BOOL)animated{ - [super viewDidAppear:animated]; -} - -#pragma mark ---- UI Action ----- - -- (IBAction)closeAction:(id)sender { - [self.navigationController popViewControllerAnimated:YES]; -} -- (IBAction)doneAction:(id)sender { - FUEditImageViewController *vc = [[FUEditImageViewController alloc] initWithNibName:@"FUEditImageViewController" bundle:nil]; - vc.view.backgroundColor = [UIColor blackColor]; - vc.PushFrom = FUEditImagePushFromPhoto; - vc.mPhotoImage = self.mImageView.image; - [self.navigationController pushViewController:vc animated:YES]; - if (self.mImageView.image) { - UIImageWriteToSavedPhotosAlbum(self.mImageView.image, self, nil, NULL); - } - -} - -#pragma mark ---- 重载系统方法 ----- -- (BOOL)prefersStatusBarHidden -{ - return YES;//隐藏为YES,显示为NO -} - - - -@end diff --git a/FULiveDemo/Modules/Poster/VC/FUSaveViewController.xib b/FULiveDemo/Modules/Poster/VC/FUSaveViewController.xib deleted file mode 100644 index 2d588ff9..00000000 --- a/FULiveDemo/Modules/Poster/VC/FUSaveViewController.xib +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/Poster/View/FUPosterCell.h b/FULiveDemo/Modules/Poster/View/FUPosterCell.h deleted file mode 100644 index e166360f..00000000 --- a/FULiveDemo/Modules/Poster/View/FUPosterCell.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FUPosterCell.h -// FULiveDemo -// -// Created by 孙慕 on 2018/10/8. -// Copyright © 2018年 L. All rights reserved. -// - -#import - -@interface FUPosterCell : UICollectionViewCell -@property (weak, nonatomic) IBOutlet UIImageView *mImageView; - -@end diff --git a/FULiveDemo/Modules/Poster/View/FUPosterCell.m b/FULiveDemo/Modules/Poster/View/FUPosterCell.m deleted file mode 100644 index 4c331572..00000000 --- a/FULiveDemo/Modules/Poster/View/FUPosterCell.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// FUPosterCell.m -// FULiveDemo -// -// Created by 孙慕 on 2018/10/8. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUPosterCell.h" - -@implementation FUPosterCell - - --(void)awakeFromNib{ - [super awakeFromNib]; - - self.layer.masksToBounds = YES; - self.layer.cornerRadius = 5; - -} - -@end diff --git a/FULiveDemo/Modules/Poster/View/FUPosterCell.xib b/FULiveDemo/Modules/Poster/View/FUPosterCell.xib deleted file mode 100644 index 08466cea..00000000 --- a/FULiveDemo/Modules/Poster/View/FUPosterCell.xib +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUQStickersViewController.h b/FULiveDemo/Modules/QualitySticker/Controller/FUQStickersViewController.h deleted file mode 100644 index 4edce55f..00000000 --- a/FULiveDemo/Modules/QualitySticker/Controller/FUQStickersViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUQStickersViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2021/2/3. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUQStickersViewController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUQStickersViewController.m b/FULiveDemo/Modules/QualitySticker/Controller/FUQStickersViewController.m deleted file mode 100644 index 2270fd91..00000000 --- a/FULiveDemo/Modules/QualitySticker/Controller/FUQStickersViewController.m +++ /dev/null @@ -1,387 +0,0 @@ -// -// FUQStickersViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2021/2/3. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUQStickersViewController.h" -#import "FUStickersPageController.h" - -#import "FUStickerModel.h" - -#import "FUStickerHelper.h" -#import "FUNetworkingHelper.h" -#import "FUQualityStickerManager.h" - -#import "NSObject+economizer.h" - -static NSString * const kFUStickerTagsKey = @"FUStickerTags"; -static NSString * const kFUStickerContentCollectionCellIdentifier = @"FUStickerContentCollectionCell"; - -@interface FUQStickersViewController () - -@property (nonatomic, strong) UIView *bottomView; -@property (nonatomic, strong) UICollectionView *contentCollectionView; -@property (nonatomic, strong) UIView *bottom; -/// 取消效果按钮 -@property (nonatomic, strong) UIButton *cancelStickerButton; -@property (nonatomic, strong) FUSegmentBar *segmentsView; - -@property (nonatomic, copy) NSArray *tags; -@property (nonatomic, strong) NSMutableArray *stickerControllers; - -/// 当前选中贴纸分组索引 -@property (nonatomic, assign) NSInteger selectedIndex; -/// 是否正在显示贴纸 默认为YES -@property (nonatomic, assign) BOOL isShowingStickers; - -@property (nonatomic, strong) FUQualityStickerManager *qualityStickerManager; -/// 选中的贴纸 -@property (nonatomic, strong) FUStickerModel *selectedSticker; - -@end - -@implementation FUQStickersViewController - -#pragma mark - Life cycle - -- (void)viewDidLoad { - [super viewDidLoad]; - self.qualityStickerManager = [[FUQualityStickerManager alloc] init]; - - self.selectedIndex = -1; - _isShowingStickers = YES; - - self.headButtonView.selectedImageBtn.hidden = NO; - self.canPushImageSelView = NO; - - if ([FUNetworkingHelper currentNetworkStatus] == FUNetworkStatusReachable) { - // 有网络时请求接口 - [self requestTags]; - } else { - // 无网络时查看本地数据 - [self loadLocalTags]; - } - - // 网络变化 - __weak typeof(self) weakSelf = self; - [FUNetworkingHelper networkStatusHandler:^(FUNetworkStatus status) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (strongSelf.tags.count == 0 && status == FUNetworkStatusReachable) { - [strongSelf requestTags]; - } - }]; -} - -#pragma mark - UI - -- (void)setupContentView { - - [self.view addSubview:self.bottomView]; - [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.height.mas_offset(iPhoneXStyle ? 265 : 231); - }]; - - [self.bottomView addSubview:self.bottom]; - [self.bottom mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.bottomView); - make.height.mas_offset(iPhoneXStyle ? 83 : 49); - }]; - - [self.bottomView addSubview:self.contentCollectionView]; - [self.contentCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.top.equalTo(self.bottomView); - make.bottom.equalTo(self.bottom.mas_top); - }]; - - [self.photoBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerX.equalTo(self.view); - make.size.mas_offset(CGSizeMake(85, 85)); - make.bottom.equalTo(self.bottomView.mas_top).mas_offset(-10); - }]; - - self.segmentsView.selectedIndex = 0; -} - -#pragma mark - Private methods - -- (void)requestTags { - [FUStickerHelper itemTagsCompletion:^(BOOL isSuccess, NSArray * _Nullable tags) { - if (isSuccess && tags) { - self.tags = [tags copy]; - [[NSUserDefaults standardUserDefaults] setObject:self.tags forKey:kFUStickerTagsKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self setupContentView]; - }); - } else { - // 请求失败 - [self loadLocalTags]; - } - }]; -} - -- (void)loadLocalTags { - // 无网络时查看本地数据 - if ([[NSUserDefaults standardUserDefaults] objectForKey:kFUStickerTagsKey]) { - self.tags = [[NSUserDefaults standardUserDefaults] arrayForKey:kFUStickerTagsKey]; - [self setupContentView]; - } -} - -- (void)selectSegmentBarWithIndex:(NSInteger)index { - if (index < 0 || index >= self.tags.count) { - NSLog(@"switchTabDidSelectedAtIndex invalid index: %@", @(index)); - return; - } - if (index == _selectedIndex) { - [self changeStickerViewStatus:!_isShowingStickers]; - } else { - if (_isShowingStickers) { - [self.contentCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; - } else { - [self changeStickerViewStatus:YES]; - [self.contentCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO]; - } - _selectedIndex = index; - } -} - -/// 贴纸区域隐藏/显示 -- (void)changeStickerViewStatus:(BOOL)isShow { - [self.bottomView mas_updateConstraints:^(MASConstraintMaker *make) { - make.height.mas_offset(isShow ? (iPhoneXStyle ? 265 : 231) : (iPhoneXStyle ? 83 : 49)); - }]; - [UIView animateWithDuration:0.1 animations:^{ - [self.view layoutIfNeeded]; - } completion:^(BOOL finished) { - _isShowingStickers = isShow; - }]; - [UIView animateWithDuration:0.35 animations:^{ - self.photoBtn.transform = isShow ? CGAffineTransformIdentity : CGAffineTransformMakeScale(0.9, 0.9); - }]; -} - -#pragma mark - Overriding - -- (void)displayPromptText { - BOOL result = self.selectedSticker.type == FUQualityStickerTypeAvatar ? [self.baseManager bodyTrace] : [self.baseManager faceTrace]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = self.selectedSticker.type == FUQualityStickerTypeAvatar ? FUNSLocalizedString(@"未检测到人体",nil) : FUNSLocalizedString(@"No_Face_Tracking",nil); - self.noTrackLabel.hidden = result; - }); -} - -- (FUAIModelType)necessaryAIModelTypes { - return FUAIModelTypeFace | FUAIModelTypeHuman | FUAIModelTypeHand; -} - --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ - // 隐藏贴纸视图 - [self changeStickerViewStatus:NO]; - - if (self.selectedSticker.isNeedClick) { - [self.qualityStickerManager clickCurrentItem]; - } -} - -#pragma mark - Event response - --(void)headButtonViewBackAction:(UIButton *)btn { - // 取消所有下载任务 - [FUStickerHelper cancelStickerHTTPTasks]; - [self.qualityStickerManager cancelDownloadingTasks]; - [super headButtonViewBackAction:btn]; -} - -- (void)cancelStickerAction { - self.selectedSticker = nil; - [[NSNotificationCenter defaultCenter] postNotificationName:FUSelectedStickerDidChangeNotification object:nil]; - - // 释放贴纸 - [self.qualityStickerManager releaseItem]; -} - - -#pragma mark - FUSegmentBarDelegate - -- (void)segmentBar:(FUSegmentBar *)segmentsView didSelectItemAtIndex:(NSUInteger)index { - [self selectSegmentBarWithIndex:index]; -} - -#pragma mark - FUStickersPageControllerDelegate - -- (void)stickerPageController:(FUStickersPageController *)controller didSelectSticker:(FUStickerModel *)sticker { - self.selectedSticker = sticker; - [[NSNotificationCenter defaultCenter] postNotificationName:FUSelectedStickerDidChangeNotification object:sticker]; - - // 选中马上释放当前贴纸 - [self.qualityStickerManager releaseItem]; -} - -- (void)stickerPageController:(FUStickersPageController *)controller shouldLoadSticker:(FUStickerModel *)sticker { - if ([sticker.tag isEqualToString:self.selectedSticker.tag] && [sticker.itemId isEqualToString:self.selectedSticker.itemId]) { - // 只有当前选中的贴纸和需要加载的贴纸一致时执行加载 - if (sticker.isSingle) { - // 设置精品贴纸只对一个人脸有效 - [self.baseManager setMaxFaces:1]; - } else { - // 最多四个人脸 - [self.baseManager setMaxFaces:4]; - } - - [self.qualityStickerManager loadItem:sticker]; - if (sticker.type == FUQualityStickerTypeAvatar) { - // 自动隐藏选择视图 - [self changeStickerViewStatus:NO]; - } - } -} - -#pragma mark - Collection view data source - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.tags.count; -} -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUStickerContentCollectionCellIdentifier forIndexPath:indexPath]; - [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; - FUStickersPageController *controller = self.stickerControllers[indexPath.item]; - controller.view.frame = cell.contentView.frame; - [cell.contentView addSubview:controller.view]; - return cell; -} - -#pragma mark - Scroll view delegate - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - if (scrollView == self.contentCollectionView) { - NSInteger index = self.contentCollectionView.contentOffset.x / CGRectGetWidth(self.view.frame); - if (index < 0 || index >= self.tags.count) { - return; - } - self.segmentsView.selectedIndex = index; - _selectedIndex = index; - - } -} - -#pragma mark - Getters - -- (UIView *)bottomView { - if (!_bottomView) { - _bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), iPhoneXStyle ? 265 : 231)]; - // 毛玻璃效果 - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; - effectview.alpha = 1.0; - effectview.frame = CGRectMake(0, 0, CGRectGetWidth(_bottomView.frame), 182); - [_bottomView insertSubview:effectview atIndex:0]; - } - return _bottomView; -} - -- (UIView *)bottom { - if (!_bottom) { - _bottom = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), iPhoneXStyle ? 83 : 49)]; - _bottom.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:1]; - - [_bottom addSubview:self.cancelStickerButton]; - [self.cancelStickerButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(_bottom.mas_leading).mas_offset(6); - make.top.equalTo(_bottom.mas_top).mas_offset(4); - make.size.mas_offset(CGSizeMake(40, 40)); - }]; - - UIView *line = [[UIView alloc] init]; - line.backgroundColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]; - [_bottom addSubview:line]; - [line mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(self.cancelStickerButton.mas_trailing).mas_offset(10); - make.top.equalTo(_bottom.mas_top).mas_offset(14); - make.size.mas_offset(CGSizeMake(0.5, 20)); - }]; - - [_bottom addSubview:self.segmentsView]; - [self.segmentsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.equalTo(_bottom.mas_leading).mas_offset(57); - make.top.trailing.equalTo(_bottom); - make.height.mas_offset(49); - }]; - - UIView *topLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 0.5)]; - topLine.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.2]; - [_bottom addSubview:topLine]; - [topLine mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.top.equalTo(_bottom); - make.height.mas_offset(0.5); - }]; - } - return _bottom; -} - -- (UIButton *)cancelStickerButton { - if (!_cancelStickerButton) { - _cancelStickerButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _cancelStickerButton.frame = CGRectMake(0, 0, 40, 40); - [_cancelStickerButton setImage:[UIImage imageNamed:@"sticker_cancel"] forState:UIControlStateNormal]; - [_cancelStickerButton addTarget:self action:@selector(cancelStickerAction) forControlEvents:UIControlEventTouchUpInside]; - } - return _cancelStickerButton; -} - -- (FUSegmentBar *)segmentsView { - if (!_segmentsView) { - NSMutableArray *segments = [[NSMutableArray alloc] init]; - for (NSString *tag in self.tags) { - if ([tag componentsSeparatedByString:@"/"].count > 1) { - NSArray *titles = [tag componentsSeparatedByString:@"/"]; - NSString *languageString = [[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]; - [segments addObject: [languageString isEqualToString:@"zh-Hans"] ? titles[0] : titles[1]]; - } else { - [segments addObject:tag]; - } - } - _segmentsView = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame) - 57, 49) titles:[segments copy] configuration:[FUSegmentBarConfigurations new]]; - _segmentsView.delegate = self; - } - return _segmentsView; -} - -- (UICollectionView *)contentCollectionView { - if (!_contentCollectionView) { - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0); - flowLayout.itemSize = CGSizeMake(CGRectGetWidth(self.view.frame), 182); - flowLayout.minimumLineSpacing = 0; - flowLayout.minimumInteritemSpacing = 0; - flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - _contentCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 182) collectionViewLayout:flowLayout]; - _contentCollectionView.backgroundColor = [UIColor clearColor]; - _contentCollectionView.showsVerticalScrollIndicator = NO; - _contentCollectionView.showsHorizontalScrollIndicator = NO; - _contentCollectionView.pagingEnabled = YES; - _contentCollectionView.dataSource = self; - _contentCollectionView.delegate = self; - [_contentCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:kFUStickerContentCollectionCellIdentifier]; - - } - return _contentCollectionView; -} -- (NSMutableArray *)stickerControllers { - if (!_stickerControllers) { - _stickerControllers = [[NSMutableArray alloc] init]; - for (NSString *tag in self.tags) { - FUStickersPageController *stickerController = [[FUStickersPageController alloc] initWithTag:tag]; - stickerController.qualityStickerManager = self.qualityStickerManager; - stickerController.delegate = self; - [_stickerControllers addObject:stickerController]; - } - } - return _stickerControllers; -} - -@end diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerPageController.h b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerPageController.h new file mode 100644 index 00000000..13ef0933 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerPageController.h @@ -0,0 +1,36 @@ +// +// FUQualityStickerPageController.h +// FULiveDemo +// +// Created by 项林平 on 2021/3/16. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import + +@class FUQualityStickerModel, FUQualityStickerPageController, FUQualityStickerViewModel; + +NS_ASSUME_NONNULL_BEGIN + +extern NSString * const FUSelectedStickerDidChangeNotification; + +@protocol FUQualityStickerPageControllerDelegate +/// 选中贴纸 +- (void)stickerPageController:(FUQualityStickerPageController *)controller didSelectSticker:(FUQualityStickerModel *)sticker; +/// 加载贴纸效果 +- (void)stickerPageController:(FUQualityStickerPageController *)controller shouldLoadSticker:(FUQualityStickerModel *)sticker; +@end + +@interface FUQualityStickerPageController : UIViewController + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, strong) FUQualityStickerViewModel *qualityStickerViewModel; + +- (instancetype)initWithTag:(NSString *)tag; + +- (void)reloadData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerPageController.m b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerPageController.m new file mode 100644 index 00000000..9a83e04a --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerPageController.m @@ -0,0 +1,213 @@ +// +// FUQualityStickerPageController.m +// FULiveDemo +// +// Created by 项林平 on 2021/3/16. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUQualityStickerPageController.h" + +#import "FUQualityStickerCell.h" + +#import "FUQualityStickerModel.h" +#import "FUQualityStickerHelper.h" +#import "FUQualityStickerViewModel.h" +#import "FUNetworkingHelper.h" + +static NSString * const kFUReuseIdentifier = @"FUQualityStickerCell"; + +NSString * const FUSelectedStickerDidChangeNotification = @"FUSelectedStickerDidChangeNotification"; + +@interface FUQualityStickerPageController () + +@property (nonatomic, strong) UICollectionView *collectionView; + +@property (nonatomic, copy) NSString *tag; + +@property (nonatomic, copy) NSArray *stickers; + +/// 选中贴纸 +@property (nonatomic, strong) FUQualityStickerModel *selectedSticker; + +@end + +@implementation FUQualityStickerPageController + +- (instancetype)initWithTag:(NSString *)tag { + self = [super init]; + if (self) { + self.tag = tag; + } + return self; +} + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + [self.view addSubview:self.collectionView]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.view); + }]; + + if ([FUNetworkingHelper currentNetworkStatus] == FUNetworkStatusReachable) { + [self requestStickers]; + } else { + [self loadLocalStickers]; + } + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selectedStickerChanged:) name:FUSelectedStickerDidChangeNotification object:nil]; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self name:FUSelectedStickerDidChangeNotification object:nil]; +} + +#pragma mark - Instance methods + +- (void)reloadData { + [self.collectionView reloadData]; +} + +#pragma mark - Private methods + +- (void)requestStickers { + [FUQualityStickerHelper itemListWithTag:self.tag completion:^(NSArray * _Nullable dataArray, NSError * _Nullable error) { + if (!error) { + self.stickers = [dataArray copy]; + [FUQualityStickerHelper updateLocalStickersWithStickers:self.stickers tag:self.tag]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + }); + } else { + [self loadLocalStickers]; + } + }]; +} + +- (void)loadLocalStickers { + self.stickers = [FUQualityStickerHelper localStickersWithTag:self.tag]; + [self.collectionView reloadData]; +} + +- (void)selectSticker:(FUQualityStickerModel *)sticker { + if (self.delegate && [self.delegate respondsToSelector:@selector(stickerPageController:didSelectSticker:)]) { + [self.delegate stickerPageController:self didSelectSticker:sticker]; + } +} + + +#pragma mark - Event response + +- (void)selectedStickerChanged:(NSNotification *)notification { + if (!notification.object) { + // 取消贴纸效果 + if (self.selectedSticker) { + self.selectedSticker.selected = NO; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + }); + } else { + // 改变选中贴纸 + FUQualityStickerModel *sticker = (FUQualityStickerModel *)notification.object; + if ([self.selectedSticker.tag isEqualToString:sticker.tag] && [self.selectedSticker.itemId isEqualToString:sticker.itemId]) { + // 已经选中的情况 + return; + } + // 其他页面需要取消当前选择 + if (self.selectedSticker) { + self.selectedSticker.selected = NO; + } + sticker.selected = YES; + self.selectedSticker = sticker; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + }); + } +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.stickers.count; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath { + FUQualityStickerCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUReuseIdentifier forIndexPath:indexPath]; + FUQualityStickerModel *model = self.stickers[indexPath.row]; + cell.model = model; + cell.selected = model.isSelected; + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + FUQualityStickerModel *sticker = self.stickers[indexPath.item]; + if (sticker.isSelected && [FUQualityStickerHelper downloadStatusOfSticker:sticker]) { + return; + } + // 直接选中新道具 + [self selectSticker:sticker]; + if (![FUQualityStickerHelper downloadStatusOfSticker:sticker]) { + if ([FUNetworkingHelper currentNetworkStatus] != FUNetworkStatusReachable) { + [FUTipHUD showTips:FULocalizedString(@"下载失败")]; + return; + } + // 开始下载 + sticker.loading = YES; + FUQualityStickerCell *cell = (FUQualityStickerCell *)[collectionView cellForItemAtIndexPath:indexPath]; + [cell setModel:sticker]; + + [self.qualityStickerViewModel downloadItem:sticker completion:^(NSError * _Nullable error) { + sticker.loading = NO; + dispatch_async(dispatch_get_main_queue(), ^{ + [collectionView reloadData]; + }); + if (!error) { + // 下载完成以后加载贴纸 + if (self.delegate && [self.delegate respondsToSelector:@selector(stickerPageController:shouldLoadSticker:)]) { + [self.delegate stickerPageController:self shouldLoadSticker:sticker]; + } + } else { + NSLog(@"download fail"); + [FUTipHUD showTips:FULocalizedString(@"下载失败")]; + } + }]; + + } else { + // 直接加载贴纸 + if (self.delegate && [self.delegate respondsToSelector:@selector(stickerPageController:shouldLoadSticker:)]) { + [self.delegate stickerPageController:self shouldLoadSticker:sticker]; + } + } +} + +#pragma mark - Getters + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.minimumLineSpacing = 22; + flowLayout.minimumInteritemSpacing = (CGRectGetWidth(self.view.frame) - 287) / 4.f - 1; + flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; + flowLayout.sectionInset = UIEdgeInsetsMake(16, 16, 5, 16); + flowLayout.itemSize = CGSizeMake(51, 51); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; + _collectionView.backgroundColor = [UIColor clearColor]; + [self.collectionView registerNib:[UINib nibWithNibName:@"FUQualityStickerCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:kFUReuseIdentifier]; + _collectionView.showsHorizontalScrollIndicator = NO; + _collectionView.showsVerticalScrollIndicator = NO; + _collectionView.allowsMultipleSelection = NO; + _collectionView.dataSource = self; + _collectionView.delegate = self; + } + return _collectionView; +} + +@end diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerViewController.h b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerViewController.h new file mode 100644 index 00000000..d41068db --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerViewController.h @@ -0,0 +1,18 @@ +// +// FUQualityStickerViewController.h +// FULiveDemo +// +// Created by 孙慕 on 2021/2/3. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FURenderViewController.h" +#import "FUQualityStickerViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUQualityStickerViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerViewController.m b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerViewController.m new file mode 100644 index 00000000..76e2158d --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/Controller/FUQualityStickerViewController.m @@ -0,0 +1,363 @@ +// +// FUQualityStickerViewController.m +// FULiveDemo +// +// Created by 孙慕 on 2021/2/3. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUQualityStickerViewController.h" +#import "FUQualityStickerPageController.h" + +#import "FUQualityStickerModel.h" + +#import "FUQualityStickerHelper.h" +#import "FUNetworkingHelper.h" + + +static NSString * const kFUStickerTagsKey = @"FUStickerTags"; +static NSString * const kFUStickerContentCollectionCellIdentifier = @"FUStickerContentCollectionCell"; + +@interface FUQualityStickerViewController () + +@property (nonatomic, strong) UIView *bottomView; +@property (nonatomic, strong) UICollectionView *contentCollectionView; +@property (nonatomic, strong) UIView *bottom; +/// 取消效果按钮 +@property (nonatomic, strong) UIButton *cancelStickerButton; +@property (nonatomic, strong) FUSegmentBar *segmentsView; + +@property (nonatomic, copy) NSArray *tags; +@property (nonatomic, strong) NSMutableArray *stickerControllers; + +/// 当前选中贴纸分组索引 +@property (nonatomic, assign) NSInteger selectedIndex; +/// 是否正在显示贴纸 默认为YES +@property (nonatomic, assign) BOOL isShowingStickers; + +@property (nonatomic, strong, readonly) FUQualityStickerViewModel *viewModel; +/// 选中的贴纸 +@property (nonatomic, strong) FUQualityStickerModel *selectedSticker; + +@end + +@implementation FUQualityStickerViewController + +@dynamic viewModel; + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 默认选中第一组 + self.selectedIndex = 0; + + if ([FUNetworkingHelper currentNetworkStatus] == FUNetworkStatusReachable) { + // 有网络时请求接口 + [self requestTags]; + } else { + // 无网络时查看本地数据 + [self loadLocalTags]; + } + + // 网络变化 + __weak typeof(self) weakSelf = self; + [FUNetworkingHelper networkStatusHandler:^(FUNetworkStatus status) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (strongSelf.tags.count == 0 && status == FUNetworkStatusReachable) { + [strongSelf requestTags]; + } + }]; +} + +- (void)dealloc { + [FUQualityStickerHelper cancelStickerHTTPTasks]; + [self.viewModel cancelDownloadingTasks]; +} + +#pragma mark - UI + +- (void)setupContentView { + + [self.view addSubview:self.bottomView]; + [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.view); + make.height.mas_offset(FUHeightIncludeBottomSafeArea(231)); + }]; + + [self.bottomView addSubview:self.bottom]; + [self.bottom mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.bottomView); + make.height.mas_offset(FUHeightIncludeBottomSafeArea(49)); + }]; + + [self.bottomView addSubview:self.contentCollectionView]; + [self.contentCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.top.equalTo(self.bottomView); + make.bottom.equalTo(self.bottom.mas_top); + }]; + + self.segmentsView.selectedIndex = _selectedIndex; + + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(231) + 10 animated:NO]; +} + +#pragma mark - Private methods + +- (void)requestTags { + [FUQualityStickerHelper itemTagsCompletion:^(BOOL isSuccess, NSArray * _Nullable tags) { + if (isSuccess && tags) { + self.tags = [tags copy]; + [[NSUserDefaults standardUserDefaults] setObject:self.tags forKey:kFUStickerTagsKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self setupContentView]; + }); + } else { + // 请求失败 + [self loadLocalTags]; + } + }]; +} + +- (void)loadLocalTags { + // 无网络时查看本地数据 + if ([[NSUserDefaults standardUserDefaults] objectForKey:kFUStickerTagsKey]) { + self.tags = [[NSUserDefaults standardUserDefaults] arrayForKey:kFUStickerTagsKey]; + [self setupContentView]; + } +} + +- (void)selectSegmentBarWithIndex:(NSInteger)index { + if (index < 0 || index >= self.tags.count) { + NSLog(@"switchTabDidSelectedAtIndex invalid index: %@", @(index)); + return; + } + if (index == _selectedIndex) { + [self changeStickerViewStatus:!_isShowingStickers]; + } else { + if (_isShowingStickers) { + [self.contentCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; + } else { + [self changeStickerViewStatus:YES]; + [self.contentCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO]; + } + _selectedIndex = index; + } +} + +/// 贴纸区域隐藏/显示 +- (void)changeStickerViewStatus:(BOOL)isShow { + [self.bottomView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_offset(isShow ? FUHeightIncludeBottomSafeArea(231) : FUHeightIncludeBottomSafeArea(49)); + }]; + [UIView animateWithDuration:0.1 animations:^{ + [self.view layoutIfNeeded]; + } completion:^(BOOL finished) { + self->_isShowingStickers = isShow; + }]; + [self updateBottomConstraintsOfCaptureButton:isShow ? (FUHeightIncludeBottomSafeArea(231) + 10) : (FUHeightIncludeBottomSafeArea(49) + 10) animated:YES]; +} + +#pragma mark - Overriding + + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + // 隐藏贴纸视图 + [self changeStickerViewStatus:NO]; + + if (self.selectedSticker.isNeedClick) { + [self.viewModel clickCurrentItem]; + } +} + +#pragma mark - Event response + +- (void)cancelStickerAction { + self.selectedSticker = nil; + self.viewModel.detectingParts = FUDetectingPartsFace; + [[NSNotificationCenter defaultCenter] postNotificationName:FUSelectedStickerDidChangeNotification object:nil]; + + // 释放贴纸 + [self.viewModel releaseItem]; +} + + +#pragma mark - FUSegmentBarDelegate + +- (void)segmentBar:(FUSegmentBar *)segmentsView didSelectItemAtIndex:(NSUInteger)index { + [self selectSegmentBarWithIndex:index]; +} + +#pragma mark - FUQualityStickerPageControllerDelegate + +- (void)stickerPageController:(FUQualityStickerPageController *)controller didSelectSticker:(FUQualityStickerModel *)sticker { + self.selectedSticker = sticker; + // 追踪部位判断 + self.viewModel.detectingParts = self.selectedSticker.type == FUQualityStickerTypeAvatar ? FUDetectingPartsHuman : FUDetectingPartsFace; + [[NSNotificationCenter defaultCenter] postNotificationName:FUSelectedStickerDidChangeNotification object:sticker]; + + // 选中马上释放当前贴纸 + [self.viewModel releaseItem]; +} + +- (void)stickerPageController:(FUQualityStickerPageController *)controller shouldLoadSticker:(FUQualityStickerModel *)sticker { + if ([sticker.tag isEqualToString:self.selectedSticker.tag] && [sticker.itemId isEqualToString:self.selectedSticker.itemId]) { + // 只有当前选中的贴纸和需要加载的贴纸一致时执行加载 + if (sticker.isSingle) { + // 设置精品贴纸只对一个人脸有效 + self.viewModel.maxFaceNumber = 1; + } else { + // 最多四个人脸 + self.viewModel.maxHumanNumber = 4; + } + [self.viewModel loadItem:sticker]; + if (sticker.type == FUQualityStickerTypeAvatar) { + // 自动隐藏选择视图 + [self changeStickerViewStatus:NO]; + } + } +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.tags.count; +} +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUStickerContentCollectionCellIdentifier forIndexPath:indexPath]; + [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + FUQualityStickerPageController *controller = self.stickerControllers[indexPath.item]; + controller.view.frame = cell.contentView.frame; + [cell.contentView addSubview:controller.view]; + return cell; +} + +#pragma mark - Scroll view delegate + +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { + if (scrollView == self.contentCollectionView) { + NSInteger index = self.contentCollectionView.contentOffset.x / CGRectGetWidth(self.view.frame); + if (index < 0 || index >= self.tags.count) { + return; + } + self.segmentsView.selectedIndex = index; + } +} + +#pragma mark - Getters + +- (UIView *)bottomView { + if (!_bottomView) { + _bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(231), CGRectGetWidth(self.view.frame), FUHeightIncludeBottomSafeArea(231))]; + // 毛玻璃效果 + UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; + effectview.alpha = 1.0; + effectview.frame = CGRectMake(0, 0, CGRectGetWidth(_bottomView.frame), 182); + [_bottomView insertSubview:effectview atIndex:0]; + } + return _bottomView; +} + +- (UIView *)bottom { + if (!_bottom) { + _bottom = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), FUHeightIncludeBottomSafeArea(49))]; + _bottom.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:1]; + + [_bottom addSubview:self.cancelStickerButton]; + [self.cancelStickerButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(_bottom.mas_leading).mas_offset(6); + make.top.equalTo(_bottom.mas_top).mas_offset(4); + make.size.mas_offset(CGSizeMake(40, 40)); + }]; + + UIView *line = [[UIView alloc] init]; + line.backgroundColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]; + [_bottom addSubview:line]; + [line mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(self.cancelStickerButton.mas_trailing).mas_offset(10); + make.top.equalTo(_bottom.mas_top).mas_offset(14); + make.size.mas_offset(CGSizeMake(0.5, 20)); + }]; + + [_bottom addSubview:self.segmentsView]; + [self.segmentsView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.equalTo(_bottom.mas_leading).mas_offset(57); + make.top.trailing.equalTo(_bottom); + make.height.mas_offset(49); + }]; + + UIView *topLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 0.5)]; + topLine.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.2]; + [_bottom addSubview:topLine]; + [topLine mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.top.equalTo(_bottom); + make.height.mas_offset(0.5); + }]; + } + return _bottom; +} + +- (UIButton *)cancelStickerButton { + if (!_cancelStickerButton) { + _cancelStickerButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _cancelStickerButton.frame = CGRectMake(0, 0, 40, 40); + [_cancelStickerButton setImage:[UIImage imageNamed:@"sticker_cancel"] forState:UIControlStateNormal]; + [_cancelStickerButton addTarget:self action:@selector(cancelStickerAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _cancelStickerButton; +} + +- (FUSegmentBar *)segmentsView { + if (!_segmentsView) { + NSMutableArray *segments = [[NSMutableArray alloc] init]; + for (NSString *tag in self.tags) { + if ([tag componentsSeparatedByString:@"/"].count > 1) { + NSArray *titles = [tag componentsSeparatedByString:@"/"]; + NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; + [segments addObject: [language hasPrefix:@"zh-Hans"] ? titles[0] : titles[1]]; + } else { + [segments addObject:tag]; + } + } + _segmentsView = [[FUSegmentBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame) - 57, 49) titles:[segments copy] configuration:[FUSegmentBarConfigurations new]]; + _segmentsView.delegate = self; + } + return _segmentsView; +} + +- (UICollectionView *)contentCollectionView { + if (!_contentCollectionView) { + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0); + flowLayout.itemSize = CGSizeMake(CGRectGetWidth(self.view.frame), 182); + flowLayout.minimumLineSpacing = 0; + flowLayout.minimumInteritemSpacing = 0; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _contentCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 182) collectionViewLayout:flowLayout]; + _contentCollectionView.backgroundColor = [UIColor clearColor]; + _contentCollectionView.showsVerticalScrollIndicator = NO; + _contentCollectionView.showsHorizontalScrollIndicator = NO; + _contentCollectionView.pagingEnabled = YES; + _contentCollectionView.dataSource = self; + _contentCollectionView.delegate = self; + [_contentCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:kFUStickerContentCollectionCellIdentifier]; + } + return _contentCollectionView; +} +- (NSMutableArray *)stickerControllers { + if (!_stickerControllers) { + _stickerControllers = [[NSMutableArray alloc] init]; + for (NSString *tag in self.tags) { + FUQualityStickerPageController *stickerController = [[FUQualityStickerPageController alloc] initWithTag:tag]; + stickerController.qualityStickerViewModel = self.viewModel; + stickerController.delegate = self; + [_stickerControllers addObject:stickerController]; + } + } + return _stickerControllers; +} + +@end diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUStickersPageController.h b/FULiveDemo/Modules/QualitySticker/Controller/FUStickersPageController.h deleted file mode 100644 index 90dc2f99..00000000 --- a/FULiveDemo/Modules/QualitySticker/Controller/FUStickersPageController.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// FUStickersPageController.h -// FULiveDemo -// -// Created by 项林平 on 2021/3/16. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -@class FUStickerModel, FUStickersPageController, FUQualityStickerManager; - -NS_ASSUME_NONNULL_BEGIN - -extern NSString * const FUSelectedStickerDidChangeNotification; - -@protocol FUStickersPageControllerDelegate -/// 选中贴纸 -- (void)stickerPageController:(FUStickersPageController *)controller didSelectSticker:(FUStickerModel *)sticker; -/// 加载贴纸效果 -- (void)stickerPageController:(FUStickersPageController *)controller shouldLoadSticker:(FUStickerModel *)sticker; -@end - -@interface FUStickersPageController : UIViewController - -@property (nonatomic, weak) id delegate; - -@property (nonatomic, strong) FUQualityStickerManager *qualityStickerManager; - -- (instancetype)initWithTag:(NSString *)tag; - -- (void)reloadData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/Controller/FUStickersPageController.m b/FULiveDemo/Modules/QualitySticker/Controller/FUStickersPageController.m deleted file mode 100644 index 93526bfa..00000000 --- a/FULiveDemo/Modules/QualitySticker/Controller/FUStickersPageController.m +++ /dev/null @@ -1,215 +0,0 @@ -// -// FUStickersPageController.m -// FULiveDemo -// -// Created by 项林平 on 2021/3/16. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUStickersPageController.h" - -#import "FUStickerCell.h" - -#import "FUStickerModel.h" -#import "FUStickerHelper.h" -#import "FUQualityStickerManager.h" -#import "FUNetworkingHelper.h" - -#import - -static NSString * const kFUReuseIdentifier = @"FUStickerCell"; - -NSString * const FUSelectedStickerDidChangeNotification = @"FUSelectedStickerDidChangeNotification"; - -@interface FUStickersPageController () - -@property (nonatomic, strong) UICollectionView *collectionView; - -@property (nonatomic, copy) NSString *tag; - -@property (nonatomic, copy) NSArray *stickers; - -/// 选中贴纸 -@property (nonatomic, strong) FUStickerModel *selectedSticker; - -@end - -@implementation FUStickersPageController - -- (instancetype)initWithTag:(NSString *)tag { - self = [super init]; - if (self) { - self.tag = tag; - } - return self; -} - -#pragma mark - Life cycle - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor clearColor]; - - [self.view addSubview:self.collectionView]; - [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.view); - }]; - - if ([FUNetworkingHelper currentNetworkStatus] == FUNetworkStatusReachable) { - [self requestStickers]; - } else { - [self loadLocalStickers]; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selectedStickerChanged:) name:FUSelectedStickerDidChangeNotification object:nil]; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:FUSelectedStickerDidChangeNotification object:nil]; -} - -#pragma mark - Instance methods - -- (void)reloadData { - [self.collectionView reloadData]; -} - -#pragma mark - Private methods - -- (void)requestStickers { - [FUStickerHelper itemListWithTag:self.tag completion:^(NSArray * _Nullable dataArray, NSError * _Nullable error) { - if (!error) { - self.stickers = [dataArray copy]; - [FUStickerHelper updateLocalStickersWithStickers:self.stickers tag:self.tag]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView reloadData]; - }); - } else { - [self loadLocalStickers]; - } - }]; -} - -- (void)loadLocalStickers { - self.stickers = [FUStickerHelper localStickersWithTag:self.tag]; - [self.collectionView reloadData]; -} - -- (void)selectSticker:(FUStickerModel *)sticker { - if (self.delegate && [self.delegate respondsToSelector:@selector(stickerPageController:didSelectSticker:)]) { - [self.delegate stickerPageController:self didSelectSticker:sticker]; - } -} - - -#pragma mark - Event response - -- (void)selectedStickerChanged:(NSNotification *)notification { - if (!notification.object) { - // 取消贴纸效果 - if (self.selectedSticker) { - self.selectedSticker.selected = NO; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView reloadData]; - }); - } else { - // 改变选中贴纸 - FUStickerModel *sticker = (FUStickerModel *)notification.object; - if ([self.selectedSticker.tag isEqualToString:sticker.tag] && [self.selectedSticker.itemId isEqualToString:sticker.itemId]) { - // 已经选中的情况 - return; - } - // 其他页面需要取消当前选择 - if (self.selectedSticker) { - self.selectedSticker.selected = NO; - } - sticker.selected = YES; - self.selectedSticker = sticker; - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView reloadData]; - }); - } -} - -#pragma mark - Collection view data source - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.stickers.count; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath { - FUStickerCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUReuseIdentifier forIndexPath:indexPath]; - FUStickerModel *model = self.stickers[indexPath.row] ; - cell.model = model; - cell.selected = model.isSelected; - return cell; -} - -#pragma mark - Collection view delegate - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - FUStickerModel *sticker = self.stickers[indexPath.item]; - if (sticker.isSelected && [FUStickerHelper downloadStatusOfSticker:sticker]) { - return; - } - // 直接选中新道具 - [self selectSticker:sticker]; - if (![FUStickerHelper downloadStatusOfSticker:sticker]) { - if ([FUNetworkingHelper currentNetworkStatus] != FUNetworkStatusReachable) { - [FUTipHUD showTips:FUNSLocalizedString(@"下载失败", nil)]; - return; - } - // 开始下载 - sticker.loading = YES; - FUStickerCell *cell = (FUStickerCell *)[collectionView cellForItemAtIndexPath:indexPath]; - [cell setModel:sticker]; - - [self.qualityStickerManager downloadItem:sticker completion:^(NSError * _Nullable error) { - sticker.loading = NO; - dispatch_async(dispatch_get_main_queue(), ^{ - [collectionView reloadData]; - }); - if (!error) { - // 下载完成以后加载贴纸 - if (self.delegate && [self.delegate respondsToSelector:@selector(stickerPageController:shouldLoadSticker:)]) { - [self.delegate stickerPageController:self shouldLoadSticker:sticker]; - } - } else { - NSLog(@"download fail"); - [FUTipHUD showTips:FUNSLocalizedString(@"下载失败", nil)]; - } - }]; - - } else { - // 直接加载贴纸 - if (self.delegate && [self.delegate respondsToSelector:@selector(stickerPageController:shouldLoadSticker:)]) { - [self.delegate stickerPageController:self shouldLoadSticker:sticker]; - } - } -} - -#pragma mark - Getters - -- (UICollectionView *)collectionView { - if (!_collectionView) { - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.minimumLineSpacing = 22; - flowLayout.minimumInteritemSpacing = (CGRectGetWidth(self.view.frame) - 287) / 4.f - 1; - flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; - flowLayout.sectionInset = UIEdgeInsetsMake(16, 16, 5, 16); - flowLayout.itemSize = CGSizeMake(51, 51); - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; - _collectionView.backgroundColor = [UIColor clearColor]; - [self.collectionView registerNib:[UINib nibWithNibName:@"FUStickerCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:kFUReuseIdentifier]; - _collectionView.showsHorizontalScrollIndicator = NO; - _collectionView.showsVerticalScrollIndicator = NO; - _collectionView.allowsMultipleSelection = NO; - _collectionView.dataSource = self; - _collectionView.delegate = self; - } - return _collectionView; -} - -@end diff --git a/FULiveDemo/Modules/QualitySticker/Manager/FUQualityStickerManager.h b/FULiveDemo/Modules/QualitySticker/Manager/FUQualityStickerManager.h deleted file mode 100644 index 9412bffa..00000000 --- a/FULiveDemo/Modules/QualitySticker/Manager/FUQualityStickerManager.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// FUQualtyStickerManager.h -// FULiveDemo -// -// Created by Chen on 2021/3/31. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" - -#import "FUStickerModel.h" - - -NS_ASSUME_NONNULL_BEGIN - -@interface FUQualityStickerManager : FUMetaManager - -/// 下载道具 -- (void)downloadItem:(FUStickerModel *)sticker completion:(void (^)(NSError * _Nullable error))completion; - -/// 取消当前队列中的下载任务 -- (void)cancelDownloadingTasks; - -/// 加载精品贴纸道具 -- (void)loadItem:(FUStickerModel *)sticker; - -/// 设置当前精品贴纸 is_click 属性状态 -- (void)clickCurrentItem; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/Manager/FUQualityStickerManager.m b/FULiveDemo/Modules/QualitySticker/Manager/FUQualityStickerManager.m deleted file mode 100644 index 15136949..00000000 --- a/FULiveDemo/Modules/QualitySticker/Manager/FUQualityStickerManager.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// FUQualtyStickerManager.m -// FULiveDemo -// -// Created by Chen on 2021/3/31. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUQualityStickerManager.h" -#import "FUStickerHelper.h" - -#import - -/// 允许同时下载任务最大数量 -static NSInteger const kFUDownloadTasksMaxNumber = 4; - -@interface FUQualityStickerManager () - -@property (nonatomic, strong) FUQualitySticker *curStickItem; - -// 特殊道具(Avatar) -@property (nonatomic, strong) FUScene *scene; -@property (nonatomic, strong) FUAvatar *avatar; - -/// 下载队列 -@property (nonatomic, strong) NSOperationQueue *downloadQueue; - -@end - -@implementation FUQualityStickerManager - -#pragma mark - Instance methods - -- (void)downloadItem:(FUStickerModel *)sticker completion:(void (^)(NSError * _Nullable))completion { - [self.downloadQueue addOperationWithBlock:^{ - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - [FUStickerHelper downloadItem:sticker completion:^(NSError * _Nullable error) { - dispatch_semaphore_signal(semaphore); - if (error) { - completion(error); - } else { - completion(nil); - } - }]; - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - }]; -} - -- (void)cancelDownloadingTasks { - [self.downloadQueue cancelAllOperations]; -} - -- (void)loadItem:(FUStickerModel *)sticker { - switch (sticker.type) { - case FUQualityStickerTypeAvatar:{ - // Avatar道具加载 - [self loadAvatarItem:sticker]; - } - break; - case FUQualityStickerTypeCommon:{ - // 普通道具加载 - [self loadCommonItem:sticker]; - } - break; - } -} - -- (void)clickCurrentItem { - if (!_curStickItem) { - return; - } - [_curStickItem clickToChange]; -} - -- (void)releaseItem { - if (_scene) { - [[FURenderKit shareRenderKit] removeScene:self.scene completion:^(BOOL success) { - [FURenderKit shareRenderKit].currentScene = nil; - }]; - } - if (_curStickItem) { - [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; - } -} - -#pragma mark - Private methods -- (void)loadAvatarItem:(FUStickerModel *)stickerModel { - - [[FURenderKit shareRenderKit] addScene:self.scene completion:^(BOOL success) { - // 读取json配置文件 - NSString *jsonFilePath = [[[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.stickerId] stringByAppendingPathComponent:@"info.json"]; - if (![[NSFileManager defaultManager] fileExistsAtPath:jsonFilePath]) { - NSLog(@"Avatar道具缺少info.json文件"); - return; - } - - NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:jsonFilePath] options:NSJSONReadingMutableLeaves error:nil]; - if (!dictionary) { - NSLog(@"info.json文件错误"); - return; - } - - for (NSString *keyString in dictionary.allKeys) { - if ([keyString isEqualToString:@"components"]) { - // 身体组件 - NSArray *components = (NSArray *)dictionary[keyString]; - for (NSString *componentBundleString in components) { - NSString *componentPath = [[[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.stickerId] stringByAppendingPathComponent:componentBundleString]; - FUItem *componentItem = [FUItem itemWithPath:componentPath name:componentBundleString]; - [self.avatar addComponent:componentItem]; - } - } else if ([keyString isEqualToString:@"anims"]) { - // 动画 - NSArray *animations = (NSArray *)dictionary[keyString]; - for (NSString *animationBundleString in animations) { - NSString *animationPath = [[[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.stickerId] stringByAppendingPathComponent:animationBundleString]; - FUAnimation *animationItem = [FUAnimation itemWithPath:animationPath name:animationBundleString]; - if (animationItem) { - [self.avatar addAnimation:animationItem]; - } - } - } - } - [self.scene addAvatar:self.avatar]; - self.avatar.position = FUPositionMake(25.2, iPhoneXStyle ? (56.14 - 50.0*24.0/72.0) : 56.14, -537.94); - self.avatar.humanProcessorType = 0; - [self.avatar setEnableHumanAnimDriver:YES]; - self.scene.AIConfig.avatarTranslationScale = FUPositionMake(0.45, 0.45, 0.25); - [self.scene.AIConfig setAvatarAnimFilter:7 pos:0.05 angle:0.1]; - NSLog(@"Load success"); - [FURenderKit shareRenderKit].currentScene = self.scene; - - }]; -} - -- (void)loadCommonItem:(FUStickerModel *)stickerModel { - NSString *filePath = [[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.itemId]; - BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath]; - if (isExist) { - FUQualitySticker *item = [[FUQualitySticker alloc] initWithPath:filePath name:stickerModel.stickerId]; - item.isFlipPoints = stickerModel.isMakeupItem; - item.is3DFlipH = stickerModel.is3DFlipH; - [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.curStickItem withSticker:item completion:^{ - NSLog(@"Load success"); - }]; - self.curStickItem = item; - } else { - NSLog(@"精品贴纸道具不存在"); - } -} - -#pragma mark - Getters -- (FUScene *)scene { - if (!_scene) { - _scene = [[FUScene alloc] init]; - _scene.AIConfig.bodyTrackEnable = YES; - _scene.AIConfig.bodyTrackMode = FUBodyTrackModeFull; - } - return _scene; -} - -- (FUAvatar *)avatar { - if (!_avatar) { - _avatar = [[FUAvatar alloc] init]; - } - return _avatar; -} - -- (NSOperationQueue *)downloadQueue { - if (!_downloadQueue) { - _downloadQueue = [[NSOperationQueue alloc] init]; - _downloadQueue.maxConcurrentOperationCount = kFUDownloadTasksMaxNumber; - } - return _downloadQueue; -} - -@end diff --git a/FULiveDemo/Modules/QualitySticker/Manager/FUStickerHelper.h b/FULiveDemo/Modules/QualitySticker/Manager/FUStickerHelper.h deleted file mode 100644 index 33ca7c55..00000000 --- a/FULiveDemo/Modules/QualitySticker/Manager/FUStickerHelper.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// FUStickerHelper.h -// FULiveDemo -// -// Created by 项林平 on 2021/3/11. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -@class FUStickerModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUStickerHelper : NSObject - -#pragma mark - Network request - -/// 获取道具Tag数组 -/// @param complection 结果回调 -+ (void)itemTagsCompletion:(void (^)(BOOL isSuccess, NSArray * _Nullable tags))complection; - -/// 获取道具数据数组 -/// @param tag 道具Tag -/// @param completion 结果回调 -+ (void)itemListWithTag:(NSString *)tag - completion:(void (^)(NSArray * _Nullable dataArray, NSError * _Nullable error))completion; - -/// 下载单个道具 -/// @param sticker 道具 -/// @param completion 结果回调 -+ (void)downloadItem:(FUStickerModel *)sticker completion:(void (^)(NSError * _Nullable error))completion; - -/// 取消所有精品贴纸相关网络任务 -+ (void)cancelStickerHTTPTasks; - -#pragma mark - Local stickers - -/// 获取本地贴纸数组(无网络情况) -/// @param stickerTag 贴纸标签 -+ (NSArray *)localStickersWithTag:(NSString *)stickerTag; - -/// 根据网络贴纸更新本地贴纸 -/// @param stickers 网络贴纸数组 -/// @param stickerTag 贴纸标签 -+ (void)updateLocalStickersWithStickers:(NSArray *)stickers tag:(NSString *)stickerTag; - -/// 判断贴纸是否已经下载 -/// @param sticker 贴纸 -+ (BOOL)downloadStatusOfSticker:(FUStickerModel *)sticker; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/Manager/FUStickerHelper.m b/FULiveDemo/Modules/QualitySticker/Manager/FUStickerHelper.m deleted file mode 100644 index cef5e71c..00000000 --- a/FULiveDemo/Modules/QualitySticker/Manager/FUStickerHelper.m +++ /dev/null @@ -1,200 +0,0 @@ -// -// FUStickerHelper.m -// FULiveDemo -// -// Created by 项林平 on 2021/3/11. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUStickerHelper.h" -#import "FUNetworkingHelper.h" - -#import "FUStickerModel.h" - -#import - -@implementation FUStickerHelper - -+ (void)itemTagsCompletion:(void (^)(BOOL, NSArray * _Nullable))complection { - [[FUNetworkingHelper sharedInstance] getWithURL:@"guest/tags" parameters:@{@"platform" : @"mobile"} success:^(id _Nonnull responseObject) { - if (responseObject[@"data"]) { - NSArray *resultArray = [responseObject[@"data"] copy]; - !complection ?: complection(YES, resultArray); - } else { - !complection ?: complection(NO, nil); - } - } failure:^(NSError * _Nonnull error) { - !complection ?: complection(NO, nil); - }]; -} -+ (void)itemListWithTag:(NSString *)tag completion:(void (^)(NSArray *, NSError *))completion { - NSDictionary *params = @{ - @"platform" : @"mobile", - @"tag" : tag - }; - [[FUNetworkingHelper sharedInstance] postWithURL:@"guest/tools" parameters:params success:^(id _Nonnull responseObject) { - NSMutableArray *resultArray = [NSMutableArray array]; - if (responseObject[@"data"][@"docs"]) { - NSArray *array = responseObject[@"data"][@"docs"]; - for (int i = 0; i < array.count; i++) { - NSDictionary *doc = array[i]; - if (!doc || [doc isKindOfClass:[NSNull class]]) { - continue; - } - FUStickerModel *model = [[FUStickerModel alloc] init]; - model.tag = tag; - model.stickerId = doc[@"tool"][@"_id"]; - model.iconId = doc[@"tool"][@"icon"][@"uid"]; - model.iconURLString = doc[@"tool"][@"icon"][@"url"]; - model.itemId = doc[@"tool"][@"bundle"][@"uid"]; - // 道具类型 - model.type = [doc[@"tool"][@"category"] isEqualToString:@"avatar"] ? FUQualityStickerTypeAvatar : FUQualityStickerTypeCommon; - // 特殊道具处理 - if (doc[@"tool"][@"adapter"] && [doc[@"tool"][@"adapter"] length] > 0) { - NSString *adapterString = doc[@"tool"][@"adapter"]; - model.keepPortrait = [adapterString containsString:@"0"]; - model.single = [adapterString containsString:@"1"]; - model.makeupItem = [adapterString containsString:@"2"]; - model.needClick = [adapterString containsString:@"3"]; - model.is3DFlipH = [adapterString containsString:@"4"]; - } else { - model.keepPortrait = NO; - model.single = NO; - model.makeupItem = NO; - model.needClick = NO; - model.is3DFlipH = NO; - } - [resultArray addObject:model]; - } - } - !completion ?: completion(resultArray, nil); - } failure:^(NSError * _Nonnull error) { - NSLog(@"获取贴纸列表失败"); - !completion ?: completion(nil, error); - }]; -} - -+ (void)downloadItem:(FUStickerModel *)sticker completion:(void (^)(NSError * _Nullable))completion { - [[FUNetworkingHelper sharedInstance] getWithURL:@"guest/download" parameters:@{@"id" : sticker.stickerId, @"platform" : @"mobile"} success:^(id _Nonnull responseObject) { - if (responseObject[@"data"][@"url"]) { - NSString *downloadURLString = responseObject[@"data"][@"url"]; - NSString *directoryPathString = [FUStickerBundlesPath stringByAppendingPathComponent:sticker.tag]; - if (![[NSFileManager defaultManager] fileExistsAtPath:directoryPathString]) { - [[NSFileManager defaultManager] createDirectoryAtPath:directoryPathString withIntermediateDirectories:YES attributes:nil error:nil]; - } - [[FUNetworkingHelper sharedInstance] downloadWithURL:downloadURLString directoryPath:directoryPathString fileName:sticker.itemId progress:^(NSProgress * _Nonnull progress) { - } success:^(id _Nonnull responseObject) { - NSURL *responseURL = (NSURL *)responseObject; - if ([responseURL.pathExtension isEqualToString:@"zip"]) { - // zip包需要解压,当前目录新建子目录 - NSString *unzipDestonationPath = [directoryPathString stringByAppendingPathComponent:sticker.stickerId]; - if (![[NSFileManager defaultManager] fileExistsAtPath:unzipDestonationPath]) { - [[NSFileManager defaultManager] createDirectoryAtPath:unzipDestonationPath withIntermediateDirectories:YES attributes:nil error:nil]; - } - if ([SSZipArchive unzipFileAtPath:responseURL.path toDestination:unzipDestonationPath]) { - !completion ?: completion(nil); - } else { - NSLog(@"道具解压失败"); - // 解压失败暂时认为压缩包有问题,删除本地文件 - [[NSFileManager defaultManager] removeItemAtURL:responseURL error:nil]; - !completion ?: completion([NSError errorWithDomain:NSCocoaErrorDomain code:-1 userInfo:@{NSUnderlyingErrorKey : @"Unzip failed"}]); - } - } else { - !completion ?: completion(nil); - } - } failure:^(NSError * _Nonnull error) { - !completion ?: completion(error); - }]; - } else { - !completion ?: completion([NSError errorWithDomain:NSCocoaErrorDomain code:-1 userInfo:@{NSUnderlyingErrorKey : @"Empty URL"}]); - } - } failure:^(NSError * _Nonnull error) { - !completion ?: completion(error); - }]; -} - -+ (void)cancelStickerHTTPTasks { - [[FUNetworkingHelper sharedInstance] cancelAllHttpRequests]; -} - -+ (NSArray *)localStickersWithTag:(NSString *)stickerTag { - NSString *stickersDataPathString = [[FUStickersPath stringByAppendingPathComponent:stickerTag] stringByAppendingPathComponent:@"FUStickerModels.data"]; - if (![[NSFileManager defaultManager] fileExistsAtPath:stickersDataPathString]) { - return nil; - } - return [[NSKeyedUnarchiver unarchiveObjectWithFile:stickersDataPathString] copy]; -} - -+ (void)updateLocalStickersWithStickers:(NSArray *)stickers tag:(NSString *)stickerTag { - if (stickers.count == 0) { - return; - } - NSString *stickersFilePathString = [FUStickersPath stringByAppendingPathComponent:stickerTag]; - NSString *stickersDataPathString = [stickersFilePathString stringByAppendingPathComponent:@"FUStickerModels.data"]; - if (![[NSFileManager defaultManager] fileExistsAtPath:stickersFilePathString]) { - // 本地还没有创建文件夹,先创建文件夹,再保存最新贴纸 - if ([[NSFileManager defaultManager] createDirectoryAtPath:stickersFilePathString withIntermediateDirectories:YES attributes:nil error:nil]) { - [NSKeyedArchiver archiveRootObject:stickers toFile:stickersDataPathString]; - } - return; - } - NSArray *localStickers = [NSKeyedUnarchiver unarchiveObjectWithFile:stickersDataPathString]; - if (!localStickers || localStickers.count == 0) { - // 本地贴纸为空,直接保存最新贴纸 - [NSKeyedArchiver archiveRootObject:stickers toFile:stickersDataPathString]; - return; - } - - // 删除本地数据 - [[NSFileManager defaultManager] removeItemAtPath:stickersDataPathString error:nil]; - - // 更新为最新数据 - [NSKeyedArchiver archiveRootObject:stickers toFile:stickersDataPathString]; - - // 删除本地多余的icon数据 - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ - NSString *iconsPath = [FUStickerIconsPath stringByAppendingPathComponent:stickerTag]; - NSArray *iconDataArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:iconsPath error:nil] copy]; - for (NSString *iconName in iconDataArray) { - BOOL needDelete = YES; - for (FUStickerModel *model in stickers) { - if ([model.iconId isEqualToString:iconName]) { - // 新贴纸中存在该icon,不需要删除 - needDelete = NO; - break; - } - } - if (needDelete) { - // 需要删除该icon - [[NSFileManager defaultManager] removeItemAtPath:[iconsPath stringByAppendingPathComponent:iconName] error:nil]; - } - } - }); - - // 删除本地多余的道具包 - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ - NSString *itemsPath = [FUStickerIconsPath stringByAppendingPathComponent:stickerTag]; - NSArray *itemDataArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:itemsPath error:nil] copy]; - for (NSString *itemName in itemDataArray) { - BOOL needDelete = YES; - for (FUStickerModel *model in stickers) { - if ([model.iconId isEqualToString:itemName]) { - // 新贴纸中存在该道具,不需要删除 - needDelete = NO; - break; - } - } - if (needDelete) { - // 需要删除该道具 - [[NSFileManager defaultManager] removeItemAtPath:[itemsPath stringByAppendingPathComponent:itemName] error:nil]; - } - } - }); -} - -+ (BOOL)downloadStatusOfSticker:(FUStickerModel *)sticker { - NSString *itemPath = [[FUStickerBundlesPath stringByAppendingPathComponent:sticker.tag] stringByAppendingPathComponent:sticker.itemId]; - return [[NSFileManager defaultManager] fileExistsAtPath:itemPath]; -} - -@end diff --git a/FULiveDemo/Modules/QualitySticker/Model/FUQualityStickerModel.h b/FULiveDemo/Modules/QualitySticker/Model/FUQualityStickerModel.h new file mode 100755 index 00000000..8812668f --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/Model/FUQualityStickerModel.h @@ -0,0 +1,45 @@ +// +// FUQualityStickerModel.h +// FULive +// +// Created by L on 2018/9/12. +// Copyright © 2018年 faceUnity. All rights reserved. +// + +#import + +/// 精品贴纸类型 +typedef NS_ENUM(NSUInteger, FUQualityStickerType) { + FUQualityStickerTypeCommon, // 通用 + FUQualityStickerTypeAvatar // Avatar +}; + +@interface FUQualityStickerModel : NSObject + +@property (nonatomic, assign) FUQualityStickerType type; + +@property (nonatomic, copy) NSString *tag; +/// 道具ID,根据此ID获取道具包 +@property (nonatomic, copy) NSString *stickerId; +/// icon唯一标识,用该标识命名本地icon路径 +@property (nonatomic, copy) NSString *iconId; +/// icon网络地址 +@property (nonatomic, copy) NSString *iconURLString; +/// 道具包唯一标识,用该标识命名本地道具包路径 +@property (nonatomic, copy) NSString *itemId; +/// 是否正在下载 +@property (nonatomic, assign, getter=isLoading) BOOL loading; +/// 是否维持竖屏 +@property (nonatomic, assign, getter=isKeepPortrait) BOOL keepPortrait; +/// 是否仅限一人 +@property (nonatomic, assign, getter=isSingle) BOOL single; +/// 是否美妆道具 +@property (nonatomic, assign, getter=isMakeupItem) BOOL makeupItem; +/// 是否需要点击事件 +@property (nonatomic, assign, getter=isNeedClick) BOOL needClick; +/// 是否翻转模型 +@property (nonatomic, assign) BOOL is3DFlipH; +/// 是否被选中 +@property (nonatomic, assign, getter=isSelected) BOOL selected; + +@end diff --git a/FULiveDemo/Modules/QualitySticker/Model/FUQualityStickerModel.m b/FULiveDemo/Modules/QualitySticker/Model/FUQualityStickerModel.m new file mode 100755 index 00000000..2d87e1cb --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/Model/FUQualityStickerModel.m @@ -0,0 +1,25 @@ +// +// FUQualityStickerModel.m +// FULive +// +// Created by L on 2018/9/12. +// Copyright © 2018年 faceUnity. All rights reserved. +// + +#import "FUQualityStickerModel.h" + +@implementation FUQualityStickerModel + +- (instancetype)initWithCoder:(NSCoder *)coder { + self = [super init]; + if (self) { + [self mj_decode:coder]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [self mj_encode:coder]; +} + +@end diff --git a/FULiveDemo/Modules/QualitySticker/Model/FUStickerModel.h b/FULiveDemo/Modules/QualitySticker/Model/FUStickerModel.h deleted file mode 100755 index eec909ce..00000000 --- a/FULiveDemo/Modules/QualitySticker/Model/FUStickerModel.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// FUStickerModel.h -// FULive -// -// Created by L on 2018/9/12. -// Copyright © 2018年 faceUnity. All rights reserved. -// - -#import - -/// 精品贴纸类型 -typedef NS_ENUM(NSUInteger, FUQualityStickerType) { - FUQualityStickerTypeCommon, // 通用 - FUQualityStickerTypeAvatar // Avatar -}; - -@interface FUStickerModel : NSObject - -@property (nonatomic, assign) FUQualityStickerType type; - -@property (nonatomic, copy) NSString *tag; -/// 道具ID,根据此ID获取道具包 -@property (nonatomic, copy) NSString *stickerId; -/// icon唯一标识,用该标识命名本地icon路径 -@property (nonatomic, copy) NSString *iconId; -/// icon网络地址 -@property (nonatomic, copy) NSString *iconURLString; -/// 道具包唯一标识,用该标识命名本地道具包路径 -@property (nonatomic, copy) NSString *itemId; -/// 是否正在下载 -@property (nonatomic, assign, getter=isLoading) BOOL loading; -/// 是否维持竖屏 -@property (nonatomic, assign, getter=isKeepPortrait) BOOL keepPortrait; -/// 是否仅限一人 -@property (nonatomic, assign, getter=isSingle) BOOL single; -/// 是否美妆道具 -@property (nonatomic, assign, getter=isMakeupItem) BOOL makeupItem; -/// 是否需要点击事件 -@property (nonatomic, assign, getter=isNeedClick) BOOL needClick; -/// 是否翻转模型 -@property (nonatomic, assign) BOOL is3DFlipH; -/// 是否被选中 -@property (nonatomic, assign, getter=isSelected) BOOL selected; - -@end diff --git a/FULiveDemo/Modules/QualitySticker/Model/FUStickerModel.m b/FULiveDemo/Modules/QualitySticker/Model/FUStickerModel.m deleted file mode 100755 index a3a6596a..00000000 --- a/FULiveDemo/Modules/QualitySticker/Model/FUStickerModel.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// FUStickerModel.m -// FULive -// -// Created by L on 2018/9/12. -// Copyright © 2018年 faceUnity. All rights reserved. -// - -#import "FUStickerModel.h" - -@implementation FUStickerModel - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super init]; - if (self) { - [self mj_decode:coder]; - } - return self ; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [self mj_encode:coder]; -} - -@end diff --git a/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.h b/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.h new file mode 100644 index 00000000..95c44ed2 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.h @@ -0,0 +1,26 @@ +// +// FUQualityStickerCell.h +// FULiveDemo +// +// Created by 项林平 on 2021/3/16. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import + +@class FUQualityStickerModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUQualityStickerCell : UICollectionViewCell + +@property (weak, nonatomic) IBOutlet UIView *selectedTipView; +@property (weak, nonatomic) IBOutlet UIImageView *imageView; +@property (weak, nonatomic) IBOutlet UIImageView *downloadIcon; +@property (weak, nonatomic) IBOutlet UIImageView *loadImage; + +@property (nonatomic, strong) FUQualityStickerModel *model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.m b/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.m new file mode 100644 index 00000000..668110d3 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.m @@ -0,0 +1,105 @@ +// +// FUQualityStickerCell.m +// FULiveDemo +// +// Created by 项林平 on 2021/3/16. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUQualityStickerCell.h" + +#import "FUQualityStickerModel.h" + +#import "FUQualityStickerHelper.h" + +#import + +@implementation FUQualityStickerCell + +-(void)awakeFromNib { + [super awakeFromNib]; + + self.selectedTipView.layer.masksToBounds = YES; + self.selectedTipView.layer.cornerRadius = 25.5; + + self.imageView.layer.masksToBounds = YES; + self.imageView.layer.cornerRadius = 22; +} + +-(void)setModel:(FUQualityStickerModel *)model { + _model = model; + + NSLog(@"model.iconURLString: %@", model.iconURLString); + + if (!model.iconURLString) { + // icon网络链接为空 + self.imageView.image = [UIImage imageNamed:@"sticker_placeholder"]; + } else { + NSString *iconPath = [[FUStickerIconsPath stringByAppendingPathComponent:model.tag] stringByAppendingPathComponent:model.iconId]; + BOOL hasDownloadIcon = [[NSFileManager defaultManager] fileExistsAtPath:iconPath]; + if (hasDownloadIcon) { + // 已经保存了icon,直接设置本地icon + NSData *iconData = [NSData dataWithContentsOfFile:iconPath]; + self.imageView.image = [UIImage imageWithData:iconData]; + } else { + // 未保存时需要设置网络图片 + [self.imageView sd_setImageWithURL:[NSURL URLWithString:model.iconURLString] placeholderImage:[UIImage imageNamed:@"sticker_placeholder"] options:SDWebImageAllowInvalidSSLCertificates completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { + if (error || !image) { + return; + } + // 网络图片数据保存到本地 + NSString *iconDirectoryPath = [FUStickerIconsPath stringByAppendingPathComponent:model.tag]; + if (![[NSFileManager defaultManager] fileExistsAtPath:iconDirectoryPath]) { + [[NSFileManager defaultManager] createDirectoryAtPath:iconDirectoryPath withIntermediateDirectories:YES attributes:nil error:nil]; + } + NSData *imageData = UIImagePNGRepresentation(image); + [imageData writeToFile:iconPath atomically:YES]; + }]; + } + } + + if ([FUQualityStickerHelper downloadStatusOfSticker:model]) { + self.imageView.alpha = 1.0; + self.downloadIcon.hidden = YES; + self.loadImage.hidden = YES; + } else { + if (model.isLoading) { + self.downloadIcon.hidden = YES; + self.loadImage.hidden = NO; + self.imageView.alpha = 0.5; + [self startLoadingAnimation]; + } else { + self.imageView.alpha = 1.0; + self.downloadIcon.hidden = NO; + self.loadImage.hidden = YES; + } + } +} + +#pragma mark - Animation +- (void)startLoadingAnimation { + + CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; + animation.fromValue = @0; + animation.toValue = @(M_PI * 2); + animation.repeatCount = MAXFLOAT; + animation.duration = 1; + [self.loadImage.layer addAnimation:animation forKey:nil]; +} + +- (void)stopLoadingAnimation { + [self.loadImage.layer removeAllAnimations]; +} + +#pragma mark - Setters +- (void)setSelected:(BOOL)selected { + if (selected) { + self.selectedTipView.layer.borderWidth = 1.5; + self.selectedTipView.layer.borderColor = FUColorFromHex(0x1FB2FF).CGColor; + } else { + self.selectedTipView.layer.borderWidth = 0; + self.selectedTipView.layer.borderColor = [UIColor clearColor].CGColor; + } +} + +@end diff --git a/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.xib b/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.xib new file mode 100755 index 00000000..ffb0d666 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/View/FUQualityStickerCell.xib @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.h b/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.h deleted file mode 100644 index 40513a41..00000000 --- a/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FUStickerCell.h -// FULiveDemo -// -// Created by 项林平 on 2021/3/16. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -@class FUStickerModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUStickerCell : UICollectionViewCell - -@property (weak, nonatomic) IBOutlet UIView *selectedTipView; -@property (weak, nonatomic) IBOutlet UIImageView *imageView; -@property (weak, nonatomic) IBOutlet UIImageView *downloadIcon; -@property (weak, nonatomic) IBOutlet UIImageView *loadImage; - -@property (nonatomic, strong) FUStickerModel *model ; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.m b/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.m deleted file mode 100644 index 4e0f53f9..00000000 --- a/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// FUStickerCell.m -// FULiveDemo -// -// Created by 项林平 on 2021/3/16. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUStickerCell.h" - -#import "FUStickerModel.h" - -#import "FUStickerHelper.h" - -#import - -@implementation FUStickerCell - --(void)awakeFromNib { - [super awakeFromNib]; - - self.selectedTipView.layer.masksToBounds = YES; - self.selectedTipView.layer.cornerRadius = 25.5; - - self.imageView.layer.masksToBounds = YES; - self.imageView.layer.cornerRadius = 22; -} - --(void)setModel:(FUStickerModel *)model { - _model = model ; - - NSLog(@"model.iconURLString: %@", model.iconURLString); - - if (!model.iconURLString) { - // icon网络链接为空 - self.imageView.image = [UIImage imageNamed:@"sticker_placeholder"]; - } else { - NSString *iconPath = [[FUStickerIconsPath stringByAppendingPathComponent:model.tag] stringByAppendingPathComponent:model.iconId]; - BOOL hasDownloadIcon = [[NSFileManager defaultManager] fileExistsAtPath:iconPath]; - if (hasDownloadIcon) { - // 已经保存了icon,直接设置本地icon - NSData *iconData = [NSData dataWithContentsOfFile:iconPath]; - self.imageView.image = [UIImage imageWithData:iconData]; - } else { - // 未保存时需要设置网络图片 - [self.imageView sd_setImageWithURL:[NSURL URLWithString:model.iconURLString] placeholderImage:[UIImage imageNamed:@"sticker_placeholder"] options:SDWebImageAllowInvalidSSLCertificates completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - if (error || !image) { - return; - } - // 网络图片数据保存到本地 - NSString *iconDirectoryPath = [FUStickerIconsPath stringByAppendingPathComponent:model.tag]; - if (![[NSFileManager defaultManager] fileExistsAtPath:iconDirectoryPath]) { - [[NSFileManager defaultManager] createDirectoryAtPath:iconDirectoryPath withIntermediateDirectories:YES attributes:nil error:nil]; - } - NSData *imageData = UIImagePNGRepresentation(image); - [imageData writeToFile:iconPath atomically:YES]; - }]; - } - } - - if ([FUStickerHelper downloadStatusOfSticker:model]) { - self.imageView.alpha = 1.0 ; - self.downloadIcon.hidden = YES ; - self.loadImage.hidden = YES ; - } else { - if (model.isLoading) { - self.downloadIcon.hidden = YES; - self.loadImage.hidden = NO ; - self.imageView.alpha = 0.5 ; - [self startLoadingAnimation]; - } else { - self.imageView.alpha = 1.0 ; - self.downloadIcon.hidden = NO; - self.loadImage.hidden = YES ; - } - } -} - -#pragma mark - Animation -- (void)startLoadingAnimation { - - CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; - animation.fromValue = @0; - animation.toValue = @(M_PI * 2); - animation.repeatCount = MAXFLOAT; - animation.duration = 1 ; - [self.loadImage.layer addAnimation:animation forKey:nil]; -} - -- (void)stopLoadingAnimation { - [self.loadImage.layer removeAllAnimations]; -} - -#pragma mark - Setters -- (void)setSelected:(BOOL)selected { - if (selected) { - self.selectedTipView.layer.borderWidth = 1.5; - self.selectedTipView.layer.borderColor = [UIColor colorWithHexColorString:@"1FB2FF"].CGColor; - } else { - self.selectedTipView.layer.borderWidth = 0; - self.selectedTipView.layer.borderColor = [UIColor clearColor].CGColor; - } -} - -@end diff --git a/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.xib b/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.xib deleted file mode 100755 index 9c9266dd..00000000 --- a/FULiveDemo/Modules/QualitySticker/View/FUStickerCell.xib +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerHelper.h b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerHelper.h new file mode 100644 index 00000000..b31a3001 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerHelper.h @@ -0,0 +1,54 @@ +// +// FUQualityStickerHelper.h +// FULiveDemo +// +// Created by 项林平 on 2021/3/11. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import + +@class FUQualityStickerModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUQualityStickerHelper : NSObject + +#pragma mark - Network request + +/// 获取道具Tag数组 +/// @param complection 结果回调 ++ (void)itemTagsCompletion:(void (^)(BOOL isSuccess, NSArray * _Nullable tags))complection; + +/// 获取道具数据数组 +/// @param tag 道具Tag +/// @param completion 结果回调 ++ (void)itemListWithTag:(NSString *)tag + completion:(void (^)(NSArray * _Nullable dataArray, NSError * _Nullable error))completion; + +/// 下载单个道具 +/// @param sticker 道具 +/// @param completion 结果回调 ++ (void)downloadItem:(FUQualityStickerModel *)sticker completion:(void (^)(NSError * _Nullable error))completion; + +/// 取消所有精品贴纸相关网络任务 ++ (void)cancelStickerHTTPTasks; + +#pragma mark - Local stickers + +/// 获取本地贴纸数组(无网络情况) +/// @param stickerTag 贴纸标签 ++ (NSArray *)localStickersWithTag:(NSString *)stickerTag; + +/// 根据网络贴纸更新本地贴纸 +/// @param stickers 网络贴纸数组 +/// @param stickerTag 贴纸标签 ++ (void)updateLocalStickersWithStickers:(NSArray *)stickers tag:(NSString *)stickerTag; + +/// 判断贴纸是否已经下载 +/// @param sticker 贴纸 ++ (BOOL)downloadStatusOfSticker:(FUQualityStickerModel *)sticker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerHelper.m b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerHelper.m new file mode 100644 index 00000000..32985419 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerHelper.m @@ -0,0 +1,200 @@ +// +// FUQualityStickerHelper.m +// FULiveDemo +// +// Created by 项林平 on 2021/3/11. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUQualityStickerHelper.h" +#import "FUNetworkingHelper.h" + +#import "FUQualityStickerModel.h" + +#import + +@implementation FUQualityStickerHelper + ++ (void)itemTagsCompletion:(void (^)(BOOL, NSArray * _Nullable))complection { + [[FUNetworkingHelper sharedInstance] getWithURL:@"guest/tags" parameters:@{@"platform" : @"mobile"} success:^(id _Nonnull responseObject) { + if (responseObject[@"data"]) { + NSArray *resultArray = [responseObject[@"data"] copy]; + !complection ?: complection(YES, resultArray); + } else { + !complection ?: complection(NO, nil); + } + } failure:^(NSError * _Nonnull error) { + !complection ?: complection(NO, nil); + }]; +} ++ (void)itemListWithTag:(NSString *)tag completion:(void (^)(NSArray *, NSError *))completion { + NSDictionary *params = @{ + @"platform" : @"mobile", + @"tag" : tag + }; + [[FUNetworkingHelper sharedInstance] postWithURL:@"guest/tools" parameters:params success:^(id _Nonnull responseObject) { + NSMutableArray *resultArray = [NSMutableArray array]; + if (responseObject[@"data"][@"docs"]) { + NSArray *array = responseObject[@"data"][@"docs"]; + for (int i = 0; i < array.count; i++) { + NSDictionary *doc = array[i]; + if (!doc || [doc isKindOfClass:[NSNull class]]) { + continue; + } + FUQualityStickerModel *model = [[FUQualityStickerModel alloc] init]; + model.tag = tag; + model.stickerId = doc[@"tool"][@"_id"]; + model.iconId = doc[@"tool"][@"icon"][@"uid"]; + model.iconURLString = doc[@"tool"][@"icon"][@"url"]; + model.itemId = doc[@"tool"][@"bundle"][@"uid"]; + // 道具类型 + model.type = [doc[@"tool"][@"category"] isEqualToString:@"avatar"] ? FUQualityStickerTypeAvatar : FUQualityStickerTypeCommon; + // 特殊道具处理 + if (doc[@"tool"][@"adapter"] && [doc[@"tool"][@"adapter"] length] > 0) { + NSString *adapterString = doc[@"tool"][@"adapter"]; + model.keepPortrait = [adapterString containsString:@"0"]; + model.single = [adapterString containsString:@"1"]; + model.makeupItem = [adapterString containsString:@"2"]; + model.needClick = [adapterString containsString:@"3"]; + model.is3DFlipH = [adapterString containsString:@"4"]; + } else { + model.keepPortrait = NO; + model.single = NO; + model.makeupItem = NO; + model.needClick = NO; + model.is3DFlipH = NO; + } + [resultArray addObject:model]; + } + } + !completion ?: completion(resultArray, nil); + } failure:^(NSError * _Nonnull error) { + NSLog(@"获取贴纸列表失败"); + !completion ?: completion(nil, error); + }]; +} + ++ (void)downloadItem:(FUQualityStickerModel *)sticker completion:(void (^)(NSError * _Nullable))completion { + [[FUNetworkingHelper sharedInstance] getWithURL:@"guest/download" parameters:@{@"id" : sticker.stickerId, @"platform" : @"mobile"} success:^(id _Nonnull responseObject) { + if (responseObject[@"data"][@"url"]) { + NSString *downloadURLString = responseObject[@"data"][@"url"]; + NSString *directoryPathString = [FUStickerBundlesPath stringByAppendingPathComponent:sticker.tag]; + if (![[NSFileManager defaultManager] fileExistsAtPath:directoryPathString]) { + [[NSFileManager defaultManager] createDirectoryAtPath:directoryPathString withIntermediateDirectories:YES attributes:nil error:nil]; + } + [[FUNetworkingHelper sharedInstance] downloadWithURL:downloadURLString directoryPath:directoryPathString fileName:sticker.itemId progress:^(NSProgress * _Nonnull progress) { + } success:^(id _Nonnull responseObject) { + NSURL *responseURL = (NSURL *)responseObject; + if ([responseURL.pathExtension isEqualToString:@"zip"]) { + // zip包需要解压,当前目录新建子目录 + NSString *unzipDestonationPath = [directoryPathString stringByAppendingPathComponent:sticker.stickerId]; + if (![[NSFileManager defaultManager] fileExistsAtPath:unzipDestonationPath]) { + [[NSFileManager defaultManager] createDirectoryAtPath:unzipDestonationPath withIntermediateDirectories:YES attributes:nil error:nil]; + } + if ([SSZipArchive unzipFileAtPath:responseURL.path toDestination:unzipDestonationPath]) { + !completion ?: completion(nil); + } else { + NSLog(@"道具解压失败"); + // 解压失败暂时认为压缩包有问题,删除本地文件 + [[NSFileManager defaultManager] removeItemAtURL:responseURL error:nil]; + !completion ?: completion([NSError errorWithDomain:NSCocoaErrorDomain code:-1 userInfo:@{NSUnderlyingErrorKey : @"Unzip failed"}]); + } + } else { + !completion ?: completion(nil); + } + } failure:^(NSError * _Nonnull error) { + !completion ?: completion(error); + }]; + } else { + !completion ?: completion([NSError errorWithDomain:NSCocoaErrorDomain code:-1 userInfo:@{NSUnderlyingErrorKey : @"Empty URL"}]); + } + } failure:^(NSError * _Nonnull error) { + !completion ?: completion(error); + }]; +} + ++ (void)cancelStickerHTTPTasks { + [[FUNetworkingHelper sharedInstance] cancelAllHttpRequests]; +} + ++ (NSArray *)localStickersWithTag:(NSString *)stickerTag { + NSString *stickersDataPathString = [[FUStickersPath stringByAppendingPathComponent:stickerTag] stringByAppendingPathComponent:@"FUQualityStickerModels.data"]; + if (![[NSFileManager defaultManager] fileExistsAtPath:stickersDataPathString]) { + return nil; + } + return [[NSKeyedUnarchiver unarchiveObjectWithFile:stickersDataPathString] copy]; +} + ++ (void)updateLocalStickersWithStickers:(NSArray *)stickers tag:(NSString *)stickerTag { + if (stickers.count == 0) { + return; + } + NSString *stickersFilePathString = [FUStickersPath stringByAppendingPathComponent:stickerTag]; + NSString *stickersDataPathString = [stickersFilePathString stringByAppendingPathComponent:@"FUQualityStickerModels.data"]; + if (![[NSFileManager defaultManager] fileExistsAtPath:stickersFilePathString]) { + // 本地还没有创建文件夹,先创建文件夹,再保存最新贴纸 + if ([[NSFileManager defaultManager] createDirectoryAtPath:stickersFilePathString withIntermediateDirectories:YES attributes:nil error:nil]) { + [NSKeyedArchiver archiveRootObject:stickers toFile:stickersDataPathString]; + } + return; + } + NSArray *localStickers = [NSKeyedUnarchiver unarchiveObjectWithFile:stickersDataPathString]; + if (!localStickers || localStickers.count == 0) { + // 本地贴纸为空,直接保存最新贴纸 + [NSKeyedArchiver archiveRootObject:stickers toFile:stickersDataPathString]; + return; + } + + // 删除本地数据 + [[NSFileManager defaultManager] removeItemAtPath:stickersDataPathString error:nil]; + + // 更新为最新数据 + [NSKeyedArchiver archiveRootObject:stickers toFile:stickersDataPathString]; + + // 删除本地多余的icon数据 + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ + NSString *iconsPath = [FUStickerIconsPath stringByAppendingPathComponent:stickerTag]; + NSArray *iconDataArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:iconsPath error:nil] copy]; + for (NSString *iconName in iconDataArray) { + BOOL needDelete = YES; + for (FUQualityStickerModel *model in stickers) { + if ([model.iconId isEqualToString:iconName]) { + // 新贴纸中存在该icon,不需要删除 + needDelete = NO; + break; + } + } + if (needDelete) { + // 需要删除该icon + [[NSFileManager defaultManager] removeItemAtPath:[iconsPath stringByAppendingPathComponent:iconName] error:nil]; + } + } + }); + + // 删除本地多余的道具包 + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ + NSString *itemsPath = [FUStickerIconsPath stringByAppendingPathComponent:stickerTag]; + NSArray *itemDataArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:itemsPath error:nil] copy]; + for (NSString *itemName in itemDataArray) { + BOOL needDelete = YES; + for (FUQualityStickerModel *model in stickers) { + if ([model.iconId isEqualToString:itemName]) { + // 新贴纸中存在该道具,不需要删除 + needDelete = NO; + break; + } + } + if (needDelete) { + // 需要删除该道具 + [[NSFileManager defaultManager] removeItemAtPath:[itemsPath stringByAppendingPathComponent:itemName] error:nil]; + } + } + }); +} + ++ (BOOL)downloadStatusOfSticker:(FUQualityStickerModel *)sticker { + NSString *itemPath = [[FUStickerBundlesPath stringByAppendingPathComponent:sticker.tag] stringByAppendingPathComponent:sticker.itemId]; + return [[NSFileManager defaultManager] fileExistsAtPath:itemPath]; +} + +@end diff --git a/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerViewModel.h b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerViewModel.h new file mode 100644 index 00000000..d4b5acc1 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerViewModel.h @@ -0,0 +1,35 @@ +// +// FUQualityStickerViewModel.h +// FULiveDemo +// +// Created by Chen on 2021/3/31. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FURenderViewModel.h" + +#import "FUQualityStickerModel.h" + + +NS_ASSUME_NONNULL_BEGIN + +@interface FUQualityStickerViewModel : FURenderViewModel + +/// 下载道具 +- (void)downloadItem:(FUQualityStickerModel *)sticker completion:(void (^)(NSError * _Nullable error))completion; + +/// 取消当前队列中的下载任务 +- (void)cancelDownloadingTasks; + +/// 加载精品贴纸道具 +- (void)loadItem:(FUQualityStickerModel *)sticker; + +/// 设置当前精品贴纸 is_click 属性状态 +- (void)clickCurrentItem; + +/// 释放当前贴纸 +- (void)releaseItem; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerViewModel.m b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerViewModel.m new file mode 100644 index 00000000..1dbe3525 --- /dev/null +++ b/FULiveDemo/Modules/QualitySticker/ViewModel/FUQualityStickerViewModel.m @@ -0,0 +1,188 @@ +// +// FUQualityStickerViewModel.m +// FULiveDemo +// +// Created by Chen on 2021/3/31. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUQualityStickerViewModel.h" +#import "FUQualityStickerHelper.h" + +#import + +/// 允许同时下载任务最大数量 +static NSInteger const kFUDownloadTasksMaxNumber = 4; + +@interface FUQualityStickerViewModel () + +@property (nonatomic, strong) FUQualitySticker *curStickItem; + +// 特殊道具(Avatar) +@property (nonatomic, strong) FUScene *scene; +@property (nonatomic, strong) FUAvatar *avatar; + +/// 下载队列 +@property (nonatomic, strong) NSOperationQueue *downloadQueue; + +@end + +@implementation FUQualityStickerViewModel + +#pragma mark - Instance methods + +- (void)downloadItem:(FUQualityStickerModel *)sticker completion:(void (^)(NSError * _Nullable))completion { + [self.downloadQueue addOperationWithBlock:^{ + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [FUQualityStickerHelper downloadItem:sticker completion:^(NSError * _Nullable error) { + dispatch_semaphore_signal(semaphore); + if (error) { + completion(error); + } else { + completion(nil); + } + }]; + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + }]; +} + +- (void)cancelDownloadingTasks { + [self.downloadQueue cancelAllOperations]; +} + +- (void)loadItem:(FUQualityStickerModel *)sticker { + switch (sticker.type) { + case FUQualityStickerTypeAvatar:{ + // Avatar道具加载 + [self loadAvatarItem:sticker]; + } + break; + case FUQualityStickerTypeCommon:{ + // 普通道具加载 + [self loadCommonItem:sticker]; + } + break; + } +} + +- (void)clickCurrentItem { + if (!_curStickItem) { + return; + } + [_curStickItem clickToChange]; +} + +- (void)releaseItem { + if (_scene) { + [[FURenderKit shareRenderKit] removeScene:self.scene completion:^(BOOL success) { + [FURenderKit shareRenderKit].currentScene = nil; + }]; + } + if (_curStickItem) { + [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; + } +} + +#pragma mark - Private methods +- (void)loadAvatarItem:(FUQualityStickerModel *)stickerModel { + [[FURenderKit shareRenderKit] addScene:self.scene completion:^(BOOL success) { + dispatch_async(dispatch_get_main_queue(), ^{ + // 读取json配置文件 + NSString *jsonFilePath = [[[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.stickerId] stringByAppendingPathComponent:@"info.json"]; + if (![[NSFileManager defaultManager] fileExistsAtPath:jsonFilePath]) { + NSLog(@"Avatar道具缺少info.json文件"); + return; + } + + NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:jsonFilePath] options:NSJSONReadingMutableLeaves error:nil]; + if (!dictionary) { + NSLog(@"info.json文件错误"); + return; + } + + for (NSString *keyString in dictionary.allKeys) { + if ([keyString isEqualToString:@"components"]) { + // 身体组件 + NSArray *components = (NSArray *)dictionary[keyString]; + for (NSString *componentBundleString in components) { + NSString *componentPath = [[[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.stickerId] stringByAppendingPathComponent:componentBundleString]; + FUItem *componentItem = [FUItem itemWithPath:componentPath name:componentBundleString]; + [self.avatar addComponent:componentItem]; + } + } else if ([keyString isEqualToString:@"anims"]) { + // 动画 + NSArray *animations = (NSArray *)dictionary[keyString]; + for (NSString *animationBundleString in animations) { + NSString *animationPath = [[[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.stickerId] stringByAppendingPathComponent:animationBundleString]; + FUAnimation *animationItem = [FUAnimation itemWithPath:animationPath name:animationBundleString]; + if (animationItem) { + [self.avatar addAnimation:animationItem]; + } + } + } + } + [self.scene addAvatar:self.avatar]; + self.avatar.position = FUPositionMake(25.2, FUDeviceIsiPhoneXStyle() ? (56.14 - 50.0*24.0/72.0) : 56.14, -537.94); + self.avatar.humanProcessorType = 0; + [self.avatar setEnableHumanAnimDriver:YES]; + self.scene.AIConfig.avatarTranslationScale = FUPositionMake(0.45, 0.45, 0.25); + [self.scene.AIConfig setAvatarAnimFilter:7 pos:0.05 angle:0.1]; + NSLog(@"Load success"); + [FURenderKit shareRenderKit].currentScene = self.scene; + }); + }]; +} + +- (void)loadCommonItem:(FUQualityStickerModel *)stickerModel { + NSString *filePath = [[FUStickerBundlesPath stringByAppendingPathComponent:stickerModel.tag] stringByAppendingPathComponent:stickerModel.itemId]; + BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath]; + if (isExist) { + FUQualitySticker *item = [[FUQualitySticker alloc] initWithPath:filePath name:stickerModel.stickerId]; + item.isFlipPoints = stickerModel.isMakeupItem; + item.is3DFlipH = stickerModel.is3DFlipH; + [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.curStickItem withSticker:item completion:^{ + NSLog(@"Load success"); + }]; + self.curStickItem = item; + } else { + NSLog(@"精品贴纸道具不存在"); + } +} + +#pragma mark - Getters +- (FUScene *)scene { + if (!_scene) { + NSString *controllerConfigPath = [[NSBundle mainBundle] pathForResource:@"controller_config" ofType:@"bundle"]; + _scene = [[FUScene alloc] initWithControllerConfigPath:controllerConfigPath]; + _scene.AIConfig.bodyTrackEnable = YES; + _scene.AIConfig.bodyTrackMode = FUBodyTrackModeFull; + } + return _scene; +} + +- (FUAvatar *)avatar { + if (!_avatar) { + _avatar = [[FUAvatar alloc] init]; + } + return _avatar; +} + +- (NSOperationQueue *)downloadQueue { + if (!_downloadQueue) { + _downloadQueue = [[NSOperationQueue alloc] init]; + _downloadQueue.maxConcurrentOperationCount = kFUDownloadTasksMaxNumber; + } + return _downloadQueue; +} + +#pragma mark - Overriding + +- (BOOL)supportPresetSelection { + return YES; +} + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace | FUAIModelTypeHuman | FUAIModelTypeHand; +} + +@end diff --git a/FULiveDemo/Modules/Render/Manager/FUBaseViewControllerManager.h b/FULiveDemo/Modules/Render/Manager/FUBaseViewControllerManager.h deleted file mode 100644 index ac7bfd87..00000000 --- a/FULiveDemo/Modules/Render/Manager/FUBaseViewControllerManager.h +++ /dev/null @@ -1,102 +0,0 @@ -// -// FUBaseViewControllerManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/24. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import -#import -#import "FUBeautyModel.h" -#import "FUBeautyDefine.h" -#import "FUStyleModel.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * 处理美颜的业务逻辑和数据类 - */ -@interface FUBaseViewControllerManager : FUMetaManager -/* 滤镜参数 */ -@property (nonatomic, strong, readonly) NSArray *filters; -/* 美肤参数 */ -@property (nonatomic, strong, readonly) NSArray *skinParams; -/* 美型参数 */ -@property (nonatomic, strong, readonly) NSArray *shapeParams; -/* 风格参数 ,用父类,因为View 用的就是父类泛型,后续需要优化*/ -@property (nonatomic, strong, readonly) NSArray *styleParams; - -/// 当前选中的风格 -@property (nonatomic, strong) FUStyleModel *currentStyle; - -@property (nonatomic, strong) FUBeautyModel *seletedFliter; - -@property (nonatomic, strong) FUBeauty *beauty; - -/// 缓存渲染线程的人脸中心点 -@property (nonatomic, assign) CGPoint faceCenter; - -/// 人脸是否完整(临时处理海报换脸问题) -@property (nonatomic, assign) BOOL trackedFullFace; - -/// 当前页面绑定的相机朝向 -@property (assign, nonatomic) AVCaptureDevicePosition cameraPosition; - -/// 清除所有资源 -- (void)clearItems; - -- (void)setSkin:(double)value forKey:(FUBeautifySkin)key; - -- (void)setShap:(double)value forKey:(FUBeautifyShape)key; - -- (void)setFilterkey:(FUFilter)filterKey; - -- (void)setFaceProcessorDetectMode:(FUFaceProcessorDetectMode)mode; - -- (void)setOnCameraChange; - -- (void)setMaxFaces:(int)maxFaces; - -- (void)setMaxBodies:(int)maxBodies; - -/// 获取图像中人脸中心点位置 -/// @param frameSize 图像的尺寸,该尺寸要与视频处理接口或人脸信息跟踪接口中传入的图像宽高相一致 -/// @return 返回一个以图像左上角为原点的中心点 -- (CGPoint)getFaceCenterInFrameSize:(CGSize)frameSize; - -/// 检测是否有人脸 -- (BOOL)faceTrace; - -/// 检测是否有人体 -- (BOOL)bodyTrace; - -/// 检测是否有手势 -- (BOOL)handTrace; - -/// 判断是不是默认美型参数 --(BOOL)isDefaultShapeValue; - -/// 判断是不是默认美肤 --(BOOL)isDefaultSkinValue; - -/// 默认美颜参数 -- (void)resetDefaultParams:(FUBeautyDefine)type; - -/// 更新美颜参数到缓存 -/// @param isPersistent 是否持久化 -- (void)updateBeautyCache:(BOOL)isPersistent; - -- (void)setStyleBeautyParams:(FUStyleModel *)styleModel; - -/// 刷新数据,比如从自定义视频或图片返回需要刷新 -/// 内部会决定从缓存还是重新初始化数据 -- (void)reloadBeautyParams; - -/// 更新美颜磨皮效果(根据人脸检测置信度设置不同磨皮效果) -- (void)updateBeautyBlurEffect; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Render/Manager/FUBaseViewControllerManager.m b/FULiveDemo/Modules/Render/Manager/FUBaseViewControllerManager.m deleted file mode 100644 index 222a03d9..00000000 --- a/FULiveDemo/Modules/Render/Manager/FUBaseViewControllerManager.m +++ /dev/null @@ -1,759 +0,0 @@ -// -// FUBaseViewControllerManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/24. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBaseViewControllerManager.h" -#import "FULocalDataManager.h" -#import "FUBeautyDefine.h" -#import -#import -#import - -@interface FUBaseViewControllerManager () - -/* 滤镜参数 */ -@property (nonatomic, strong) NSArray *filters; -/* 美肤参数 */ -@property (nonatomic, strong) NSArray *skinParams; -/* 美型参数 */ -@property (nonatomic, strong) NSArray *shapeParams; -/* 风格参数 ,用父类,因为View 用的就是父类泛型,后续需要优化*/ -@property (nonatomic, strong) NSArray *styleParams; - -@end - -@implementation FUBaseViewControllerManager - -- (void)updateBeautyCache:(BOOL)isPersistent { - // 更新缓存参数 - [FULocalDataManager shareManager].persistentBeauty.beautySkins = [self.skinParams copy]; - [FULocalDataManager shareManager].persistentBeauty.beautyShapes = [self.shapeParams copy]; - [FULocalDataManager shareManager].persistentBeauty.beautyFilters = [self.filters copy]; - NSInteger index = [self.filters indexOfObject:self.seletedFliter]; - [FULocalDataManager shareManager].persistentBeauty.selectedFilterIndex = index; - if (self.currentStyle) { - [FULocalDataManager shareManager].persistentBeauty.selectedStyleIndex = [self.styleParams indexOfObject:self.currentStyle]; - } - if (isPersistent) { - // 本地持久化保存 - [[FULocalDataManager shareManager] save]; - } -} - -- (instancetype)init { - self = [super init]; - if (self) { - _cameraPosition = AVCaptureDevicePositionFront; - [FURenderKit shareRenderKit].internalCameraSetting.position = _cameraPosition; - [self reloadBeautyParams]; - } - return self; -} - -//初始化美颜数据 -- (void)initBeauty { - NSString *path = [[NSBundle mainBundle] pathForResource:@"face_beautification.bundle" ofType:nil]; - self.beauty = [[FUBeauty alloc] initWithPath:path name:@"FUBeauty"]; - /* 默认均匀磨皮 */ - self.beauty.heavyBlur = 0; - self.beauty.blurType = 3; - /* 默认自定义脸型 */ - self.beauty.faceShape = 4; - - // 高性能设备设置去黑眼圈、去法令纹、大眼、嘴型最新效果 - if ([FUManager shareManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh) { - [self.beauty addPropertyMode:FUBeautyPropertyMode2 forKey:FUModeKeyRemovePouchStrength]; - [self.beauty addPropertyMode:FUBeautyPropertyMode2 forKey:FUModeKeyRemoveNasolabialFoldsStrength]; - [self.beauty addPropertyMode:FUBeautyPropertyMode3 forKey:FUModeKeyEyeEnlarging]; - [self.beauty addPropertyMode:FUBeautyPropertyMode3 forKey:FUModeKeyIntensityMouth]; - } - - //如果有设置默认风格,直接美颜、美肤、美型 - if (self.currentStyle.mParam != FUBeautyStyleTypeNone) { - [self setStyleBeautyParams: self.currentStyle]; - } else { - [self setBeautyParameters]; - } -} - -- (void)clearItems { - [FUAIKit unloadAllAIMode]; - [FURenderKit clear]; -} - -- (void)setFaceProcessorDetectMode:(FUFaceProcessorDetectMode)mode { - [FUAIKit shareKit].faceProcessorDetectMode = mode; -} - -- (void)setOnCameraChange { - [FUAIKit resetTrackedResult]; -} - -- (BOOL)faceTrace { - BOOL ret = [FUAIKit shareKit].trackedFacesCount > 0; - return ret; -} - -- (BOOL)bodyTrace { - return [FUAIKit aiHumanProcessorNums] > 0; -} - -- (BOOL)handTrace { - return [FUAIKit aiHandDistinguishNums] > 0; -} - -- (void)setMaxFaces:(int)maxFaces { - [FUAIKit shareKit].maxTrackFaces = maxFaces; -} - -- (void)setMaxBodies:(int)maxBodies { - [FUAIKit shareKit].maxTrackBodies = maxBodies; -} - - -- (CGPoint)getFaceCenterInFrameSize:(CGSize)frameSize{ - CGPoint preCenter = CGPointMake(0.49, 0.5); - // 获取人脸矩形框,坐标系原点为图像右下角,float数组为矩形框右下角及左上角两个点的x,y坐标(前两位为右下角的x,y信息,后两位为左上角的x,y信息) - CGRect faceRect = [FUPoster cacluteRectWithIndex:0 height:frameSize.height width:frameSize.width]; - - if (faceRect.origin.x < 0 || faceRect.origin.y < 0 || (faceRect.origin.x + faceRect.size.width > frameSize.width) || (faceRect.origin.y + faceRect.size.height > frameSize.height)) { - self.trackedFullFace = NO; - } else { - self.trackedFullFace = YES; - } - - // 计算出中心点的坐标值 - CGFloat centerX = (faceRect.origin.x + (faceRect.origin.x + faceRect.size.width)) * 0.5; - CGFloat centerY = (faceRect.origin.y + (faceRect.origin.y + faceRect.size.height)) * 0.5; - - // 将坐标系转换成以左上角为原点的坐标系 - centerX = centerX / frameSize.width; - centerY = centerY / frameSize.height; - - CGPoint center = CGPointMake(centerX, centerY); - - preCenter = center; - - return center; -} - -- (void)reloadBeautyParams { - // 风格推荐数据固定 - self.styleParams = [self getStyleData]; - //优先获取缓存的美颜参数 - FUPersistentBeautyModel *persistentBeautyModel = [FULocalDataManager shareManager].persistentBeauty; - if (persistentBeautyModel.beautySkins && persistentBeautyModel.beautyShapes && persistentBeautyModel.beautyFilters) { - // 存在缓存数据 - self.skinParams = [persistentBeautyModel.beautySkins copy]; - self.shapeParams = [persistentBeautyModel.beautyShapes copy]; - self.filters = [persistentBeautyModel.beautyFilters copy]; - if (persistentBeautyModel.selectedFilterIndex >= 0 && persistentBeautyModel.selectedFilterIndex < self.filters.count) { - self.seletedFliter = self.filters[persistentBeautyModel.selectedFilterIndex]; - } else { - self.seletedFliter = self.filters[2]; - } - if (persistentBeautyModel.selectedStyleIndex >= 0 && persistentBeautyModel.selectedStyleIndex < self.styleParams.count) { - self.currentStyle = self.styleParams[persistentBeautyModel.selectedStyleIndex]; - } - } else { - // 不存在缓存数据 - self.filters = [self getFilterData]; - self.seletedFliter = self.filters[2]; - self.skinParams = [self getSkinData]; - self.shapeParams = [self getShapData]; - } - - //如果有设置默认风格,直接美颜、美肤、美型 - if (self.currentStyle.mParam != FUBeautyStyleTypeNone) { - [self setStyleBeautyParams: self.currentStyle]; - } else { - [self setBeautyParameters]; - } -} - -/**加载美颜道具到FURenderKit*/ -- (void)loadItem { - CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); - [self initBeauty]; - [FURenderKit shareRenderKit].beauty = self.beauty; - CFAbsoluteTime endTime = (CFAbsoluteTimeGetCurrent() - startTime); - NSLog(@"加载美颜道具耗时: %f ms", endTime * 1000.0); -} - -- (void)setBeautyParameters { - for (FUBeautyModel *model in self.skinParams){ - [self setSkin:model.mValue forKey:model.mParam]; - NSLog(@"key===%lu,value ==%f",(unsigned long)model.mParam, model.mValue); - } - - for (FUBeautyModel *model in self.shapeParams){ - [self setShap:model.mValue forKey:model.mParam]; - NSLog(@"key===%lu,value ==%f",(unsigned long)model.mParam, model.mValue); - } - - /* 设置默认状态 */ - if (self.filters) { - [self setFilterkey:[self.seletedFliter.strValue lowercaseString]]; - self.beauty.filterLevel = self.seletedFliter.mValue; - } - -} - - -- (void)setStyleBeautyParams:(FUStyleModel *)styleModel { - self.currentStyle = styleModel; - - if (self.currentStyle.mParam == FUBeautyStyleTypeNone) { - [self setBeautyParameters]; - return ; - } - - //设置美肤 - for (FUBeautyModel *skin in styleModel.skins) { - [self setSkin:skin.mValue forKey:skin.mParam]; - } - - //设置美型的其他参数 - for (FUBeautyModel *shape in styleModel.shapes) { - [self setShap:shape.mValue forKey:shape.mParam]; - } - - //设置滤镜 - [self setFilterkey:[styleModel.filter.strValue lowercaseString]]; - self.beauty.filterLevel = styleModel.filter.mValue; -} - -- (void)setSkin:(double)value forKey:(FUBeautifySkin)key { - switch (key) { - case FUBeautifySkinBlurLevel: { - self.beauty.blurLevel = value; - } - break; - case FUBeautifySkinColorLevel: { - self.beauty.colorLevel = value; - } - break; - case FUBeautifySkinRedLevel: { - self.beauty.redLevel = value; - } - break; - case FUBeautifySkinSharpen: { - self.beauty.sharpen = value; - } - break; - case FUBeautifySkinEyeBright: { - self.beauty.eyeBright = value; - } - break; - case FUBeautifySkinToothWhiten: { - self.beauty.toothWhiten = value; - } - break; - case FUBeautifySkinRemovePouchStrength: { - self.beauty.removePouchStrength = value; - } - break; - case FUBeautifySkinRemoveNasolabialFoldsStrength: { - self.beauty.removeNasolabialFoldsStrength = value; - } - break; - default: - break; - } -} - -- (void)setShap:(double)value forKey:(FUBeautifyShape)key { - switch (key) { - case FUBeautifyShapeCheekThinning: { - self.beauty.cheekThinning = value; - } - break; - case FUBeautifyShapeCheekV: { - self.beauty.cheekV = value; - } - break; - case FUBeautifyShapeCheekNarrow: { - self.beauty.cheekNarrow = value; - } - break; - case FUBeautifyShapeCheekShort: { - self.beauty.cheekShort = value; - } - break; - case FUBeautifyShapeCheekSmall: { - self.beauty.cheekSmall = value; - } - break; - case FUBeautifyShapeIntensityCheekbones: { - self.beauty.intensityCheekbones = value; - } - break; - case FUBeautifyShapeIntensityLowerJaw: { - self.beauty.intensityLowerJaw = value; - } - break; - case FUBeautifyShapeEyeEnlarging: { - self.beauty.eyeEnlarging = value; - } - break; - case FUBeautifyShapeEyeCircle: { - self.beauty.intensityEyeCircle = value; - } - break; - case FUBeautifyShapeIntensityChin: { - self.beauty.intensityChin = value; - } - break; - case FUBeautifyShapeIntensityForehead: { - self.beauty.intensityForehead = value; - } - break; - case FUBeautifyShapeIntensityNose: { - self.beauty.intensityNose = value; - } - break; - case FUBeautifyShapeIntensityMouth: { - self.beauty.intensityMouth = value; - } - break; - case FUBeautifyShapeIntensityCanthus: { - self.beauty.intensityCanthus = value; - } - break; - case FUBeautifyShapeIntensityEyeSpace: { - self.beauty.intensityEyeSpace = value; - } - break; - case FUBeautifyShapeIntensityEyeRotate: { - self.beauty.intensityEyeRotate = value; - } - break; - case FUBeautifyShapeIntensityLongNose: { - self.beauty.intensityLongNose = value; - } - break; - case FUBeautifyShapeIntensityPhiltrum: { - self.beauty.intensityPhiltrum = value; - } - break; - case FUBeautifyShapeIntensitySmile: { - self.beauty.intensitySmile = value; - } - break; - case FUBeautifyShapeIntensityBrowHeight: { - self.beauty.intensityBrowHeight = value; - } - break; - case FUBeautifyShapeIntensityBrowSpace: { - self.beauty.intensityBrowSpace = value; - } - break; - default: - break; - } -} - -- (void)setFilterkey:(FUFilter)filterKey { - self.beauty.filterName = filterKey; -} - - -- (void)releaseItem { - [FURenderKit shareRenderKit].beauty = nil; -} - -- (BOOL)isDefaultSkinValue { - for (FUBeautyModel *model in _skinParams){ - if (fabs(model.mValue - model.defaultValue) > 0.01 ) { - return NO; - } - } - return YES; -} - -- (BOOL)isDefaultShapeValue { - for (FUBeautyModel *model in _shapeParams){ - if (fabs(model.mValue - model.defaultValue) > 0.01 ) { - return NO; - } - } - return YES; -} - - -- (NSArray *)getFilterData { - NSArray *beautyFiltersDataSource = @[ - @"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" - ]; - - NSDictionary *filtersCHName = @{ - @"origin" : @"原图", - @"bailiang1" : @"白亮1", - @"bailiang2" : @"白亮2", - @"bailiang3" : @"白亮3", - @"bailiang4" : @"白亮4", - @"bailiang5" : @"白亮5", - @"bailiang6" : @"白亮6", - @"bailiang7" : @"白亮7", - @"fennen1" : @"粉嫩1", - @"fennen2" : @"粉嫩2", - @"fennen3" : @"粉嫩3", - @"fennen4" : @"粉嫩4", - @"fennen5" : @"粉嫩5", - @"fennen6" : @"粉嫩6", - @"fennen7" : @"粉嫩7", - @"fennen8" : @"粉嫩8", - @"gexing1" : @"个性1", - @"gexing2" : @"个性2", - @"gexing3" : @"个性3", - @"gexing4" : @"个性4", - @"gexing5" : @"个性5", - @"gexing6" : @"个性6", - @"gexing7" : @"个性7", - @"gexing8" : @"个性8", - @"gexing9" : @"个性9", - @"gexing10" : @"个性10", - @"gexing11" : @"个性11", - @"heibai1" : @"黑白1", - @"heibai2" : @"黑白2", - @"heibai3" : @"黑白3", - @"heibai4" : @"黑白4", - @"heibai5" : @"黑白5", - @"lengsediao1" : @"冷色调1", - @"lengsediao2" : @"冷色调2", - @"lengsediao3" : @"冷色调3", - @"lengsediao4" : @"冷色调4", - @"lengsediao5" : @"冷色调5", - @"lengsediao6" : @"冷色调6", - @"lengsediao7" : @"冷色调7", - @"lengsediao8" : @"冷色调8", - @"lengsediao9" : @"冷色调9", - @"lengsediao10" : @"冷色调10", - @"lengsediao11" : @"冷色调11", - @"nuansediao1" : @"暖色调1", - @"nuansediao2" : @"暖色调2", - @"nuansediao3" : @"暖色调3", - @"xiaoqingxin1" : @"小清新1", - @"xiaoqingxin2" : @"小清新2", - @"xiaoqingxin3" : @"小清新3", - @"xiaoqingxin4" : @"小清新4", - @"xiaoqingxin5" : @"小清新5", - @"xiaoqingxin6" : @"小清新6", - @"ziran1" : @"自然1", - @"ziran2" : @"自然2", - @"ziran3" : @"自然3", - @"ziran4" : @"自然4", - @"ziran5" : @"自然5", - @"ziran6" : @"自然6", - @"ziran7" : @"自然7", - @"ziran8" : @"自然8", - @"mitao1" : @"蜜桃1", - @"mitao2" : @"蜜桃2", - @"mitao3" : @"蜜桃3", - @"mitao4" : @"蜜桃4", - @"mitao5" : @"蜜桃5", - @"mitao6" : @"蜜桃6", - @"mitao7" : @"蜜桃7", - @"mitao8" : @"蜜桃8", - @"zhiganhui1" : @"质感灰1", - @"zhiganhui2" : @"质感灰2", - @"zhiganhui3" : @"质感灰3", - @"zhiganhui4" : @"质感灰4", - @"zhiganhui5" : @"质感灰5", - @"zhiganhui6" : @"质感灰6", - @"zhiganhui7" : @"质感灰7", - @"zhiganhui8" : @"质感灰8" - }; - NSMutableArray *filters = [NSMutableArray array]; - - - for (NSString *str in beautyFiltersDataSource) { - FUBeautyModel *model = [[FUBeautyModel alloc] init]; - model.strValue = str; - model.mTitle = [filtersCHName valueForKey:str]; - model.mValue = 0.4; - model.type = FUBeautyDefineFilter; - model.ratio = 1.0; - [filters addObject:model]; - } - - return [NSArray arrayWithArray:filters]; -} - -- (NSArray *)getSkinData { - NSArray *prams = @[ - @"blur_level", - @"color_level", - @"red_level", - @"sharpen", - @"eye_bright", - @"tooth_whiten", - @"remove_pouch_strength", - @"remove_nasolabial_folds_strength" - ]; - NSDictionary *titelDic = @{ - @"blur_level" : @"磨皮", - @"color_level" : @"美白", - @"red_level" : @"红润", - @"sharpen" : @"锐化", - @"remove_pouch_strength" : @"去黑眼圈", - @"remove_nasolabial_folds_strength" : @"去法令纹", - @"eye_bright" : @"亮眼", - @"tooth_whiten" : @"美牙" - }; - NSDictionary *defaultValueDic = @{ - @"blur_level":@(4.2), - @"color_level":@(0.3), - @"red_level":@(0.3), - @"sharpen":@(0.2), - @"remove_pouch_strength":@(0), - @"remove_nasolabial_folds_strength":@(0), - @"eye_bright":@(0), - @"tooth_whiten":@(0) - }; - - float ratio[FUBeautifySkinMax] = {6.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; - NSMutableArray *skinParams = [NSMutableArray array]; - - for (NSUInteger i = 0; i < FUBeautifySkinMax; i ++) { - NSString *str = prams[i]; - FUBeautyModel *model = [[FUBeautyModel alloc] init]; - model.mParam = i; - model.type = FUBeautyDefineSkin; - model.mTitle = [titelDic valueForKey:str]; - model.mValue = [[defaultValueDic valueForKey:str] floatValue]; - model.defaultValue = model.mValue; - model.ratio = ratio[i]; - [skinParams addObject:model]; - } - return [NSArray arrayWithArray:skinParams]; -} - -- (NSArray *)getShapData { - NSArray *prams = @[ - @"cheek_thinning", - @"cheek_v", - @"cheek_narrow", - @"cheek_short", - @"cheek_small", - @"intensity_cheekbones", - @"intensity_lower_jaw", - @"eye_enlarging", - @"intensity_eye_circle", - @"intensity_chin", - @"intensity_forehead", - @"intensity_nose", - @"intensity_mouth", - @"intensity_canthus", - @"intensity_eye_space", - @"intensity_eye_rotate", - @"intensity_long_nose", - @"intensity_philtrum", - @"intensity_smile", - @"intensity_brow_hight", - @"intensity_brow_space" - ]; - NSDictionary *titelDic = @{ - @"cheek_thinning" : @"瘦脸", - @"cheek_v" : @"v脸", - @"cheek_narrow" : @"窄脸", - @"cheek_short" : @"短脸", - @"cheek_small" : @"小脸", - @"intensity_cheekbones" : @"瘦颧骨", - @"intensity_lower_jaw" : @"瘦下颌骨", - @"eye_enlarging" : @"大眼", - @"intensity_eye_circle" : @"圆眼", - @"intensity_chin" : @"下巴", - @"intensity_forehead" : @"额头", - @"intensity_nose" : @"瘦鼻", - @"intensity_mouth" : @"嘴型", - @"intensity_canthus" : @"开眼角", - @"intensity_eye_space" : @"眼距", - @"intensity_eye_rotate" : @"眼睛角度", - @"intensity_long_nose" : @"长鼻", - @"intensity_philtrum" : @"缩人中", - @"intensity_smile" : @"微笑嘴角", - @"intensity_brow_hight" : @"眉毛上下", - @"intensity_brow_space" : @"眉间距" - }; - NSDictionary *defaultValueDic = @{ - @"cheek_thinning":@(0), - @"cheek_v":@(0.5), - @"cheek_narrow":@(0), - @"cheek_short":@(0), - @"cheek_small":@(0), - @"intensity_cheekbones":@(0), - @"intensity_lower_jaw":@(0), - @"eye_enlarging":@(0.4), - @"intensity_eye_circle":@(0.0), - @"intensity_chin":@(0.3), - @"intensity_forehead":@(0.3), - @"intensity_nose":@(0.5), - @"intensity_mouth":@(0.4), - @"intensity_canthus":@(0), - @"intensity_eye_space":@(0.5), - @"intensity_eye_rotate":@(0.5), - @"intensity_long_nose":@(0.5), - @"intensity_philtrum":@(0.5), - @"intensity_smile":@(0), - @"intensity_brow_hight":@(0.5), - @"intensity_brow_space":@(0.5) - }; - - float ratio[FUBeautifyShapeMax] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; - NSMutableArray *shapeParams = [NSMutableArray array]; - for (NSUInteger i = 0; i < FUBeautifyShapeMax; i ++) { - BOOL isStyle101 = NO; - NSString *str = prams[i]; - if ([str isEqualToString:@"intensity_chin"] || [str isEqualToString:@"intensity_forehead"] || [str isEqualToString:@"intensity_mouth"] || [str isEqualToString:@"intensity_eye_space"] || [str isEqualToString:@"intensity_eye_rotate"] || [str isEqualToString:@"intensity_long_nose"] || [str isEqualToString:@"intensity_philtrum"] || [str isEqualToString:@"intensity_brow_hight"] || [str isEqualToString:@"intensity_brow_space"]) { - isStyle101 = YES; - } - FUBeautyModel *model = [[FUBeautyModel alloc] init]; - model.mParam = i; - model.type = FUBeautyDefineShape; - model.mTitle = [titelDic valueForKey:str]; - model.mValue = [[defaultValueDic valueForKey:str] floatValue]; - model.defaultValue = model.mValue; - model.iSStyle101 = isStyle101; - model.ratio = ratio[i]; - if ([FUManager shareManager].devicePerformanceLevel != FUDevicePerformanceLevelHigh && ([str isEqualToString:@"intensity_brow_hight"] || [str isEqualToString:@"intensity_brow_space"])) { - // 低性能手机禁用眉毛上下、眉间距 - model.disabled = YES; - } - [shapeParams addObject:model]; - } - return [NSArray arrayWithArray:shapeParams]; -} - --(NSArray *)getStyleData { - NSArray *titles = @[@"None", @"Style1", @"Style2", @"Style3", @"Style4", @"Style5", @"Style6", @"Style7"]; - - NSMutableArray *temp = [NSMutableArray array]; - - for(int i = 0; i < FUBeautyStyleMax; i++) { - FUStyleModel *model = [FUStyleModel defaultParams]; - model.type = FUBeautyDefineStyle; - model.mParam = i; - model.mTitle = [titles objectAtIndex:i]; - if (i > 0) { - [model styleWithType:i]; - } - [temp addObject:model]; - } - - return [NSArray arrayWithArray:temp]; -} - -// 默认美颜参数 -- (void)resetDefaultParams:(FUBeautyDefine)type { - switch (type) { - case FUBeautyDefineSkin: { - for (FUBeautyModel *model in _skinParams){ - model.mValue = model.defaultValue; - [self setSkin:model.mValue forKey:model.mParam]; - } - } - break; - case FUBeautyDefineShape: { - for (FUBeautyModel *model in _shapeParams){ - model.mValue = model.defaultValue; - [self setShap:model.mValue forKey:model.mParam]; - } - } - break; - - default: - break; - } -} - -- (void)updateBeautyBlurEffect { - if (!self.beauty || !self.beauty.enable) { - return; - } - if ([FUManager shareManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh) { - // 根据人脸置信度设置不同磨皮效果 - CGFloat score = [FUAIKit fuFaceProcessorGetConfidenceScore:0]; - if (score > 0.95) { - self.beauty.blurType = 3; - self.beauty.blurUseMask = YES; - } else { - self.beauty.blurType = 2; - self.beauty.blurUseMask = NO; - } - } else { - // 设置精细磨皮效果 - self.beauty.blurType = 2; - self.beauty.blurUseMask = NO; - } - -} - -@end diff --git a/FULiveDemo/Modules/Render/Manager/FUMetaManager.h b/FULiveDemo/Modules/Render/Manager/FUMetaManager.h deleted file mode 100644 index e912a2fa..00000000 --- a/FULiveDemo/Modules/Render/Manager/FUMetaManager.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// FUMetaManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUMetaManager : NSObject -//释放item,内部会自动清除相关资源文件. -- (void)releaseItem; - -//把当前业务模型数据加载到FURenderKit,不同子类需要根据不同模型重写 -- (void)loadItem; - -//道具加载队列 -@property (nonatomic, strong) dispatch_queue_t loadQueue; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Render/Manager/FUMetaManager.m b/FULiveDemo/Modules/Render/Manager/FUMetaManager.m deleted file mode 100644 index 6633e29e..00000000 --- a/FULiveDemo/Modules/Render/Manager/FUMetaManager.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUMetaManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" - -@implementation FUMetaManager -- (instancetype)init { - self = [super init]; - if (self) { - _loadQueue = dispatch_queue_create("namaLoad.com", DISPATCH_QUEUE_SERIAL); - } - return self; -} - -- (void)releaseItem { -} - -//把当前业务模型数据加载到FURenderKit,不同子类需要根据不同模型重写 -- (void)loadItem { -} - -@end diff --git a/FULiveDemo/Modules/Render/ViewController/FUBaseViewController.h b/FULiveDemo/Modules/Render/ViewController/FUBaseViewController.h deleted file mode 100644 index 1ba87791..00000000 --- a/FULiveDemo/Modules/Render/ViewController/FUBaseViewController.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// FUBaseViewController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/1/28. -// Copyright © 2019年 FaceUnity. All rights reserved. -// -/* 视频采集·切换,公用UI,基类控制器 */ - -#import -#import - -#import "FUHeadButtonView.h" -#import "FUPhotoButton.h" -#import "FULightingView.h" - -#import "FUBaseViewControllerManager.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBaseViewController : UIViewController - -@property (nonatomic, strong, readonly) FUBaseViewControllerManager *baseManager; -@property (nonatomic, strong, readonly) FUCaptureCamera *mCamera; -@property (nonatomic, strong, readonly) FUHeadButtonView *headButtonView; -@property (nonatomic, strong, readonly) FUPhotoButton *photoBtn; -@property (nonatomic, strong, readonly) FUGLDisplayView *renderView; -@property (nonatomic, strong, readonly) FULightingView *lightingView; -@property (nonatomic, strong, readonly) UILabel *noTrackLabel; -@property (nonatomic, strong, readonly) UILabel *tipLabel; -/// 记录是否从其他控制器回到该控制器 -@property (nonatomic, assign, readonly) BOOL isFromOtherPage; - -/// 是否开启效果对比 -@property (nonatomic, assign) BOOL openComp; -/// 是否可以跳转到导入图片 -@property (nonatomic, assign) BOOL canPushImageSelView; -/// 是否可选择分辨率 -@property (nonatomic, assign) BOOL needsPresetSelections; -/// 是否需要加载美颜 -@property (nonatomic, assign) BOOL needsLoadingBeauty; -/// 需要加载的AI模型,默认为FUAIModelTypeFace -@property (nonatomic, assign) FUAIModelType necessaryAIModelTypes; - - -#pragma mark - Override methods - -- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput; - -- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput; -/// 拍照保存 --(void)takePhotoToSave:(UIImage *)image; -/// 点击选择图片或视频 --(void)didClickSelPhoto; -/// 点击背景 -- (void)touchScreenAction:(UITapGestureRecognizer *)tap; -/// 人脸/人体检测提示 --(void)displayPromptText; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Render/ViewController/FUBaseViewController.m b/FULiveDemo/Modules/Render/ViewController/FUBaseViewController.m deleted file mode 100644 index 28979748..00000000 --- a/FULiveDemo/Modules/Render/ViewController/FUBaseViewController.m +++ /dev/null @@ -1,668 +0,0 @@ -// -// FUBaseViewController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/1/28. -// Copyright © 2019年 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" -#import "FUSelectedImageController.h" - -#import "FUPopupMenu.h" - -#import "NSObject+economizer.h" - -#import -#import -#import -#import -#import - -@interface FUBaseViewController ()< -FURenderKitDelegate, -FUPhotoButtonDelegate, -FULightingViewDelegate, -UINavigationControllerDelegate, -UIImagePickerControllerDelegate, -UINavigationControllerDelegate, -UIImagePickerControllerDelegate, -FUPopupMenuDelegate, -FUCaptureCameraDataSource -> -{ - dispatch_semaphore_t semaphore; - dispatch_semaphore_t signal; - UIImage *mCaptureImage; - float imageW ; - float imageH; -} - -@property (nonatomic, strong) FUBaseViewControllerManager *baseManager; -@property (nonatomic, strong) FUCaptureCamera *mCamera; -@property (nonatomic, strong) FUHeadButtonView *headButtonView; -@property (nonatomic, strong) FUPhotoButton *photoBtn; -@property (nonatomic, strong) FUGLDisplayView *renderView; -@property (nonatomic, strong) FULightingView *lightingView; -@property (nonatomic, strong) UILabel *noTrackLabel; -@property (nonatomic, strong) UILabel *tipLabel; -@property (nonatomic, assign) BOOL isFromOtherPage; - -@property (nonatomic, strong) FUInsetsLabel *buglyLabel; -@property (nonatomic, strong) UIImageView *adjustImage; -/// 选中分辨率索引 -@property (nonatomic, assign) int selIndex; -@property (nonatomic, assign) BOOL isCameraRunning; - -@end - -@implementation FUBaseViewController - -#pragma mark - Life cycle - --(void)viewDidLoad{ - [super viewDidLoad]; - - // 加载AI模型 - if (self.necessaryAIModelTypes & FUAIModelTypeFace) { - [FUManager loadFaceAIModel]; - } - if (self.necessaryAIModelTypes & FUAIModelTypeHuman) { - [FUManager loadHumanAIModel]; - } - if (self.necessaryAIModelTypes & FUAIModelTypeHand) { - [FUManager loadHandAIModel]; - } - // 设置设备性能相关细项 - [[FUManager shareManager] setDevicePerformanceDetails]; - - self.baseManager = [[FUBaseViewControllerManager alloc] init]; - if (self.needsLoadingBeauty) { - [self.baseManager loadItem]; - } - // 需要音频输入输出 - [FURenderKit shareRenderKit].internalCameraSetting.needsAudioTrack = YES; - [[FURenderKit shareRenderKit] startInternalCamera]; - _isCameraRunning = YES; - [FURenderKit shareRenderKit].captureCamera.dataSource = self; - //把渲染的View 赋值给 FURenderKit,这样会在FURenderKit内部自动渲染 - [FURenderKit shareRenderKit].glDisplayView = self.renderView; - [FURenderKit shareRenderKit].delegate = self; - - [self.baseManager setMaxFaces:4]; - - [self setupSubView]; - - self.view.backgroundColor = [UIColor colorWithRed:17/255.0 green:18/255.0 blue:38/255.0 alpha:1.0]; - - [self setupLightingValue]; - - signal = dispatch_semaphore_create(1); - - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touchScreenAction:)]; - [self.renderView addGestureRecognizer:tap]; - self.canPushImageSelView = YES; - -} - --(void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - // 设置图像加载模式为视频模式 - [self.baseManager setFaceProcessorDetectMode:FUFaceProcessorDetectModeVideo]; - if (_isFromOtherPage) { - [[FURenderKit shareRenderKit] startInternalCamera]; - [FURenderKit shareRenderKit].internalCameraSetting.position = self.baseManager.cameraPosition; - [FURenderKit shareRenderKit].glDisplayView = self.renderView; - _isCameraRunning = YES; - if (self.needsLoadingBeauty) { - [self.baseManager loadItem]; - } - } -} - --(void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - _isFromOtherPage = YES; - [self.mCamera resetFocusAndExposureModes]; - /* 清一下信息,防止快速切换有人脸信息缓存 */ - [self.baseManager setOnCameraChange]; - [self.photoBtn photoButtonFinishRecord]; - //处理进入自定义视频/图片模块的问题,必须停止 - NSLog(@"viewWillDisappear : %@",self); - - if (_isCameraRunning) { - [[FURenderKit shareRenderKit] stopInternalCamera]; - _isCameraRunning = NO; - [FURenderKit shareRenderKit].glDisplayView = nil; - } - - self.baseManager.cameraPosition = [FURenderKit shareRenderKit].internalCameraSetting.position; - -} - --(void)dealloc{ - NSLog(@"----界面销毁"); -} - - -#pragma mark - UI - --(void)setupSubView{ - /* 顶部按钮 */ - _headButtonView = [[FUHeadButtonView alloc] init]; - _headButtonView.delegate = self; - _headButtonView.selectedImageBtn.hidden = YES; - [self.view addSubview:_headButtonView]; - [self.headButtonView mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(15); - } else { - make.top.equalTo(self.view.mas_top).offset(30); - } - make.left.right.equalTo(self.view); - make.height.mas_equalTo(44); - }]; - - /* bugly信息 */ - _buglyLabel = [[FUInsetsLabel alloc] initWithFrame:CGRectZero insets:UIEdgeInsetsMake(5, 5, 5, 5)]; - _buglyLabel.layer.masksToBounds = YES; - _buglyLabel.layer.cornerRadius = 5; - _buglyLabel.numberOfLines = 0; - _buglyLabel.backgroundColor = [UIColor darkGrayColor]; - _buglyLabel.textColor = [UIColor whiteColor]; - _buglyLabel.alpha = 0.74; - _buglyLabel.font = [UIFont systemFontOfSize:13]; - _buglyLabel.hidden = YES; - [self.view addSubview:_buglyLabel]; - [_buglyLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(_headButtonView.mas_bottom).offset(15); - make.left.equalTo(self.view).offset(10); - make.width.mas_equalTo(90); - }]; - - /* 曝光度指示器 */ - _lightingView = [[FULightingView alloc] initWithFrame:CGRectMake(0, 0, 280, 40)]; - _lightingView.center = CGPointMake(self.view.frame.size.width - 20, self.view.frame.size.height / 2 - 60); - [self.view addSubview:_lightingView]; - _lightingView.delegate = self; - _lightingView.hidden = YES; - _lightingView.transform = CGAffineTransformMakeRotation(-M_PI_2); - - /* 点击校准知识 */ - _adjustImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"camera_校准"]]; - _adjustImage.center = self.view.center; - _adjustImage.hidden = YES; - [self.renderView addSubview:_adjustImage]; - - /* 未检测到人脸提示 */ - _noTrackLabel = [[UILabel alloc] init]; - _noTrackLabel.textColor = [UIColor whiteColor]; - _noTrackLabel.font = [UIFont systemFontOfSize:17]; - _noTrackLabel.textAlignment = NSTextAlignmentCenter; - _noTrackLabel.text = FUNSLocalizedString(@"No_Face_Tracking", @"未检测到人脸"); - _noTrackLabel.hidden = YES; - [self.view addSubview:_noTrackLabel]; - [_noTrackLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.view); - make.width.mas_equalTo(140); - make.height.mas_equalTo(22); - }]; - - /* 额外操作提示 */ - _tipLabel = [[UILabel alloc] init]; - _tipLabel.textColor = [UIColor whiteColor]; - _tipLabel.font = [UIFont systemFontOfSize:32]; - _tipLabel.textAlignment = NSTextAlignmentCenter; - _tipLabel.text = @"张张嘴"; - _tipLabel.hidden = YES; - [self.view addSubview:_tipLabel]; - [_tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(_noTrackLabel.mas_bottom); - make.centerX.equalTo(self.view); - make.width.mas_equalTo(300); - make.height.mas_equalTo(32); - }]; - - /* 录制按钮 */ - _photoBtn = [[FUPhotoButton alloc] initWithFrame:CGRectMake(0, 0, 85, 85)]; - [_photoBtn setImage:[UIImage imageNamed:@"camera_btn_camera_normal"] forState:UIControlStateNormal]; - if(iPhoneXStyle){ - _photoBtn.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height - 85 - 50); - }else{ - _photoBtn.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height - 85 - 20); - } - - _photoBtn.delegate = self; - [self.view addSubview:_photoBtn]; - - /* 默认选中720P index = 1 */ - _selIndex = self.type == FUModuleTypeQualityTicker ? 0 : 1; -} - -#pragma mark - Private methods - -//自动对焦 -- (void)autoFocus { - BOOL isHaveFace = [self.baseManager faceTrace]; - CGPoint center = CGPointMake(0.5, 0.5); - if (isHaveFace) { - center = [self cameraFocusAndExposeFace]; - } - self.baseManager.faceCenter = center; //在渲染线程获取人脸中心点是准确的,保存起来,让其他线程去访问。 -} - - --(CGPoint)cameraFocusAndExposeFace { - CGPoint center = [self.baseManager getFaceCenterInFrameSize:CGSizeMake(imageW, imageH)]; - return CGPointMake(center.y, [FURenderKit shareRenderKit].internalCameraSetting.position == AVCaptureDevicePositionFront ? center.x : 1 - center.x); -} - --(void)setupLightingValue { - //设置默认调节的区间 - self.lightingView.slider.minimumValue = -2; - self.lightingView.slider.maximumValue = 2; - self.lightingView.slider.value = 0; -} - -#pragma mark - UI事件 - -- (void)touchScreenAction:(UITapGestureRecognizer *)tap { - if (tap.view == self.renderView) { - // 聚焦 - if (self.adjustImage.hidden) { - self.adjustImage.hidden = NO ; - self.lightingView.hidden = NO ; - } - /* 先找人脸对焦模式 */ -// FUCaptureCameraFocusModelAutoFace, -// /* 固定点对焦模式 */ -// FUCaptureCameraFocusModelChangeless - [self.mCamera cameraChangeModle:FUCaptureCameraFocusModelChangeless]; - CGPoint center = [tap locationInView:self.renderView]; - - // UI - adjustTime = CFAbsoluteTimeGetCurrent() ; - self.adjustImage.center = center ; - self.adjustImage.transform = CGAffineTransformIdentity ; - [UIView animateWithDuration:0.3 animations:^{ - self.adjustImage.transform = CGAffineTransformMakeScale(0.67, 0.67) ; - }completion:^(BOOL finished) { - [self hiddenAdjustViewWithTime:1.0]; - }]; - - if (self.renderView.contentMode == FUGLDisplayViewContentModeScaleAspectFill) { - float scal2 = imageH/imageW; - float apaceLead = (self.renderView.bounds.size.height / scal2 - self.renderView.bounds.size.width )/2; - float imagecW = self.renderView.bounds.size.width + 2 * apaceLead; - center.x = center.x + apaceLead; - - if (center.y > 0) { - CGPoint point = CGPointMake(center.y/self.renderView.bounds.size.height, self.mCamera.isFrontCamera ? center.x/imagecW : 1 - center.x/imagecW); - [self.mCamera focusWithMode:AVCaptureFocusModeContinuousAutoFocus exposeWithMode:AVCaptureExposureModeContinuousAutoExposure atDevicePoint:point monitorSubjectAreaChange:YES]; - NSLog(@"手动曝光点-----%@",NSStringFromCGPoint(point)); - } - }else if(self.renderView.contentMode == FUGLDisplayViewContentModeScaleAspectFit){ - float scal2 = imageH/imageW; - float apaceTOP = (self.renderView.bounds.size.height - self.renderView.bounds.size.width * scal2)/2; - float imagecH = self.renderView.bounds.size.height - 2 * apaceTOP; - center.y = center.y - apaceTOP; - - if (center.y > 0) { - CGPoint point = CGPointMake(center.y/imagecH, self.mCamera.isFrontCamera ? center.x/self.renderView.bounds.size.width : 1 - center.x/self.renderView.bounds.size.width); - [self.mCamera focusWithMode:AVCaptureFocusModeContinuousAutoFocus exposeWithMode:AVCaptureExposureModeContinuousAutoExposure atDevicePoint:point monitorSubjectAreaChange:YES]; - NSLog(@"手动曝光点-----%@",NSStringFromCGPoint(point)); - } - }else{ - CGPoint point = CGPointMake(center.y/self.renderView.bounds.size.height, self.mCamera.isFrontCamera ? center.x/self.renderView.bounds.size.width : 1 - center.x/self.renderView.bounds.size.width); - [self.mCamera focusWithMode:AVCaptureFocusModeContinuousAutoFocus exposeWithMode:AVCaptureExposureModeContinuousAutoExposure atDevicePoint:point monitorSubjectAreaChange:YES]; - NSLog(@"手动曝光点-----%@",NSStringFromCGPoint(point)); - } - - } -} - -#pragma mark - Loading - --(FUCaptureCamera *)mCamera { - return [FURenderKit shareRenderKit].captureCamera; -} - --(UIImage *)captureImage{ - mCaptureImage = nil; - semaphore = dispatch_semaphore_create(0); - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - return mCaptureImage; -} - -#pragma mark - FUHeadButtonViewDelegate - --(void)headButtonViewSegmentedChange:(UISegmentedControl *)sender { - int format = [FURenderKit shareRenderKit].internalCameraSetting.format == kCVPixelFormatType_32BGRA ? kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:kCVPixelFormatType_32BGRA; - [FURenderKit shareRenderKit].internalCameraSetting.format = format; -} - --(void)headButtonViewSelImageAction:(UIButton *)btn{ - - if (!self.needsPresetSelections) { - [self fuPopupMenuDidSelectedImage]; - return; - } - - if (self.canPushImageSelView) { - [FUPopupMenu showRelyOnView:btn frame:CGRectMake(17, CGRectGetMaxY(self.headButtonView.frame) + 1 , 340, 132) defaultSelectedAtIndex:_selIndex onlyTop:NO delegate:self]; - } else { - if (self.type == FUModuleTypeQualityTicker) { - // 精品贴纸特殊处理 - [FUPopupMenu showRelyOnView:btn frame:CGRectMake(17, CGRectGetMaxY(self.headButtonView.frame) + 1, 340, 80) defaultSelectedAtIndex:_selIndex onlyTop:YES dataSource:@[@"720x1280", @"1080x1920"] delegate:self]; - } else { - [FUPopupMenu showRelyOnView:btn frame:CGRectMake(17, CGRectGetMaxY(self.headButtonView.frame) + 1 , 340, 80) defaultSelectedAtIndex:_selIndex onlyTop:YES delegate:self]; - } - } -} - --(void)headButtonViewBuglyAction:(UIButton *)btn{ - self.buglyLabel.hidden = !self.buglyLabel.hidden; -} - --(void)headButtonViewSwitchAction:(UIButton *)sender{ - sender.userInteractionEnabled = NO ; - dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC); - dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){ - sender.userInteractionEnabled = YES ; - }); - if (![self.mCamera supportsAVCaptureSessionPreset:sender.selected]) {//硬件不支持 降低一个分辨率 - _selIndex = _selIndex - 1; - [self fuPopupMenuDidSelectedAtIndex:_selIndex]; - } - - [self.mCamera changeCameraInputDeviceisFront:sender.selected]; - [FURenderKit shareRenderKit].internalCameraSetting.position = self.mCamera.isFrontCamera?AVCaptureDevicePositionFront:AVCaptureDevicePositionBack; - /**切换摄像头要调用此函数*/ - [self.baseManager setOnCameraChange]; - sender.selected = !sender.selected ; -} - -#pragma mark - FULightingViewDelegate - -static CFAbsoluteTime adjustTime = 0; --(void)lightingViewValueDidChange:(float)value { - adjustTime = CFAbsoluteTimeGetCurrent() ; - [self hiddenAdjustViewWithTime:1.3]; - [self.mCamera setExposureValue:value]; -} - -- (void)hiddenAdjustViewWithTime:(float)time { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - - if (CFAbsoluteTimeGetCurrent() - adjustTime > 1.29) { - self.adjustImage.hidden = YES ; - self.lightingView.hidden = YES ; - } - }); -} - -#pragma mark - PhotoButtonDelegate - -/* 拍照 */ -- (void)takePhoto { - [self controlEventWithInterval:0.1 queue:dispatch_get_main_queue() controlEventBlock:^{ - UIImage *image = [FURenderKit captureImage]; - if (image) { - [self takePhotoToSave:image]; - } - }]; -} - --(void)takePhotoToSave:(UIImage *)image{ - UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); -} - -/* 开始录像 */ -- (void)startRecord { - NSString *videoPath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4", FUCurrentDateString()]]; - if (!videoPath) { - return; - } - [FURenderKit startRecordVideoWithFilePath:videoPath]; -} - -/* 停止录像 */ -- (void)stopRecord { - __weak typeof(self)weakSelf = self ; - [FURenderKit stopRecordVideoComplention:^(NSString * _Nonnull filePath) { - if (!filePath) { - return; - } - dispatch_async(dispatch_get_main_queue(), ^{ - UISaveVideoAtPathToSavedPhotosAlbum(filePath, weakSelf, @selector(video:didFinishSavingWithError:contextInfo:), NULL); - }); - }]; -} - -- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ - if(error != NULL){ - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存视频失败", nil)]; - - }else{ - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"视频已保存到相册", nil)]; - } -} - -- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{ - if(error != NULL){ - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存图片失败", nil)]; - }else{ - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"图片已保存到相册", nil)]; - } -} - -- (FUImageOrientation)transformOrientation:(AVCaptureVideoOrientation)orientation { - switch (orientation) { - case AVCaptureVideoOrientationPortrait: - return FUImageOrientationUP; - break; - case AVCaptureVideoOrientationPortraitUpsideDown: - return FUImageOrientationDown; - break; - case AVCaptureVideoOrientationLandscapeRight: - return FUImageOrientationRight; - break; - case AVCaptureVideoOrientationLandscapeLeft: - return FUImageOrientationLeft; - break; - default: - return 0; - break; - } - return 0; -} - -#pragma mark - FURenderKitDelegate - -static int rate = 0; -static NSTimeInterval totalRenderTime = 0; -static NSTimeInterval oldTime = 0; -static NSTimeInterval startTime = 0; -// 使用内部相机时,即将处理图像时输入回调 -- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput { - imageW = CVPixelBufferGetWidth(renderInput.pixelBuffer); - imageH = CVPixelBufferGetHeight(renderInput.pixelBuffer); - [self.baseManager updateBeautyBlurEffect]; - startTime = [[NSDate date] timeIntervalSince1970]; -} - -// 使用内部相机时,处理图像后的输出回调 -- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput { - NSTimeInterval endTime = [[NSDate date] timeIntervalSince1970]; - totalRenderTime += endTime - startTime; - rate ++; - CVPixelBufferRef pixelBuffer = renderOutput.pixelBuffer; - [self updateVideoParametersText:endTime bufferRef:pixelBuffer]; - /* 拍照抓图 */ - if (!mCaptureImage && semaphore) { - mCaptureImage = [FUImageHelper imageFromPixelBuffer:pixelBuffer]; - dispatch_semaphore_signal(semaphore); - } - - [self autoFocus]; - /**判断是否检测到人脸*/ - [self displayPromptText]; - -} - -// 使用内部相机时,内部是否进行render处理,返回NO,将直接输出原图。 -- (BOOL)renderKitShouldDoRender{ - return !_openComp; -} - -#pragma mark - FUCameraDataSource --(CGPoint)fuCaptureFaceCenterInImage:(FUCaptureCamera *)camera{ - return self.baseManager.faceCenter; -} - -#pragma mark - 刷新bugly text -// 更新视频参数栏 --(void)updateVideoParametersText:(NSTimeInterval)startTime bufferRef:(CVPixelBufferRef)pixelBuffer{ - if (startTime - oldTime >= 1) {//一秒钟计算平均值 - oldTime = startTime; - int diaplayRate = rate; - NSTimeInterval diaplayRenderTime = totalRenderTime; - - float w = CVPixelBufferGetWidth(pixelBuffer); - float h = CVPixelBufferGetHeight(pixelBuffer); - NSString *ratioStr = [NSString stringWithFormat:@"%.0fX%.0f", w, h]; - - dispatch_async(dispatch_get_main_queue(), ^{ - NSString *buglyString = [NSString stringWithFormat:@"resolution:\n%@\nfps: %d\nrender time:\n%.0fms",ratioStr, diaplayRate, diaplayRenderTime * 1000.0 / diaplayRate]; - self.buglyLabel.text = buglyString; - }); - totalRenderTime = 0; - rate = 0; - } -} - -#pragma mark - FUPopupMenuDelegate - --(void)headButtonViewBackAction:(UIButton *)btn{ - dispatch_semaphore_signal(signal); - [[FURenderKit shareRenderKit] stopInternalCamera]; - _isCameraRunning = NO; - [FURenderKit shareRenderKit].glDisplayView = nil; - // 分别率还原成720 * 1080 - [FURenderKit shareRenderKit].internalCameraSetting.sessionPreset = AVCaptureSessionPreset1280x720; - // 格式还原为kCVPixelFormatType_32BGRA - [FURenderKit shareRenderKit].internalCameraSetting.format = kCVPixelFormatType_32BGRA; - [self.baseManager clearItems]; - [self.navigationController popViewControllerAnimated:YES]; - dispatch_semaphore_signal(signal); -} - --(void)fuPopupMenuDidSelectedAtIndex:(NSInteger)index{ - [self.baseManager setOnCameraChange]; - BOOL ret = NO; - NSInteger old = _selIndex; - _selIndex = (int)index; - - switch (index) { - case 0: - ret = self.type == FUModuleTypeQualityTicker ? [self.mCamera changeSessionPreset:AVCaptureSessionPreset1280x720] : [self.mCamera changeSessionPreset:AVCaptureSessionPreset640x480]; - break; - case 1: - ret = self.type == FUModuleTypeQualityTicker ? [self.mCamera changeSessionPreset:AVCaptureSessionPreset1920x1080] : [self.mCamera changeSessionPreset:AVCaptureSessionPreset1280x720]; - break; - case 2: - ret = [self.mCamera changeSessionPreset:AVCaptureSessionPreset1920x1080]; - break; - default: - break; - } - - [FURenderKit shareRenderKit].internalCameraSetting.sessionPreset = self.mCamera.sessionPreset; - - if (!ret) { - NSLog(@"摄像机不支持"); - [SVProgressHUD showInfoWithStatus:@"摄像机不支持"]; - _selIndex = (int)old; - } -} - --(void)fuPopupMenuDidSelectedImage { - //更新美颜参数,使得自定义照片和视频可以直接使用已经设置好的参数。 - [self.baseManager updateBeautyCache:NO]; - - [self didClickSelPhoto]; -} - -#pragma mark - Overriding - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return UIStatusBarStyleLightContent; -} - -- (BOOL)needsPresetSelections { - return YES; -} - -- (BOOL)needsLoadingBeauty { - return YES; -} - -- (FUAIModelType)necessaryAIModelTypes { - return FUAIModelTypeFace; -} - --(void)didClickSelPhoto{ - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - [self.navigationController pushViewController:vc animated:YES]; -} - --(void)displayPromptText { - BOOL isHaveFace = [self.baseManager faceTrace]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"No_Face_Tracking",nil); - self.noTrackLabel.hidden = isHaveFace; - }); -} - -#pragma mark - Getters - -- (FUGLDisplayView *)renderView { - if (!_renderView) { - /* opengl */ - _renderView = [[FUGLDisplayView alloc] initWithFrame:self.view.bounds]; - _renderView.layer.masksToBounds = YES; - [self.view addSubview:_renderView]; - [_renderView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self.view); - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); - if(iPhoneXStyle){ - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-50); - }else{ - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } - } else { - // Fallback on earlier versions - make.top.equalTo(self.view.mas_top); - make.bottom.equalTo(self.view.mas_bottom); - } - - make.left.right.equalTo(self.view); - }]; - } - return _renderView; -} - -#pragma mark - Memory warning - -- (void)didReceiveMemoryWarning { - NSLog(@"*******************self == %@ didReceiveMemoryWarning *******************",self); -} - -@end diff --git a/FULiveDemo/Modules/Render/ViewController/FURenderMediaViewController.h b/FULiveDemo/Modules/Render/ViewController/FURenderMediaViewController.h deleted file mode 100644 index c3e52b18..00000000 --- a/FULiveDemo/Modules/Render/ViewController/FURenderMediaViewController.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// FURenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2021/12/7. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -#import "FUBaseViewControllerManager.h" - -typedef NS_ENUM(NSUInteger, FURenderMediaType) { - FURenderMediaTypeImage, - FURenderMediaTypeVideo -}; - -typedef NS_ENUM(NSUInteger, FUTrackType) { - FUTrackTypeFace, - FUTrackTypeBody -}; - -NS_ASSUME_NONNULL_BEGIN - -@protocol FURenderMediaProtocol - -/// 是否需要检测 -@property (nonatomic, assign, getter=isNeedTrack) BOOL needTrack; - -@optional - -/// 是否停止渲染流程(出原图) -@property (nonatomic, assign) BOOL stopRendering; - -/// 检测类型(人脸/人体) -@property (nonatomic, assign) FUTrackType trackType; - -/// 输出单帧视频数据 -- (void)renderMediaDidOutputPixelBuffer:(CVPixelBufferRef)pixelBuffer; - -/// 输出图片数据 -- (void)renderMediaDidOutputImage:(UIImage *)image; - -@end - -@interface FURenderMediaViewController : UIViewController - -@property (nonatomic, strong, readonly) FUGLDisplayView *displayView; - -@property (nonatomic, assign, readonly) FURenderMediaType mediaType; - -@property (nonatomic, strong, readonly) FUBaseViewControllerManager *baseManager; - -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)init NS_UNAVAILABLE; - -- (instancetype)initWithImage:(UIImage *)image; - -- (instancetype)initWithVideoURL:(NSURL *)videoURL; - -- (void)refreshDownloadButtonTransformWithHeight:(CGFloat)height show:(BOOL)shown; - -- (void)bringFunctionButtonToFront; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Render/ViewController/FURenderMediaViewController.m b/FULiveDemo/Modules/Render/ViewController/FURenderMediaViewController.m deleted file mode 100644 index 6554b6c8..00000000 --- a/FULiveDemo/Modules/Render/ViewController/FURenderMediaViewController.m +++ /dev/null @@ -1,511 +0,0 @@ -// -// FURenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2021/12/7. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -#import - -#import - -#define kFUFinalPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"finalVideo.mp4"] - -@interface FURenderMediaViewController () - -@property (nonatomic, strong) UIButton *playVideoButton; - -@property (nonatomic, strong) UIButton *downloadButton; - -@property (nonatomic, strong,) UILabel *trackTipLabel; - -@property (nonatomic, strong) AVPlayer *audioReader; - -@property (nonatomic, strong) CADisplayLink *displayLink; - -@property (nonatomic, strong) UIImage *image; - -@property (nonatomic, strong) NSURL *videoURL; - -@property (nonatomic, strong) NSOperationQueue *renderOperationQueue; - -@property (nonatomic, strong) FUGLDisplayView *displayView; - -@property (nonatomic, strong) FUVideoProcessor *videoProcessor; - -@property (nonatomic, assign) FURenderMediaType mediaType; - -@property (nonatomic, strong) FUBaseViewControllerManager *baseManager; - -@end - -@implementation FURenderMediaViewController { - FUImageBuffer currentImageBuffer; - CMSampleBufferRef lastSampleBuffer; - // 是否需要保存图片到相册 - BOOL needDownloadPicture; - BOOL videoProcessingFinished; -} - -@synthesize stopRendering, needTrack, trackType; - -#pragma mark - Initializer - -- (instancetype)initWithImage:(UIImage *)image { - self = [super init]; - if (self) { - NSData *imageData = UIImageJPEGRepresentation(image, 1); - self.image = [UIImage imageWithData:imageData]; - self.mediaType = FURenderMediaTypeImage; - } - return self; -} - -- (instancetype)initWithVideoURL:(NSURL *)videoURL { - self = [super init]; - if (self) { - self.videoURL = videoURL; - self.mediaType = FURenderMediaTypeVideo; - } - return self; -} - -#pragma mark - Life cycle - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.baseManager = [[FUBaseViewControllerManager alloc] init]; - [self.baseManager loadItem]; - [self.baseManager setFaceProcessorDetectMode:self.mediaType == FURenderMediaTypeImage ? FUFaceProcessorDetectModeImage : FUFaceProcessorDetectModeVideo]; - - [self configureUI]; - -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - // 添加点位测试开关 - if (FUShowLandmark) { - [FULandmarkManager show]; - } -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; - - if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) { - // 最好判断Application状态 - [self start]; - } -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - [self stop]; - - [self.baseManager updateBeautyCache:NO]; - [self.baseManager releaseItem]; - - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; - - // 移除点位测试开关 - if (FUShowLandmark) { - [FULandmarkManager dismiss]; - } -} - -- (void)dealloc { - if (¤tImageBuffer) { - [UIImage freeImageBuffer:¤tImageBuffer]; - } -} - -#pragma mark - UI - -- (void)configureUI { - self.view.backgroundColor = [UIColor blackColor]; - - [self.view addSubview:self.displayView]; - [self.displayView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.equalTo(self.view); - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); - if(iPhoneXStyle){ - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-50); - }else{ - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); - } - } else { - make.top.equalTo(self.view.mas_top); - make.bottom.equalTo(self.view.mas_bottom); - } - }]; - - UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [backButton setImage:[UIImage imageNamed:@"back_btn_normal"] forState:UIControlStateNormal]; - [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:backButton]; - [backButton mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(20); - } else { - make.top.equalTo(self.view.mas_top).offset(30); - } - make.leading.equalTo(self.view.mas_leading).offset(10); - make.size.mas_offset(CGSizeMake(44, 44)); - }]; - - [self.view addSubview:self.downloadButton]; - [self.downloadButton mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).offset(-69); - } else { - make.bottom.equalTo(self.view.mas_bottom).offset(-69); - } - make.centerX.equalTo(self.view); - make.size.mas_offset(CGSizeMake(85, 85)); - }]; - - self.downloadButton.hidden = self.mediaType == FURenderMediaTypeVideo; - - if (self.mediaType == FURenderMediaTypeVideo) { - [self.view addSubview:self.playVideoButton]; - [self.playVideoButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.view); - make.size.mas_offset(CGSizeMake(80, 80)); - }]; - } - - [self.view addSubview:self.trackTipLabel]; - [self.trackTipLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.view); - }]; -} - -#pragma mark - Override methods - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -#pragma mark - Instance methods - -- (void)refreshDownloadButtonTransformWithHeight:(CGFloat)height show:(BOOL)shown { - if (shown) { - CGAffineTransform photoTransform0 = CGAffineTransformMakeTranslation(0, height * -0.8); - CGAffineTransform photoTransform1 = CGAffineTransformMakeScale(0.9, 0.9); - [UIView animateWithDuration:0.25 animations:^{ - self.downloadButton.transform = CGAffineTransformConcat(photoTransform0, photoTransform1) ; - }]; - } else { - [UIView animateWithDuration:0.25 animations:^{ - self.downloadButton.transform = CGAffineTransformIdentity; - }]; - } -} - -- (void)bringFunctionButtonToFront { - [self.view bringSubviewToFront:self.downloadButton]; -} - -#pragma mark - Private methods - -- (void)start { - [self.baseManager setOnCameraChange]; - if (self.mediaType == FURenderMediaTypeImage) { - if (!self.displayLink) { - self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkAction)]; - [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; - [self.displayLink setFrameInterval:10]; - } - self.displayLink.paused = NO; - } else { - [self playVideoAction:self.playVideoButton]; - } -} - -- (void)stop { - if (self.mediaType == FURenderMediaTypeImage) { - self.displayLink.paused = YES; - [self.displayLink invalidate]; - self.displayLink = nil; - // 取消所有任务 - [self.renderOperationQueue cancelAllOperations]; - } else { - videoProcessingFinished = NO; - [self.videoProcessor cancelProcessing]; - [self.audioReader pause]; - self.audioReader = nil; - } -} - -- (void)startVideoReader { - if (self.videoProcessor) { - [self.videoProcessor cancelProcessing]; - self.videoProcessor = nil; - } - self.videoProcessor = [[FUVideoProcessor alloc] initWithReadingURL:self.videoURL writingURL:[NSURL fileURLWithPath:kFUFinalPath]]; - @weakify(self) - self.videoProcessor.processingVideoBufferHandler = ^CVPixelBufferRef _Nonnull(CVPixelBufferRef _Nonnull videoPixelBuffer) { - @strongify(self) - videoPixelBuffer = [self renderVideoPixelBuffer:videoPixelBuffer]; - return videoPixelBuffer; - }; - - self.videoProcessor.processingFinishedHandler = ^{ - @strongify(self) - dispatch_async(dispatch_get_main_queue(), ^{ - self.downloadButton.hidden = NO; - self.playVideoButton.hidden = NO; - }); - self->videoProcessingFinished = YES; - // 获取最后视频帧,需要循环render - self->lastSampleBuffer = [self.videoProcessor.reader lastVideoSampleBuffer]; - while (self->videoProcessingFinished && self->lastSampleBuffer != NULL) { - CVPixelBufferRef lastPixelBuffer = CMSampleBufferGetImageBuffer(self->lastSampleBuffer); - [self renderVideoPixelBuffer:lastPixelBuffer]; - // 设置render时间间隔 - usleep(1000000*0.033); - } - }; - - [self.videoProcessor startProcessing]; - - self.displayView.origintation = (int)self.videoProcessor.reader.videoOrientation; - - self.audioReader = [AVPlayer playerWithURL:self.videoURL]; - self.audioReader.actionAtItemEnd = AVPlayerActionAtItemEndNone; - [self.audioReader play]; -} - -- (CVPixelBufferRef)renderVideoPixelBuffer:(CVPixelBufferRef)videoPixelBuffer { - if (!self.stopRendering) { - FURenderInput *input = [[FURenderInput alloc] init]; - input.pixelBuffer = videoPixelBuffer; - input.renderConfig.imageOrientation = FUImageOrientationUP; - switch (self.videoProcessor.reader.videoOrientation) { - case FUVideoOrientationPortrait: - input.renderConfig.imageOrientation = FUImageOrientationUP; - break; - case FUVideoOrientationLandscapeRight: - input.renderConfig.imageOrientation = FUImageOrientationLeft; - break; - case FUVideoOrientationUpsideDown: - input.renderConfig.imageOrientation = FUImageOrientationDown; - break; - case FUVideoOrientationLandscapeLeft: - input.renderConfig.imageOrientation = FUImageOrientationRight; - break; - } - FURenderOutput *output = [[FURenderKit shareRenderKit] renderWithInput:input]; - videoPixelBuffer = output.pixelBuffer; - } - [self.displayView displayPixelBuffer:videoPixelBuffer]; - if ([self conformsToProtocol:@protocol(FURenderMediaProtocol)] && [self respondsToSelector:@selector(renderMediaDidOutputPixelBuffer:)]) { - [self renderMediaDidOutputPixelBuffer:videoPixelBuffer]; - } - [self resolveTrackResult]; - - return videoPixelBuffer; -} - -/// 处理人脸/人体检测结果 -- (void)resolveTrackResult { - if (!self.isNeedTrack) { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - self.trackTipLabel.hidden = YES; - }]; - } else { - if (self.trackType == FUTrackTypeFace) { - if ([self.baseManager faceTrace]) { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - self.trackTipLabel.hidden = YES; - }]; - } else { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - self.trackTipLabel.text = FUNSLocalizedString(@"未识别到人脸", nil); - self.trackTipLabel.hidden = NO; - }]; - } - } else { - if ([self.baseManager bodyTrace]) { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - self.trackTipLabel.hidden = YES; - }]; - } else { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - self.trackTipLabel.text = FUNSLocalizedString(@"未识别到人体", nil); - self.trackTipLabel.hidden = NO; - }]; - } - } - } -} - -#pragma mark - Event response - -- (void)backAction:(UIButton *)sender { - [self.navigationController popViewControllerAnimated:YES]; -} - -- (void)playVideoAction:(UIButton *)sender { - sender.selected = YES; - sender.hidden = YES; - self.downloadButton.hidden = YES; - videoProcessingFinished = NO; - [self startVideoReader]; -} - -- (void)downloadAction:(UIButton *)sender { - if (self.mediaType == FURenderMediaTypeImage) { - // 需要保存图片到相册 - needDownloadPicture = YES; - } else { - // 保存视频到相册 - UISaveVideoAtPathToSavedPhotosAlbum(kFUFinalPath, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL); - dispatch_async(dispatch_get_main_queue(), ^{ - self.downloadButton.hidden = YES ; - }); - } -} - -- (void)displayLinkAction { - [self.renderOperationQueue addOperationWithBlock:^{ - [self.baseManager updateBeautyBlurEffect]; - @autoreleasepool {//防止大图片,内存峰值过高 - currentImageBuffer = [self.image getImageBuffer]; - if (!self.stopRendering) { - FURenderInput *input = [[FURenderInput alloc] init]; - input.renderConfig.imageOrientation = FUImageOrientationUP; - switch (_image.imageOrientation) { - case UIImageOrientationUp: - input.renderConfig.imageOrientation = FUImageOrientationUP; - break; - case UIImageOrientationLeft: - input.renderConfig.imageOrientation = FUImageOrientationRight; - break; - case UIImageOrientationDown: - input.renderConfig.imageOrientation = FUImageOrientationDown; - break; - case UIImageOrientationRight: - input.renderConfig.imageOrientation = FUImageOrientationLeft; - break; - default: - input.renderConfig.imageOrientation = FUImageOrientationUP; - break; - } - input.imageBuffer = currentImageBuffer; - FURenderOutput *output = [[FURenderKit shareRenderKit] renderWithInput:input]; - currentImageBuffer = output.imageBuffer; - } - if (needDownloadPicture) { - // 保存图片到相册 - UIImage *saveImage = [UIImage imageWithRGBAImageBuffer:¤tImageBuffer autoFreeBuffer:NO]; - needDownloadPicture = NO; - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - UIImageWriteToSavedPhotosAlbum(saveImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); - }]; - } - [self.displayView displayImageData:currentImageBuffer.buffer0 withSize:currentImageBuffer.size]; - if ([self conformsToProtocol:@protocol(FURenderMediaProtocol)] && [self respondsToSelector:@selector(renderMediaDidOutputImage:)]) { - [self renderMediaDidOutputImage:[UIImage imageWithRGBAImageBuffer:¤tImageBuffer autoFreeBuffer:NO]]; - } - [UIImage freeImageBuffer:¤tImageBuffer]; - } - - [self resolveTrackResult]; - }]; -} - -- (void)applicationWillResignActive { - [self stop]; -} - -- (void)applicationDidBecomeActive { - [self start]; -} - -- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { - if (error) { - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存图片失败", nil)]; - } else { - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"图片已保存到相册", nil)]; - } -} - -- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { - if (error) { - [SVProgressHUD showErrorWithStatus:FUNSLocalizedString(@"保存视频失败", nil)]; - } else { - [SVProgressHUD showSuccessWithStatus:FUNSLocalizedString(@"视频已保存到相册", nil)]; - } -} - -#pragma mark - FURenderMediaProtocol - -- (BOOL)isNeedTrack { - return NO; -} - -#pragma mark - Getters - -- (UIButton *)playVideoButton { - if (!_playVideoButton) { - _playVideoButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_playVideoButton setBackgroundImage:[UIImage imageNamed:@"play_icon"] forState:UIControlStateNormal]; - [_playVideoButton setBackgroundImage:[UIImage imageNamed:@"Replay_icon"] forState:UIControlStateSelected]; - _playVideoButton.hidden = YES; - [_playVideoButton addTarget:self action:@selector(playVideoAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _playVideoButton; -} - -- (UIButton *)downloadButton { - if (!_downloadButton) { - _downloadButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _downloadButton.backgroundColor = [UIColor whiteColor]; - _downloadButton.layer.cornerRadius = 42.5; - [_downloadButton setBackgroundImage:[UIImage imageNamed:@"demo_icon_save1"] forState:UIControlStateNormal]; - [_downloadButton addTarget:self action:@selector(downloadAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _downloadButton; -} - -- (UILabel *)trackTipLabel { - if (!_trackTipLabel) { - _trackTipLabel = [[UILabel alloc] init]; - _trackTipLabel.textColor = [UIColor whiteColor]; - _trackTipLabel.font = [UIFont systemFontOfSize:17]; - _trackTipLabel.text = FUNSLocalizedString(@"No_Face_Tracking", @"未检测到人脸"); - _trackTipLabel.hidden = YES; - } - return _trackTipLabel; -} - -- (FUGLDisplayView *)displayView { - if (!_displayView) { - _displayView = [[FUGLDisplayView alloc] initWithFrame:self.view.bounds]; - _displayView.contentMode = FUGLDisplayViewContentModeScaleAspectFit; - } - return _displayView; -} - -- (NSOperationQueue *)renderOperationQueue { - if (!_renderOperationQueue) { - _renderOperationQueue = [[NSOperationQueue alloc] init]; - _renderOperationQueue.maxConcurrentOperationCount = 1; - } - return _renderOperationQueue; -} - -@end diff --git a/FULiveDemo/Modules/Render/ViewController/FUSelectedImageController.h b/FULiveDemo/Modules/Render/ViewController/FUSelectedImageController.h deleted file mode 100644 index ae1a1c4c..00000000 --- a/FULiveDemo/Modules/Render/ViewController/FUSelectedImageController.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FUSelectedImageController.h -// FULiveDemo -// -// Created by L on 2018/7/2. -// Copyright © 2018年 L. All rights reserved. -// -/* 本地图片·视频选择控制器 */ - -#import - -typedef void(^FUImagePickerselCancel)(void); - -@protocol FUImagePickerDataDelegate - -- (void)imagePicker:(UIImagePickerController *)picker didFinishWithInfo:(NSDictionary *)info; -@end - -@interface FUSelectedImageController : UIViewController - -@property (nonatomic, assign) FUModuleType type; - -@property (nonatomic, assign) id delegate; - -@property(nonatomic,copy) FUImagePickerselCancel didCancel; - -@end diff --git a/FULiveDemo/Modules/Render/ViewController/FUSelectedImageController.m b/FULiveDemo/Modules/Render/ViewController/FUSelectedImageController.m deleted file mode 100644 index 818ecdcc..00000000 --- a/FULiveDemo/Modules/Render/ViewController/FUSelectedImageController.m +++ /dev/null @@ -1,263 +0,0 @@ -// -// FUSelectedImageController.m -// FULiveDemo -// -// Created by L on 2018/7/2. -// Copyright © 2018年 L. All rights reserved. -// - -#import "FUSelectedImageController.h" -#import "FUBeautyRenderMediaViewController.h" -#import "FUMakeupRenderMediaViewController.h" -#import "FUStickerRenderMediaViewController.h" -#import "FUGreenScreenRenderMediaViewController.h" -#import "FUBodyBeautyRenderMediaViewController.h" - -#import "UIImage+FU.h" - -#import -#import - -@interface FUSelectedImageController () -@property (strong, nonatomic) UIButton *mSelImageBtn; -@property (strong, nonatomic) UIButton *mSelVideoBtn; -@property (strong, nonatomic) UILabel *mLablel; - -@end - -@implementation FUSelectedImageController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.view.backgroundColor = [UIColor blackColor]; - [self setupView]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle{ - return UIStatusBarStyleLightContent; -} - --(void)setupView{ - UIButton *backBtn = [[UIButton alloc] init]; - [backBtn setImage:[UIImage imageNamed:@"back_btn_normal"] forState:UIControlStateNormal]; - [backBtn addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:backBtn]; - [backBtn mas_makeConstraints:^(MASConstraintMaker *make) { - if (@available(iOS 11.0, *)) { - make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(20); - } else { - make.top.equalTo(self.view.mas_top).offset(30); - } - make.left.equalTo(self.view).offset(10); - make.width.mas_equalTo(44); - make.height.mas_equalTo(44); - }]; - - _mSelImageBtn = [[UIButton alloc] init]; - [_mSelImageBtn setImage:[UIImage imageNamed:@"选择相册icon"] forState:UIControlStateNormal]; - [_mSelImageBtn setBackgroundImage:[UIImage imageNamed:@"selectedBg"] forState:UIControlStateNormal]; - [_mSelImageBtn setTitle:FUNSLocalizedString(@"sel_Photo",nil) forState:UIControlStateNormal]; - [_mSelImageBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [_mSelImageBtn setTitleColor:[UIColor colorWithWhite:1 alpha:0.6] forState:UIControlStateHighlighted]; - [_mSelImageBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -5)]; - [_mSelImageBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)]; - [_mSelImageBtn addTarget:self action:@selector(selectedImage:) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:_mSelImageBtn]; - [_mSelImageBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.centerX.equalTo(self.view); - make.width.mas_equalTo(235); - make.height.mas_equalTo(48); - }]; - - _mSelVideoBtn = [[UIButton alloc] init]; - [_mSelVideoBtn setImage:[UIImage imageNamed:@"视频icon"] forState:UIControlStateNormal]; - [_mSelVideoBtn setBackgroundImage:[UIImage imageNamed:@"selectedBg"] forState:UIControlStateNormal]; - [_mSelVideoBtn setTitle:FUNSLocalizedString(@"sel_Video",nil) forState:UIControlStateNormal]; - [_mSelVideoBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [_mSelVideoBtn setTitleColor:[UIColor colorWithWhite:1 alpha:0.6] forState:UIControlStateHighlighted]; - [_mSelVideoBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -5)]; - [_mSelVideoBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)]; - [_mSelVideoBtn addTarget:self action:@selector(selectedVideo:) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:_mSelVideoBtn]; - [_mSelVideoBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerX.equalTo(self.view); - make.top.equalTo(_mSelImageBtn.mas_bottom).offset(44); - make.width.mas_equalTo(235); - make.height.mas_equalTo(48); - }]; - - _mLablel = [[UILabel alloc] init]; - _mLablel.textColor = [UIColor whiteColor]; - _mLablel.font = [UIFont systemFontOfSize:17]; - _mLablel.textAlignment = NSTextAlignmentCenter; - _mLablel.text = FUNSLocalizedString(@"Choose_photo_or_video_from_your_album",nil); - [self.view addSubview:_mLablel]; - [_mLablel mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(_mSelImageBtn.mas_top).offset(-44); - make.centerX.equalTo(self.view); - make.width.mas_equalTo(300); - make.height.mas_equalTo(22); - }]; -} - - -- (void)selectedImage:(UIButton *)sender { - [self showImagePickerWithMediaType:(NSString *)kUTTypeImage]; -} - -- (void)selectedVideo:(UIButton *)sender { - - [self showImagePickerWithMediaType:(NSString *)kUTTypeMovie]; -} - -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - if (self.delegate && [self.delegate respondsToSelector:@selector(imagePicker:didFinishWithInfo:)]) { - [self.delegate imagePicker:picker didFinishWithInfo:info]; - [self.navigationController popViewControllerAnimated:YES]; - return; - } - - // 关闭相册 - [picker dismissViewControllerAnimated:NO completion:^{ - NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; - - if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]){ //视频 - __block NSURL *videoURL = info[UIImagePickerControllerMediaURL]; - if (!videoURL) { - if (info[UIImagePickerControllerReferenceURL]) { - NSURL *refrenceURL = info[UIImagePickerControllerReferenceURL]; - PHFetchResult *assets = [PHAsset fetchAssetsWithALAssetURLs:@[refrenceURL] options:nil]; - [[PHImageManager defaultManager] requestAVAssetForVideo:assets.firstObject options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { - AVURLAsset *urlAsset = (AVURLAsset *)asset; - videoURL = urlAsset.URL; - [self selectVideo:videoURL]; - }]; - } else { - if (@available(iOS 11.0, *)) { - PHAsset *asset = info[UIImagePickerControllerPHAsset]; - [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { - AVURLAsset *urlAsset = (AVURLAsset *)asset; - videoURL = urlAsset.URL; - [self selectVideo:videoURL]; - }]; - } - } - } else { - [self selectVideo:videoURL]; - } - } else if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { //照片 - - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - - if (!image) { - return; - } - - CGFloat imagePixel = image.size.width * image.size.height; - // 超过限制像素需要压缩 - if (imagePixel > FUPicturePixelMaxSize) { - CGFloat ratio = FUPicturePixelMaxSize / imagePixel * 1.0; - image = [image fu_compress:ratio]; - } - // 图片转正 - if (image.imageOrientation != UIImageOrientationUp && image.imageOrientation != UIImageOrientationUpMirrored) { - image = [image fu_resetImageOrientationToUp]; - } - switch (self.type) { - case FUModuleTypeBeauty:{ - FUBeautyRenderMediaViewController *renderController = [[FUBeautyRenderMediaViewController alloc] initWithImage:image]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeMakeup:{ - FUMakeupRenderMediaViewController *renderController = [[FUMakeupRenderMediaViewController alloc] initWithImage:image]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeSticker:{ - FUStickerRenderMediaViewController *renderController = [[FUStickerRenderMediaViewController alloc] initWithImage:image]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeGreenScreen: { - FUGreenScreenRenderMediaViewController *renderController = [[FUGreenScreenRenderMediaViewController alloc] initWithImage:image]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeBody: { - FUBodyBeautyRenderMediaViewController *renderController = [[FUBodyBeautyRenderMediaViewController alloc] initWithImage:image]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - default: - break; - } - } - }]; - -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { - - // 关闭相册 - [picker dismissViewControllerAnimated:YES completion:nil]; -} - -- (void)selectVideo:(NSURL *)videoURL { - dispatch_async(dispatch_get_main_queue(), ^{ - switch (self.type) { - case FUModuleTypeBeauty:{ - FUBeautyRenderMediaViewController *renderController = [[FUBeautyRenderMediaViewController alloc] initWithVideoURL:videoURL]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeMakeup:{ - FUMakeupRenderMediaViewController *renderController = [[FUMakeupRenderMediaViewController alloc] initWithVideoURL:videoURL]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeSticker:{ - FUStickerRenderMediaViewController *renderController = [[FUStickerRenderMediaViewController alloc] initWithVideoURL:videoURL]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeGreenScreen: { - FUGreenScreenRenderMediaViewController *renderController = [[FUGreenScreenRenderMediaViewController alloc] initWithVideoURL:videoURL]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - case FUModuleTypeBody: { - FUBodyBeautyRenderMediaViewController *renderController = [[FUBodyBeautyRenderMediaViewController alloc] initWithVideoURL:videoURL]; - [self.navigationController pushViewController:renderController animated:YES]; - } - break; - default: - break; - } - }); -} - -- (void)showImagePickerWithMediaType:(NSString *)mediaType { - - UIImagePickerController *picker = [[UIImagePickerController alloc] init]; - - picker.delegate = self; - picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; - picker.allowsEditing = NO; - picker.mediaTypes = @[mediaType] ; - [self presentViewController:picker animated:YES completion:nil]; -} - -// 返回 -- (void)backAction:(UIButton *)sender { - if (self.didCancel) { - self.didCancel(); - } - [self.navigationController popViewControllerAnimated:YES]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; -} - -@end diff --git a/FULiveDemo/Modules/Segmentation/Manager/FUBGSegmentManager.h b/FULiveDemo/Modules/Segmentation/Manager/FUBGSegmentManager.h deleted file mode 100644 index 32d8c732..00000000 --- a/FULiveDemo/Modules/Segmentation/Manager/FUBGSegmentManager.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// FUBGSegmentManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUStickerManager.h" -#import - -#define CUSTOMBG @"bg_segment" -#define HUMANOUTLINE @"human_outline_740" - -NS_ASSUME_NONNULL_BEGIN -@class FUBGSaveModel, FUBGSaveModel; -@interface FUBGSegmentManager : FUStickerManager - -@property (nonatomic, copy) NSArray *items; - -@property (nonatomic, strong) FUAISegment * _Nullable segment; - -- (BOOL)saveModel:(FUBGSaveModel *)model; - -- (BOOL)isHaveCustItem; - -- (FUBGSaveModel *)getSaveModel; - -//是否有自定的数据要添加 -- (NSArray *)additionalItems; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/Manager/FUBGSegmentManager.m b/FULiveDemo/Modules/Segmentation/Manager/FUBGSegmentManager.m deleted file mode 100644 index dd5d890a..00000000 --- a/FULiveDemo/Modules/Segmentation/Manager/FUBGSegmentManager.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// FUBGSegmentManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBGSegmentManager.h" -#import "FUBGSaveModel.h" -@interface FUBGSegmentManager () -@property (nonatomic, copy) void(^ComplentionBlock)(BOOL finished); -@end - -@implementation FUBGSegmentManager -@synthesize selectedItem; - -- (instancetype)init { - self = [super init]; - if (self) { - - } - return self; -} - -//是否有自定的数据要添加 -- (NSArray *)additionalItems { - NSMutableArray *arr = [NSMutableArray arrayWithObject:@"resetItem"]; - [arr addObject:@"icon_yitu_add"]; - if ([self isHaveCustItem]) { - [arr addObject:CUSTOMBG]; - } - return [NSArray arrayWithArray:arr]; -} - --(NSString *)filePath { - NSString *path = [FUDocumentPath stringByAppendingPathComponent:@"FUBGSaveModel.data"]; - return path; -} - -- (BOOL)saveModel:(FUBGSaveModel *)model { - NSString *path = [self filePath]; - BOOL success = [NSKeyedArchiver archiveRootObject:model toFile:path]; - return success; -} - - -- (BOOL)isHaveCustItem { - FUBGSaveModel *model = [self getSaveModel]; - if (model) { - return YES; - }else{ - return NO; - } -} - -- (FUBGSaveModel *)getSaveModel { - NSString *path = [self filePath]; - if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { - return nil; - } - - FUBGSaveModel *model = nil; - @try { - model = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; - } @catch (NSException *exception) { - [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; - } @finally { - } - return model; -} - - -- (void)setSegment:(FUAISegment *)segment { - _segment = segment; -} - -- (void)loadItem:(NSString *)itemName - completion:(void (^ __nullable)(BOOL finished))completion { - self.selectedItem = itemName; - [self.segment stopVideoDecode];//内部会判断,存在视频解码就释放不存在不操作直接返回。 - self.ComplentionBlock = completion; - if (itemName != nil && ![itemName isEqual: @"resetItem"]) { - [self loadItem]; - } else { - [self releaseItem]; - } -} - -- (void)loadItem { - NSString *itemName = self.selectedItem; - NSString *path = [[NSBundle mainBundle] pathForResource:[itemName stringByAppendingString:@".bundle"] ofType:nil]; - FUAISegment *newItem = [[FUAISegment alloc] initWithPath:path name:@"segment"]; - [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.segment withSticker:newItem completion:^{ - if (self.ComplentionBlock) { - self.ComplentionBlock(YES); - } - }]; - self.segment = newItem; -} - -- (void)releaseItem { - [self.segment stopVideoDecode]; - [[FURenderKit shareRenderKit].stickerContainer removeSticker:self.segment completion:^{ - if (self.ComplentionBlock) { - self.ComplentionBlock(NO); - } - }]; -} - - -- (NSArray *)items { - if (!_items) { - _items = @[@"human_outline_740", @"boyfriend1_740", @"boyfriend3_740", @"boyfriend2_740", @"hez_ztt_fu", @"gufeng_zh_fu", @"xiandai_ztt_fu", @"sea_lm_fu", @"ice_lm_fu"]; - } - return _items; -} - -@end diff --git a/FULiveDemo/Modules/Segmentation/Model/FUBGSaveModel.h b/FULiveDemo/Modules/Segmentation/Model/FUBGSaveModel.h deleted file mode 100644 index 2e50a679..00000000 --- a/FULiveDemo/Modules/Segmentation/Model/FUBGSaveModel.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// FUBGSaveModel.h -// FULiveDemo -// -// Created by 孙慕 on 2021/2/23. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef enum : NSUInteger { - FUBGSaveModelTypeImage, - FUBGSaveModelTypeVideo, -} FUBGSaveModelType; - -@interface FUBGSaveModel : NSObject - -/* 类别名称 */ -@property (nonatomic, copy) NSString* pathName; - -@property (nonatomic, assign) FUBGSaveModelType type; - -@property (nonatomic, strong) NSURL *url; - -@property (nonatomic, strong) UIImage *iconImage; -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/Model/FUBGSaveModel.m b/FULiveDemo/Modules/Segmentation/Model/FUBGSaveModel.m deleted file mode 100644 index 84e6986c..00000000 --- a/FULiveDemo/Modules/Segmentation/Model/FUBGSaveModel.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// FUBGSaveModel.m -// FULiveDemo -// -// Created by 孙慕 on 2021/2/23. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUBGSaveModel.h" -@implementation FUBGSaveModel -//序列化 -- (void)encodeWithCoder:(NSCoder *)coder { - [self mj_encode:coder]; -} - -//反序列化 -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super init]; - if (self) { - [self mj_decode:coder]; - } - return self; -} - -@end diff --git a/FULiveDemo/Modules/Segmentation/Model/FUSegmentationModel.h b/FULiveDemo/Modules/Segmentation/Model/FUSegmentationModel.h new file mode 100644 index 00000000..8c855a86 --- /dev/null +++ b/FULiveDemo/Modules/Segmentation/Model/FUSegmentationModel.h @@ -0,0 +1,32 @@ +// +// FUSegmentationModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import + +typedef NS_ENUM(NSUInteger, FUSegmentationType) { + FUSegmentationTypeDefault = 0, // 默认本地加载 + FUSegmentationTypeImage, // 自定义图片 + FUSegmentationTypeVideo // 自定义视频 +}; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUSegmentationModel : NSObject + +@property (nonatomic, assign) FUSegmentationType type; + +@property (nonatomic, copy, nullable) NSString *name; +/// 是否自定义 +@property (nonatomic, assign) BOOL isCustom; +/// 自定义保存的图片或者视频预览图 +@property (nonatomic, strong, nullable) UIImage *image; +/// 自定义视频保存的链接 +@property (nonatomic, strong, nullable) NSURL *videoURL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/Model/FUSegmentationModel.m b/FULiveDemo/Modules/Segmentation/Model/FUSegmentationModel.m new file mode 100644 index 00000000..1a71b693 --- /dev/null +++ b/FULiveDemo/Modules/Segmentation/Model/FUSegmentationModel.m @@ -0,0 +1,13 @@ +// +// FUSegmentationModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FUSegmentationModel.h" + +@implementation FUSegmentationModel + + +@end diff --git a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationController.h b/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationController.h deleted file mode 100644 index f4e4338b..00000000 --- a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBGSegmentationController.h -// FULiveDemo -// -// Created by 孙慕 on 2019/6/25. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBGSegmentationController : FUBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationController.m b/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationController.m deleted file mode 100644 index d3be6414..00000000 --- a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationController.m +++ /dev/null @@ -1,377 +0,0 @@ -// -// FUBGSegmentationController.m -// FULiveDemo -// -// Created by 孙慕 on 2019/6/25. -// Copyright © 2019 FaceUnity. All rights reserved. -// - -#import "FUBGSegmentationController.h" -#import "FUBGSegmentationRenderMediaViewController.h" -#import "FUSelectedImageController.h" -#import "FUBGSegmentManager.h" -#import "FUBGSaveModel.h" -#import "UIImage+FU.h" - -#import -#import -#import -#import - -@interface FUBGSegmentationController () -@property (strong, nonatomic) FUItemsView *itemsView; -@property (strong, nonatomic) FUBGSegmentManager *segmentManager; - -@property (strong, nonatomic) NSMutableArray *list; - -@property (nonatomic, assign) BOOL renderMedia; - -@end - -@implementation FUBGSegmentationController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - - [self.baseManager setMaxBodies:4]; - - self.segmentManager = [[FUBGSegmentManager alloc] init]; - [self setupView]; - - NSMutableArray *arr = [NSMutableArray arrayWithArray:[self.segmentManager additionalItems]]; - [arr addObjectsFromArray:self.segmentManager.items]; - _list = [NSMutableArray arrayWithArray:arr]; - self.itemsView.items = _list; - - /* 初始状态 */ - NSInteger selectedIndex = _list.count > 0 ? 2 : 0; - if ([self.segmentManager isHaveCustItem]) { - selectedIndex = 3;//人像描边 - } - self.itemsView.selectedIndex = selectedIndex; - - [self itemsView:self.itemsView didSelectItemAtIndex:selectedIndex]; - - self.segmentManager.selectedItem = self.list[selectedIndex]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; - -} - --(void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - _renderMedia = NO; - // 返回当前界面的时候,重新加载 - if (self.itemsView.selectedIndex < 0) { - self.itemsView.selectedIndex = [self.list indexOfObject:self.segmentManager.selectedItem]; - }else { - //自定义背景并且背景 - if ([self.itemsView.items[self.itemsView.selectedIndex] isEqualToString:CUSTOMBG]) { - FUBGSaveModel *model = [self.segmentManager getSaveModel]; - if (model && model.type == FUBGSaveModelTypeVideo) { - [self.segmentManager.segment startVideoDecode]; - } - } - } -} - --(void)setupView { - self.itemsView = [[FUItemsView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 84)]; - self.itemsView.delegate = self; - [self.view addSubview:self.itemsView]; - [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } - }]; - - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; -} - -- (void)headButtonViewSelImageAction:(UIButton *)btn { - [super headButtonViewSelImageAction:btn]; - _renderMedia = YES; -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - NSString *item = itemsView.items[index]; - __weak typeof(self) weak = self; - if (index == 1) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.segmentManager.segment stopVideoDecode]; - [self didClickSelPhoto]; - }); - } else if ([item isEqualToString:CUSTOMBG]) { - [self.itemsView startAnimation]; - [self.segmentManager loadItem:item completion:^(BOOL finished) { - dispatch_async(dispatch_get_main_queue(), ^{ - [weak.itemsView stopAnimation]; - if (finished) { - FUBGSaveModel *model = [weak.segmentManager getSaveModel]; - if (model.type == FUBGSaveModelTypeVideo) { - weak.segmentManager.segment.videoPath = model.url; - UIImage *image = model.iconImage; //先从本地取,没有在解析视频第一帧 - if (!image) { - image = [FUImageHelper getPreviewImageWithVideoURL:model.url]; - } - if (image) { - [weak saveImg:image withName:CUSTOMBG]; - } else { - //未获取当前录像的第一帧,移除自定义背景 - [_list removeObject:CUSTOMBG]; - weak.itemsView.items = _list; - weak.itemsView.selectedIndex = 2; - - //移除缓存的第一帧图片 - [weak removeCacheImage: CUSTOMBG]; - //刷新默认的outline 效果 - [weak itemsView:weak.itemsView didSelectItemAtIndex:2]; - } - } else { - UIImage *image = [weak loadImageWithName:CUSTOMBG]; - if (image) { - weak.segmentManager.segment.backgroundImage = image; - } - } - } - }); - }]; - } else if ([item isEqualToString:HUMANOUTLINE]) { - [self.itemsView startAnimation]; - [self.segmentManager loadItem:item completion:^(BOOL finished) { - [weak.itemsView stopAnimation]; - weak.segmentManager.segment.lineGap = 2.8; - weak.segmentManager.segment.lineSize = 2.8; - weak.segmentManager.segment.lineColor = FUColorMake(255/255.0, 180/255.0, 0.0, 0.0); - [weak.itemsView stopAnimation]; - }]; - } else { - [self.itemsView startAnimation]; - [self.segmentManager loadItem:item completion:^(BOOL finished) { - [weak.itemsView stopAnimation]; - }]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - NSString *hint = [self.segmentManager getStickTipsWithItemName:item]; - self.tipLabel.hidden = hint == nil; - if (hint && hint.length != 0) { - self.tipLabel.text = FUNSLocalizedString(hint, nil); - } - [FUBGSegmentationController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; - [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; - }); -} - -- (void)dismissTipLabel -{ - self.tipLabel.hidden = YES; -} - -/* 切换前后置 */ --(void)headButtonViewSwitchAction:(UIButton *)btn{ - [super headButtonViewSwitchAction:btn]; - - self.segmentManager.segment.cameraMode = btn.selected?1:0; - } - -#pragma mark - Overriding - --(void)didClickSelPhoto{ - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - vc.delegate = self; - [self.navigationController pushViewController:vc animated:YES]; - - vc.didCancel = ^{ - _itemsView.selectedIndex = [self.list indexOfObject:self.segmentManager.selectedItem]; - [_itemsView stopAnimation]; - }; -} - --(void)displayPromptText{ - if ([self.segmentManager.selectedItem isEqualToString:@"resetItem"]) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.hidden = YES; - }); - } else { - BOOL result = [self.baseManager bodyTrace]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.noTrackLabel.text = FUNSLocalizedString(@"未检测到人体",nil); - self.noTrackLabel.hidden = result; - }) ; - } -} - -- (FUAIModelType)necessaryAIModelTypes { - return FUAIModelTypeFace | FUAIModelTypeHuman; -} - -#pragma mark - FUImagePickerDataDelegate - --(void)imagePicker:(UIImagePickerController *)picker didFinishWithInfo:(NSDictionary *)info { - - if (_renderMedia) { - // 图片视频渲染 - [picker dismissViewControllerAnimated:NO completion:^{ - NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; - if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]){ //视频 - NSURL *videoURL = info[UIImagePickerControllerMediaURL]; - if (!videoURL) { - return; - } - dispatch_async(dispatch_get_main_queue(), ^{ - FUBGSegmentationRenderMediaViewController *renderMediaController = [[FUBGSegmentationRenderMediaViewController alloc] initWithVideoURL:videoURL]; - [self.navigationController pushViewController:renderMediaController animated:YES]; - }); - } else { - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - if (!image) { - return; - } - CGFloat imagePixel = image.size.width * image.size.height; - // 超过限制像素需要压缩 - if (imagePixel > FUPicturePixelMaxSize) { - CGFloat ratio = FUPicturePixelMaxSize / imagePixel * 1.0; - image = [image fu_compress:ratio]; - } - // 图片转正 - if (image.imageOrientation != UIImageOrientationUp && image.imageOrientation != UIImageOrientationUpMirrored) { - image = [image fu_resetImageOrientationToUp]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - FUBGSegmentationRenderMediaViewController *renderMediaController = [[FUBGSegmentationRenderMediaViewController alloc] initWithImage:image]; - [self.navigationController pushViewController:renderMediaController animated:YES]; - }); - } - }]; - return; - } - [picker dismissViewControllerAnimated:NO completion:nil]; - if ([self.segmentManager isHaveCustItem]) { - [_list removeObject:CUSTOMBG]; - } - [self.segmentManager.segment stopVideoDecode]; - NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; - if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]){ //视频 - __block NSURL *videoURL = info[UIImagePickerControllerMediaURL]; - if (!videoURL) { - if (info[UIImagePickerControllerReferenceURL]) { - NSURL *refrenceURL = info[UIImagePickerControllerReferenceURL]; - PHFetchResult *assets = [PHAsset fetchAssetsWithALAssetURLs:@[refrenceURL] options:nil]; - [[PHImageManager defaultManager] requestAVAssetForVideo:assets.firstObject options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { - AVURLAsset *urlAsset = (AVURLAsset *)asset; - videoURL = urlAsset.URL; - [self selectVideo:videoURL]; - }]; - } else { - if (@available(iOS 11.0, *)) { - PHAsset *asset = info[UIImagePickerControllerPHAsset]; - [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { - AVURLAsset *urlAsset = (AVURLAsset *)asset; - videoURL = urlAsset.URL; - [self selectVideo:videoURL]; - }]; - } - } - } else { - [self selectVideo:videoURL]; - } - } else if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { //照片 - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - [self selectImage:image]; - } -} - -- (void)selectImage:(UIImage *)image { - FUBGSaveModel *model = [[FUBGSaveModel alloc] init]; - model.pathName = CUSTOMBG; - CGFloat imagePixel = image.size.width * image.size.height; - // 超过限制像素需要压缩 - if (imagePixel > FUPicturePixelMaxSize) { - CGFloat ratio = FUPicturePixelMaxSize / imagePixel * 1.0; - image = [image fu_compress:ratio]; - } - // 图片转正 - if (image.imageOrientation != UIImageOrientationUp && image.imageOrientation != UIImageOrientationUpMirrored) { - image = [image fu_resetImageOrientationToUp]; - } - [self saveImg:image withName:CUSTOMBG]; - model.type = FUBGSaveModelTypeImage; - [self.segmentManager saveModel: model]; - [_list insertObject:CUSTOMBG atIndex:2]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.itemsView.items = _list; - self.itemsView.selectedIndex = 2; - [self itemsView:self.itemsView didSelectItemAtIndex:2]; - }); -} - -- (void)selectVideo:(NSURL *)videoURL { - FUBGSaveModel *model = [[FUBGSaveModel alloc] init]; - model.pathName = CUSTOMBG; - model.type = FUBGSaveModelTypeVideo; - model.url = videoURL; - [self.segmentManager saveModel:model]; - [_list insertObject:CUSTOMBG atIndex:2]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.itemsView.items = _list; - self.itemsView.selectedIndex = 2; - [self itemsView:self.itemsView didSelectItemAtIndex:2]; - }); -} - -// 保存 -- (NSString *)saveImg:(UIImage *)image withName:(NSString *)imgName { - - if (!image) { - return nil; - } - if (!imgName) { - return nil; - } - NSData *imagedata=UIImagePNGRepresentation(image); - NSString *savedImagePath = [FUDocumentPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imgName]]; - [imagedata writeToFile:savedImagePath atomically:YES]; - return savedImagePath; -} - -- (UIImage *)loadImageWithName:(NSString *)imgName { - NSString *imagePath = [FUDocumentPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imgName]]; - - UIImage *img = [UIImage imageWithContentsOfFile:imagePath]; - return img; -} - - -- (void)removeCacheImage:(NSString *)imgName { - NSString *imagePath = [FUDocumentPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imgName]]; - if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) { - [[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil]; - } -} - - -- (void)applicationWillResignActive { - [self.segmentManager.segment stopVideoDecode]; -} - -- (void)applicationDidBecomeActive { - [self.segmentManager.segment startVideoDecode]; -} - --(void)dealloc{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; - NSLog(@"dealloc--------"); -} - -@end diff --git a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationRenderMediaViewController.h b/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationRenderMediaViewController.h deleted file mode 100644 index 8ab3462e..00000000 --- a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationRenderMediaViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUBGSegmentationRenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2022/5/17. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUBGSegmentationRenderMediaViewController : FURenderMediaViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationRenderMediaViewController.m b/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationRenderMediaViewController.m deleted file mode 100644 index d1bb33aa..00000000 --- a/FULiveDemo/Modules/Segmentation/VC/FUBGSegmentationRenderMediaViewController.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// FUBGSegmentationRenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2022/5/17. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FUBGSegmentationRenderMediaViewController.h" -#import "FUBGSegmentManager.h" - -#import - -@interface FUBGSegmentationRenderMediaViewController () - -@property (strong, nonatomic) FUItemsView *itemsView; -@property (strong, nonatomic) FUBGSegmentManager *segmentManager; -@property (copy, nonatomic) NSArray *list; - -@end - -@implementation FUBGSegmentationRenderMediaViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.baseManager setMaxFaces:4]; - [self.baseManager setMaxBodies:4]; - - self.segmentManager = [[FUBGSegmentManager alloc] init]; - - self.itemsView = [[FUItemsView alloc] init]; - self.itemsView.delegate = self; - [self.view addSubview:self.itemsView]; - [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } - }]; - - - - self.itemsView.items = self.list; - self.itemsView.selectedIndex = 2; - // [self itemsViewDidSelectedItem:self.list[2] indexPath:nil]; - self.segmentManager.selectedItem = self.list[2]; - - [self refreshDownloadButtonTransformWithHeight:38 show:YES]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - [self.segmentManager releaseItem]; -} - -#pragma mark - FURenderMediaProtocol - -- (BOOL)isNeedTrack { - return YES; -} - -- (FUTrackType)trackType { - return FUTrackTypeBody; -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsViewDidSelectedItem:(NSString *)item indexPath:(NSIndexPath *)indexPath { - __weak typeof(self) weakSelf = self; - if ([item isEqualToString:HUMANOUTLINE]) { - [self.itemsView startAnimation]; - [self.segmentManager loadItem:item completion:^(BOOL finished) { - __strong typeof(self) strongSelf = weakSelf; - [strongSelf.itemsView stopAnimation]; - strongSelf.segmentManager.segment.lineGap = 2.8; - strongSelf.segmentManager.segment.lineSize = 2.8; - strongSelf.segmentManager.segment.lineColor = FUColorMake(255/255.0, 180/255.0, 0.0, 0.0); - [strongSelf.itemsView stopAnimation]; - }]; - } else { - [self.itemsView startAnimation]; - [self.segmentManager loadItem:item completion:^(BOOL finished) { - __strong typeof(self) strongSelf = weakSelf; - [strongSelf.itemsView stopAnimation]; - }]; - } -} - -- (NSArray *)list { - if (!_list) { - NSMutableArray *temp = [NSMutableArray arrayWithObject:@"resetItem"]; - [temp addObjectsFromArray:@[@"human_outline_740", @"boyfriend1_740", @"boyfriend2_740", @"boyfriend3_740", @"hez_ztt_fu", @"gufeng_zh_fu", @"xiandai_ztt_fu", @"sea_lm_fu", @"ice_lm_fu"]]; - _list = [temp copy]; - } - return _list; -} - -@end diff --git a/FULiveDemo/Modules/Segmentation/ViewController/FUSegmentationViewController.h b/FULiveDemo/Modules/Segmentation/ViewController/FUSegmentationViewController.h new file mode 100644 index 00000000..275a20b0 --- /dev/null +++ b/FULiveDemo/Modules/Segmentation/ViewController/FUSegmentationViewController.h @@ -0,0 +1,17 @@ +// +// FUSegmentationViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FURenderViewController.h" +#import "FUSegmentationViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUSegmentationViewController : FURenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/ViewController/FUSegmentationViewController.m b/FULiveDemo/Modules/Segmentation/ViewController/FUSegmentationViewController.m new file mode 100644 index 00000000..2ce54a7c --- /dev/null +++ b/FULiveDemo/Modules/Segmentation/ViewController/FUSegmentationViewController.m @@ -0,0 +1,268 @@ +// +// FUSegmentationViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FUSegmentationViewController.h" +#import "FUMediaPickerViewController.h" + +#import "UIImage+FU.h" + +static NSString * const kFUSegmentationCellIdentifier = @"FUSegmentationCell"; + +@interface FUSegmentationViewController () + +@property (nonatomic, strong) UICollectionView *itemsView; + +@property (nonatomic, strong) UIView *versionSelectionView; + +@property (nonatomic, strong, readonly) FUSegmentationViewModel *viewModel; + +@end + +@implementation FUSegmentationViewController + +@dynamic viewModel; + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureSubviews]; + [self refreshSubviews]; + + if ([FURenderKitManager sharedManager].devicePerformanceLevel == FUDevicePerformanceLevelHigh) { + // 高端机需要选择分割版本 + [self.view addSubview:self.versionSelectionView]; + [self.view bringSubviewToFront:self.headButtonView]; + } else { + // 默认选中 + if (self.viewModel.customized) { + [self.viewModel selectSegmentationAtIndex:3 completionHandler:nil]; + } else { + [self.viewModel selectSegmentationAtIndex:2 completionHandler:nil]; + } + [self refreshSubviews]; + } +} + +#pragma mark - UI + +- (void)configureSubviews { + UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.bounds) - FUHeightIncludeBottomSafeArea(84), CGRectGetWidth(self.view.bounds), FUHeightIncludeBottomSafeArea(84))]; + [self.view addSubview:bottomView]; + [bottomView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.bottom.equalTo(self.view); + make.height.mas_offset(FUHeightIncludeBottomSafeArea(84)); + }]; + + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(bottomView.frame), CGRectGetHeight(bottomView.frame)); + [bottomView addSubview:effectView]; + + [bottomView addSubview:self.itemsView]; + [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.top.equalTo(bottomView); + make.height.mas_offset(84); + }]; + + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; +} + +- (void)refreshSubviews { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.itemsView reloadData]; + if (self.viewModel.selectedIndex >= 0) { + [self.itemsView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + } + }); +} + +#pragma mark - Event response + +- (void)genericAction:(UIButton *)sender { + [FUAIKit setHumanSegmentationSceneType:FUHumanSegmentationSceneTypeCommon]; + [UIView animateWithDuration:0.3 animations:^{ + self.versionSelectionView.alpha = 0; + } completion:^(BOOL finished) { + [self.versionSelectionView removeFromSuperview]; + }]; + // 默认选中 + if (self.viewModel.customized) { + [self.viewModel selectSegmentationAtIndex:3 completionHandler:nil]; + } else { + [self.viewModel selectSegmentationAtIndex:2 completionHandler:nil]; + } + [self refreshSubviews]; +} + +- (void)videoConferenceAction:(UIButton *)sender { + [FUAIKit setHumanSegmentationSceneType:FUHumanSegmentationSceneTypeMeeting]; + [UIView animateWithDuration:0.3 animations:^{ + self.versionSelectionView.alpha = 0; + } completion:^(BOOL finished) { + [self.versionSelectionView removeFromSuperview]; + }]; + // 默认选中 + if (self.viewModel.customized) { + [self.viewModel selectSegmentationAtIndex:3 completionHandler:nil]; + } else { + [self.viewModel selectSegmentationAtIndex:2 completionHandler:nil]; + } + [self refreshSubviews]; +} + +- (void)renderShouldCheckDetectingStatus:(FUDetectingParts)parts { + if (self.viewModel.selectedIndex == 0) { + return; + } + [super renderShouldCheckDetectingStatus:parts]; +} + +- (void)dismissTipLabel { + self.tipLabel.hidden = YES; +} + + +#pragma mark - Private methods + +- (void)selectMedia:(NSDictionary *)info { + NSString *mediaType = info[UIImagePickerControllerMediaType]; + if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + // 图片处理 + image = [image fu_processedImage]; + if ([self.viewModel saveCustomImage:image]) { + [self.viewModel reloadSegmentationData]; + if (self.viewModel.customized) { + [self.viewModel selectSegmentationAtIndex:2 completionHandler:nil]; + } + [self refreshSubviews]; + } + } else { + // 获取视频地址 + [FUUtility requestVideoURLFromInfo:info resultHandler:^(NSURL * _Nonnull videoURL) { + if ([self.viewModel saveCustomVideo:videoURL]) { + [self.viewModel reloadSegmentationData]; + if (self.viewModel.customized) { + [self.viewModel selectSegmentationAtIndex:2 completionHandler:nil]; + } + [self refreshSubviews]; + } + }]; + } +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.segmentationItems.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUSegmentationCellIdentifier forIndexPath:indexPath]; + FUSegmentationModel *model = self.viewModel.segmentationItems[indexPath.item]; + if (model.isCustom && model.image) { + // 自定义 + cell.imageView.image = model.image; + } else { + cell.imageView.image = [UIImage imageNamed:model.name]; + } + return cell; +} + +#pragma mark - Collection view delegate + +- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.item == 1) { + // Add + FUMediaPickerViewController *picker = [[FUMediaPickerViewController alloc] initWithViewModel:[[FUMediaPickerViewModel alloc] initWithModule:self.viewModel.module] selectedMediaHandler:^(NSDictionary * _Nonnull info) { + [self selectMedia:info]; + }]; + [self.navigationController pushViewController:picker animated:YES]; + return NO; + } + return YES; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + collectionView.userInteractionEnabled = NO; + FUItemCell *cell = (FUItemCell *)[collectionView cellForItemAtIndexPath:indexPath]; + [cell.indicatorView startAnimating]; + [self.viewModel selectSegmentationAtIndex:indexPath.item completionHandler:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + [cell.indicatorView stopAnimating]; + collectionView.userInteractionEnabled = YES; + }); + }]; + // 道具提示处理 + if (self.viewModel.segmentationTips[self.viewModel.segmentationItems[indexPath.item].name]) { + NSString *hint = self.viewModel.segmentationTips[self.viewModel.segmentationItems[indexPath.item].name]; + dispatch_async(dispatch_get_main_queue(), ^{ + self.tipLabel.hidden = NO; + self.tipLabel.text = FULocalizedString(hint); + [FUSegmentationViewController cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissTipLabel) object:nil]; + [self performSelector:@selector(dismissTipLabel) withObject:nil afterDelay:1]; + }); + } +} + +#pragma mark - Getters + +- (UICollectionView *)itemsView { + if (!_itemsView) { + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + flowLayout.itemSize = CGSizeMake(60, 60); + flowLayout.sectionInset = UIEdgeInsetsMake(12, 16, 12, 16); + _itemsView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; + _itemsView.backgroundColor = [UIColor clearColor]; + _itemsView.showsHorizontalScrollIndicator = NO; + _itemsView.translatesAutoresizingMaskIntoConstraints = NO; + _itemsView.dataSource = self; + _itemsView.delegate = self; + [_itemsView registerClass:[FUItemCell class] forCellWithReuseIdentifier:kFUSegmentationCellIdentifier]; + } + return _itemsView; +} + +- (UIView *)versionSelectionView { + if (!_versionSelectionView) { + _versionSelectionView = [[UIView alloc] initWithFrame:self.view.bounds]; + _versionSelectionView.backgroundColor = FUColorFromHexWithAlpha(0x000000, 0.5); + UIButton *genericButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [genericButton setTitle:FULocalizedString(@"通用分割版") forState:UIControlStateNormal]; + genericButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium]; + [genericButton setTitleColor:FUColorFromHex(0x2C2E30) forState:UIControlStateNormal]; + [genericButton setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:UIControlStateNormal]; + genericButton.layer.masksToBounds = YES; + genericButton.layer.cornerRadius = 24.f; + [genericButton addTarget:self action:@selector(genericAction:) forControlEvents:UIControlEventTouchUpInside]; + [_versionSelectionView addSubview:genericButton]; + [genericButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(_versionSelectionView); + make.centerY.equalTo(_versionSelectionView.mas_centerY).mas_offset(-42); + make.size.mas_offset(CGSizeMake(235, 48)); + }]; + + UIButton *videoConferenceButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [videoConferenceButton setTitle:FULocalizedString(@"视频会议版") forState:UIControlStateNormal]; + videoConferenceButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium]; + [videoConferenceButton setTitleColor:FUColorFromHex(0x2C2E30) forState:UIControlStateNormal]; + [videoConferenceButton setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:UIControlStateNormal]; + videoConferenceButton.layer.masksToBounds = YES; + videoConferenceButton.layer.cornerRadius = 24.f; + [videoConferenceButton addTarget:self action:@selector(videoConferenceAction:) forControlEvents:UIControlEventTouchUpInside]; + [_versionSelectionView addSubview:videoConferenceButton]; + [videoConferenceButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(_versionSelectionView); + make.centerY.equalTo(_versionSelectionView.mas_centerY).mas_offset(42); + make.size.mas_offset(CGSizeMake(235, 48)); + }]; + } + return _versionSelectionView; +} + +@end diff --git a/FULiveDemo/Modules/Segmentation/ViewModel/FUSegmentationViewModel.h b/FULiveDemo/Modules/Segmentation/ViewModel/FUSegmentationViewModel.h new file mode 100644 index 00000000..6496b48d --- /dev/null +++ b/FULiveDemo/Modules/Segmentation/ViewModel/FUSegmentationViewModel.h @@ -0,0 +1,33 @@ +// +// FUSegmentationViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FURenderViewModel.h" +#import "FUSegmentationModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUSegmentationViewModel : FURenderViewModel + +@property (nonatomic, strong, readonly) NSMutableArray *segmentationItems; + +@property (nonatomic, copy, readonly) NSDictionary *segmentationTips; + +@property (nonatomic, assign, readonly) NSInteger selectedIndex; +/// 是否存在自定义分割 +@property (nonatomic, assign, readonly) BOOL customized; + +- (void)selectSegmentationAtIndex:(NSInteger)index completionHandler:(nullable void (^)(void))completion; + +- (BOOL)saveCustomImage:(UIImage *)image; + +- (BOOL)saveCustomVideo:(NSURL *)videoURL; + +- (void)reloadSegmentationData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Segmentation/ViewModel/FUSegmentationViewModel.m b/FULiveDemo/Modules/Segmentation/ViewModel/FUSegmentationViewModel.m new file mode 100644 index 00000000..6bbc67cf --- /dev/null +++ b/FULiveDemo/Modules/Segmentation/ViewModel/FUSegmentationViewModel.m @@ -0,0 +1,198 @@ +// +// FUSegmentationViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/16. +// + +#import "FUSegmentationViewModel.h" + +static NSString * const kFUCustomSegmentationImage = @"custom_segmentation.png"; +static NSString * const kFUCustomSegmentationVideoURL = @"FUCustomSegmentationVideoURL"; + +@interface FUSegmentationViewModel () + +@property (nonatomic, strong) NSMutableArray *segmentationItems; + +@property (nonatomic, copy) NSDictionary *segmentationTips; + +@property (nonatomic, assign) BOOL customized; + +@property (nonatomic, assign) NSInteger selectedIndex; + +@property (nonatomic, strong) dispatch_queue_t segmentationLoadingQueue; + +@end + +@implementation FUSegmentationViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + self.segmentationLoadingQueue = dispatch_queue_create("com.faceunity.FULiveDemo.SegmentationLoadingQueue", DISPATCH_QUEUE_SERIAL); + [self reloadSegmentationData]; + } + return self; +} + +#pragma mark - Instance methods + +- (void)selectSegmentationAtIndex:(NSInteger)index completionHandler:(void (^)(void))completion { + if (index < 0 || index >= self.segmentationItems.count) { + return; + } + _selectedIndex = index; + if (index == 0) { + dispatch_async(self.segmentationLoadingQueue, ^{ + if ([FURenderKit shareRenderKit].segmentation) { + [[FURenderKit shareRenderKit].segmentation stopVideoDecode]; + [FURenderKit shareRenderKit].segmentation = nil; + } + !completion ?: completion(); + }); + } else { + FUSegmentationModel *model = self.segmentationItems[index]; + dispatch_async(self.segmentationLoadingQueue, ^{ + if (model.isCustom) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"bg_segment" ofType:@"bundle"]; + FUAISegment *segmentation = [[FUAISegment alloc] initWithPath:path name:@"segment"]; + [FURenderKit shareRenderKit].segmentation = segmentation; + if (model.type == FUSegmentationTypeImage) { + segmentation.backgroundImage = model.image; + } else { + segmentation.videoPath = model.videoURL; + } + !completion ?: completion(); + } else { + NSString *path = [[NSBundle mainBundle] pathForResource:model.name ofType:@"bundle"]; + FUAISegment *segmentation = [[FUAISegment alloc] initWithPath:path name:@"segment"]; + if ([model.name isEqualToString:@"human_outline_740"]) { + // 特殊分割道具 + segmentation.lineGap = 2.8; + segmentation.lineSize = 2.8; + segmentation.lineColor = FUColorMake(255/255.0, 180/255.0, 0.0, 0.0); + } + [FURenderKit shareRenderKit].segmentation = segmentation; + !completion ?: completion(); + } + }); + } +} + +- (void)reloadSegmentationData { + NSString *path = [[NSBundle mainBundle] pathForResource:@"segmentation" ofType:@"json"]; + NSData *data = [NSData dataWithContentsOfFile:path]; + NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + self.segmentationItems = [[FUSegmentationModel mj_objectArrayWithKeyValuesArray:jsonArray] mutableCopy]; + if ([[NSUserDefaults standardUserDefaults] objectForKey:kFUCustomSegmentationVideoURL]) { + // 存在自定义视频 + FUSegmentationModel *model = [[FUSegmentationModel alloc] init]; + model.type = FUSegmentationTypeVideo; + model.isCustom = YES; + model.videoURL = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:kFUCustomSegmentationVideoURL]]; + model.image = [FUImageHelper getPreviewImageWithVideoURL:model.videoURL]; + if (model.videoURL && model.image) { + [self.segmentationItems insertObject:model atIndex:2]; + self.customized = YES; + } + } else if ([[NSFileManager defaultManager] fileExistsAtPath:[FUDocumentPath stringByAppendingPathComponent:kFUCustomSegmentationImage]]) { + // 存在自定义图片 + FUSegmentationModel *model = [[FUSegmentationModel alloc] init]; + model.type = FUSegmentationTypeImage; + model.isCustom = YES; + model.image = [UIImage imageWithContentsOfFile:[FUDocumentPath stringByAppendingPathComponent:kFUCustomSegmentationImage]]; + if (model.image) { + [self.segmentationItems insertObject:model atIndex:2]; + self.customized = YES; + } + } +} + +- (BOOL)saveCustomImage:(UIImage *)image { + if (!image) { + return NO; + } + if ([[NSUserDefaults standardUserDefaults] objectForKey:kFUCustomSegmentationVideoURL]) { + // 先删除自定义视频 + [[NSUserDefaults standardUserDefaults] removeObjectForKey:kFUCustomSegmentationVideoURL]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + NSData *data = UIImagePNGRepresentation(image); + NSString *savedImagePath = [FUDocumentPath stringByAppendingPathComponent:kFUCustomSegmentationImage]; + return [data writeToFile:savedImagePath atomically:YES]; +} + +- (BOOL)saveCustomVideo:(NSURL *)videoURL { + if (!videoURL) { + return NO; + } + if ([[NSFileManager defaultManager] fileExistsAtPath:[FUDocumentPath stringByAppendingPathComponent:kFUCustomSegmentationImage]]) { + // 先删除自定义图片 + [[NSFileManager defaultManager] removeItemAtPath:[FUDocumentPath stringByAppendingPathComponent:kFUCustomSegmentationImage] error:nil]; + } + // 保存视频链接 + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:videoURL]; + [[NSUserDefaults standardUserDefaults] setObject:data forKey:kFUCustomSegmentationVideoURL]; + [[NSUserDefaults standardUserDefaults] synchronize]; + return YES; +} + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + if (selectedIndex < 0 || selectedIndex >= self.segmentationItems.count) { + return; + } + _selectedIndex = selectedIndex; + if (selectedIndex == 0) { + [[FURenderKit shareRenderKit].segmentation stopVideoDecode]; + [FURenderKit shareRenderKit].segmentation = nil; + } else { + FUSegmentationModel *model = self.segmentationItems[selectedIndex]; + if (model.isCustom) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"bg_segment" ofType:@"bundle"]; + FUAISegment *segmentation = [[FUAISegment alloc] initWithPath:path name:@"segment"]; + [FURenderKit shareRenderKit].segmentation = segmentation; + if (model.type == FUSegmentationTypeImage) { + segmentation.backgroundImage = model.image; + } else { + segmentation.videoPath = model.videoURL; + } + } else { + NSString *path = [[NSBundle mainBundle] pathForResource:model.name ofType:@"bundle"]; + FUAISegment *segmentation = [[FUAISegment alloc] initWithPath:path name:@"segment"]; + [FURenderKit shareRenderKit].segmentation = segmentation; + if ([model.name isEqualToString:@"human_outline_740"]) { + // 特殊分割道具 + segmentation.lineGap = 2.8; + segmentation.lineSize = 2.8; + segmentation.lineColor = FUColorMake(255/255.0, 180/255.0, 0.0, 0.0); + } + } + } +} + +#pragma mark - Getters + +- (NSDictionary *)segmentationTips { + if (!_segmentationTips) { + _segmentationTips = @{ + @"hez_ztt_fu" : @"张嘴试试" + }; + } + return _segmentationTips; +} + +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleSegmentation; +} + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace | FUAIModelTypeHuman; +} + +- (FUDetectingParts)detectingParts { + return FUDetectingPartsHuman; +} + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerImageRenderViewController.h b/FULiveDemo/Modules/Sticker/ViewController/FUStickerImageRenderViewController.h new file mode 100644 index 00000000..9001a493 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewController/FUStickerImageRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUStickerImageRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import "FUImageRenderViewController.h" +#import "FUStickerImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUStickerImageRenderViewController : FUImageRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerImageRenderViewController.m b/FULiveDemo/Modules/Sticker/ViewController/FUStickerImageRenderViewController.m new file mode 100644 index 00000000..7735b0c7 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewController/FUStickerImageRenderViewController.m @@ -0,0 +1,37 @@ +// +// FUStickerImageRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import "FUStickerImageRenderViewController.h" +#import "FUStickerComponentManager.h" + +@interface FUStickerImageRenderViewController () + +@end + +@implementation FUStickerImageRenderViewController + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self updateBottomConstraintsOfDownloadButton:FUHeightIncludeBottomSafeArea(84) + 10 hidden:NO animated:NO]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [[FUStickerComponentManager sharedManager] addComponentViewToView:self.view]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + + [[FUStickerComponentManager sharedManager] removeComponentView]; +} + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerRenderMediaViewController.h b/FULiveDemo/Modules/Sticker/ViewController/FUStickerRenderMediaViewController.h deleted file mode 100644 index e743ed3a..00000000 --- a/FULiveDemo/Modules/Sticker/ViewController/FUStickerRenderMediaViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FUStickerRenderMediaViewController.h -// FULiveDemo -// -// Created by 项林平 on 2022/7/18. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FURenderMediaViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUStickerRenderMediaViewController : FURenderMediaViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerRenderMediaViewController.m b/FULiveDemo/Modules/Sticker/ViewController/FUStickerRenderMediaViewController.m deleted file mode 100644 index b394b605..00000000 --- a/FULiveDemo/Modules/Sticker/ViewController/FUStickerRenderMediaViewController.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// FUStickerRenderMediaViewController.m -// FULiveDemo -// -// Created by 项林平 on 2022/7/18. -// Copyright © 2022 FaceUnity. All rights reserved. -// - -#import "FUStickerRenderMediaViewController.h" -#import "FUStickerViewModel.h" -#import - - -@interface FUStickerRenderMediaViewController () - -@property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUStickerViewModel *viewModel; - -@end - -@implementation FUStickerRenderMediaViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - - [self.view addSubview:self.itemsView]; - [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.leading.trailing.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(118); - }else{ - make.height.mas_equalTo(84); - } - }]; - - self.itemsView.items = self.viewModel.stickerItems; - self.itemsView.selectedIndex = 1; - - [self itemsView:self.itemsView didSelectItemAtIndex:1]; - - [self refreshDownloadButtonTransformWithHeight:38 show:YES]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - [self.viewModel releaseItem]; -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - [self.itemsView startAnimation]; - [self.viewModel loadItem:self.viewModel.stickerItems[index] completion:^{ - [self.itemsView stopAnimation]; - }]; -} - -#pragma mark - FURenderMediaProtocol - -- (BOOL)isNeedTrack { - return YES; -} - -- (FUTrackType)trackType { - return FUTrackTypeFace; -} - -#pragma mark - Getters - -- (FUItemsView *)itemsView { - if (!_itemsView) { - _itemsView = [[FUItemsView alloc] init]; - _itemsView.delegate = self; - } - return _itemsView; -} - -- (FUStickerViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUStickerViewModel alloc] init]; - } - return _viewModel; -} - -@end diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerVideoRenderViewController.h b/FULiveDemo/Modules/Sticker/ViewController/FUStickerVideoRenderViewController.h new file mode 100644 index 00000000..c069040a --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewController/FUStickerVideoRenderViewController.h @@ -0,0 +1,17 @@ +// +// FUStickerVideoRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/19. +// + +#import "FUVideoRenderViewController.h" +#import "FUStickerVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUStickerVideoRenderViewController : FUVideoRenderViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerVideoRenderViewController.m b/FULiveDemo/Modules/Sticker/ViewController/FUStickerVideoRenderViewController.m new file mode 100644 index 00000000..f5b9439b --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewController/FUStickerVideoRenderViewController.m @@ -0,0 +1,37 @@ +// +// FUStickerVideoRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/19. +// + +#import "FUStickerVideoRenderViewController.h" +#import "FUStickerComponentManager.h" + +@interface FUStickerVideoRenderViewController () + +@end + +@implementation FUStickerVideoRenderViewController + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self updateBottomConstraintsOfDownloadButton:FUHeightIncludeBottomSafeArea(84) + 10 hidden:NO animated:NO]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [[FUStickerComponentManager sharedManager] addComponentViewToView:self.view]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + + [[FUStickerComponentManager sharedManager] removeComponentView]; +} + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.h b/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.h index 9e47c6e9..65e01471 100644 --- a/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.h +++ b/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.h @@ -2,15 +2,15 @@ // FUStickerViewController.h // FULiveDemo // -// Created by 项林平 on 2022/7/15. -// Copyright © 2022 FaceUnity. All rights reserved. +// Created by 项林平 on 2022/7/26. // -#import "FUBaseViewController.h" +#import "FURenderViewController.h" +#import "FUStickerViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUStickerViewController : FUBaseViewController +@interface FUStickerViewController : FURenderViewController @end diff --git a/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.m b/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.m index 35f8f370..a6d4b544 100644 --- a/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.m +++ b/FULiveDemo/Modules/Sticker/ViewController/FUStickerViewController.m @@ -2,19 +2,13 @@ // FUStickerViewController.m // FULiveDemo // -// Created by 项林平 on 2022/7/15. -// Copyright © 2022 FaceUnity. All rights reserved. +// Created by 项林平 on 2022/7/26. // #import "FUStickerViewController.h" -#import "FUSelectedImageController.h" -#import "FUStickerViewModel.h" -#import +#import "FUStickerComponentManager.h" -@interface FUStickerViewController () - -@property (nonatomic, strong) FUItemsView *itemsView; -@property (nonatomic, strong) FUStickerViewModel *viewModel; +@interface FUStickerViewController () @end @@ -25,80 +19,23 @@ @implementation FUStickerViewController - (void)viewDidLoad { [super viewDidLoad]; - [self.view addSubview:self.itemsView]; - [self.itemsView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.equalTo(self.view.mas_bottom); - make.left.right.equalTo(self.view); - if (iPhoneXStyle) { - make.height.mas_equalTo(84 + 34); - }else{ - make.height.mas_equalTo(84); - } - }]; - - self.itemsView.items = self.viewModel.stickerItems; - self.itemsView.selectedIndex = 1; - - self.photoBtn.transform = CGAffineTransformMakeTranslation(0, -36) ; - - self.headButtonView.selectedImageBtn.hidden = NO; - [self.headButtonView.selectedImageBtn setImage:[UIImage imageNamed:@"相册icon"] forState:UIControlStateNormal]; + [self updateBottomConstraintsOfCaptureButton:FUHeightIncludeBottomSafeArea(84) + 10 animated:NO]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - if (self.itemsView.selectedIndex > 0) { - [self.viewModel loadItem:self.itemsView.items[self.itemsView.selectedIndex] completion:nil]; - } + + [[FUStickerComponentManager sharedManager] addComponentViewToView:self.view]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; - [self.viewModel releaseItem]; -} - -#pragma mark - FUItemsViewDelegate - -- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { - [self.itemsView startAnimation]; - if (index == 0) { - [self.viewModel releaseItem]; - [self.itemsView stopAnimation]; - } else { - [self.viewModel loadItem:itemsView.items[index] completion:^{ - [self.itemsView stopAnimation]; - }]; - } -} - -#pragma mark - Getters - -- (FUItemsView *)itemsView { - if (!_itemsView) { - _itemsView = [[FUItemsView alloc] init]; - _itemsView.delegate = self; - } - return _itemsView; -} - -- (FUStickerViewModel *)viewModel { - if (!_viewModel) { - _viewModel = [[FUStickerViewModel alloc] init]; - } - return _viewModel; -} - -#pragma mark - Overriding - -- (BOOL)needsPresetSelections { - return NO; + + [[FUStickerComponentManager sharedManager] removeComponentView]; } -- (void)didClickSelPhoto { - FUSelectedImageController *vc = [[FUSelectedImageController alloc] init]; - vc.type = FUModuleTypeSticker; - [self.navigationController pushViewController:vc animated:YES]; +- (void)dealloc { + [FUStickerComponentManager destory]; } - @end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentManager.h b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentManager.h new file mode 100644 index 00000000..fe1260e2 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentManager.h @@ -0,0 +1,28 @@ +// +// FUStickerComponentManager.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUStickerComponentManager : NSObject + ++ (instancetype)sharedManager; + +/// 销毁 ++ (void)destory; + +/// 在目标视图中添加贴纸组件视图(固定位置为目标视图底部) +/// @param view 目标视图 +- (void)addComponentViewToView:(UIView *)view; + +/// 在父视图中移除美妆组件视图 +- (void)removeComponentView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentManager.m b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentManager.m new file mode 100644 index 00000000..50069e10 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentManager.m @@ -0,0 +1,80 @@ +// +// FUStickerComponentManager.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUStickerComponentManager.h" +#import "FUStickerComponentViewModel.h" + +static FUStickerComponentManager *stickerComponentManager = nil; +static dispatch_once_t onceToken; + +@interface FUStickerComponentManager () + +@property (nonatomic, weak) UIView *targetView; +@property (nonatomic, strong) FUItemsView *stickersView; +@property (nonatomic, strong) FUStickerComponentViewModel *viewModel; + +@end + +#pragma mark - Class methods + +@implementation FUStickerComponentManager + ++ (instancetype)sharedManager { + dispatch_once(&onceToken, ^{ + stickerComponentManager = [[FUStickerComponentManager alloc] init]; + }); + return stickerComponentManager; +} + ++ (void)destory { + onceToken = 0; + stickerComponentManager = nil; +} + +#pragma mark - Instance methods + +- (void)addComponentViewToView:(UIView *)view { + NSAssert(view != nil, @"FUMakeupComponent: view can not be nil!"); + self.targetView = view; + [self.targetView addSubview:self.stickersView]; +} + +- (void)removeComponentView { + if (self.stickersView.superview) { + [self.stickersView removeFromSuperview]; + } +} + +#pragma mark - FUItemsViewDelegate + +- (void)itemsView:(FUItemsView *)itemsView didSelectItemAtIndex:(NSInteger)index { + [itemsView startAnimation]; + [self.viewModel loadStickerAtIndex:index completion:^{ + [itemsView stopAnimation]; + }]; +} + +#pragma mark - Getters + +- (FUItemsView *)stickersView { + if (!_stickersView) { + _stickersView = [[FUItemsView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.targetView.bounds) - FUHeightIncludeBottomSafeArea(84), CGRectGetWidth(self.targetView.bounds), FUHeightIncludeBottomSafeArea(84))]; + _stickersView.items = self.viewModel.stickerItems; + _stickersView.selectedIndex = self.viewModel.selectedIndex; + _stickersView.delegate = self; + } + return _stickersView; +} + +- (FUStickerComponentViewModel *)viewModel { + if (!_viewModel) { + _viewModel = [[FUStickerComponentViewModel alloc] init]; + } + return _viewModel; +} + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentViewModel.h b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentViewModel.h new file mode 100644 index 00000000..2207f41d --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentViewModel.h @@ -0,0 +1,25 @@ +// +// FUStickerComponentViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FUStickerComponentViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *stickerItems; + +@property (nonatomic, assign, readonly) NSUInteger selectedIndex; + +/// 加载贴纸 +/// @param index 贴纸索引,0表示卸载贴纸 +/// @param completion 加载完成回调 +- (void)loadStickerAtIndex:(NSUInteger)index completion:(void (^)(void))completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentViewModel.m b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentViewModel.m new file mode 100644 index 00000000..42f767a6 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerComponentViewModel.m @@ -0,0 +1,68 @@ +// +// FUStickerComponentViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/20. +// + +#import "FUStickerComponentViewModel.h" + +#import + +@interface FUStickerComponentViewModel () + +@property (nonatomic, copy) NSArray *stickerItems; + +@property (nonatomic, assign) NSUInteger selectedIndex; + +@property (nonatomic, strong) FUSticker *currentSticker; + +@end + +@implementation FUStickerComponentViewModel + +- (instancetype)init { + self = [super init]; + if (self) { + _selectedIndex = 1; + } + return self; +} + +- (void)loadStickerAtIndex:(NSUInteger)index completion:(void (^)(void))completion { + if (index < 0 || index >= self.stickerItems.count) { + return; + } + _selectedIndex = index; + if (index == 0) { + // 取消 + [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; + self.currentSticker = nil; + !completion ?: completion(); + } else { + NSString *path = [[NSBundle mainBundle] pathForResource:self.stickerItems[index] ofType:@"bundle"]; + FUSticker *sticker = [FUSticker itemWithPath:path name:@"FUSticker"]; + if (self.currentSticker) { + [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentSticker withSticker:sticker completion:^{ + self.currentSticker = sticker; + !completion ?: completion(); + }]; + } else { + [[FURenderKit shareRenderKit].stickerContainer addSticker:sticker completion:^{ + self.currentSticker = sticker; + !completion ?: completion(); + }]; + } + } +} + +#pragma mark - Getters + +- (NSArray *)stickerItems { + if (!_stickerItems) { + _stickerItems = @[@"reset_item", @"CatSparks", @"fu_zh_fenshu", @"sdlr", @"xlong_zh_fu", @"newy1", @"redribbt", @"DaisyPig", @"sdlu"]; + } + return _stickerItems; +} + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerImageRenderViewModel.h b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerImageRenderViewModel.h new file mode 100644 index 00000000..0be50797 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerImageRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUStickerImageRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import "FUImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUStickerImageRenderViewModel : FUImageRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerImageRenderViewModel.m b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerImageRenderViewModel.m new file mode 100644 index 00000000..c6072ba9 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerImageRenderViewModel.m @@ -0,0 +1,12 @@ +// +// FUStickerImageRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import "FUStickerImageRenderViewModel.h" + +@implementation FUStickerImageRenderViewModel + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerManager.h b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerManager.h deleted file mode 100644 index 4a7edd69..00000000 --- a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerManager.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// FUStickerManager.h -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUMetaManager.h" -#import "FUStickerProtocol.h" -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUStickerManager : FUMetaManager - -//手势道具专用(手势道具目前未独立,所以和道具贴纸共用一个模块,通过FUStickerType区分) -@property (nonatomic, strong) FUGesture * _Nullable gestureItem; - -- (void)loadItemWithCompletion:(void(^)(void))completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerManager.m b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerManager.m deleted file mode 100644 index f211df60..00000000 --- a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerManager.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// FUStickerManager.m -// FULiveDemo -// -// Created by Chen on 2021/2/25. -// Copyright © 2021 FaceUnity. All rights reserved. -// - -#import "FUStickerManager.h" -#import -#import "FULocalDataManager.h" -#import - - -@interface FUStickerManager () -@property (nonatomic, strong) NSDictionary *stickTipDic; -// @property (nonatomic, strong) NSArray *deviceOrientationItems; -//通用的道具贴纸 -@property (nonatomic, strong) FUSticker *curSticker; -@end - -@implementation FUStickerManager - -@synthesize selectedItem; - -- (instancetype)init { - self = [super init]; - if (self) { - self.stickTipDic = [FULocalDataManager stickerTipsJsonData]; - } - return self; -} - -/** - 加载普通道具 - - 先创建再释放可以有效缓解切换道具卡顿问题 - */ -- (void)loadItem:(NSString *)itemName - completion:(void (^ __nullable)(BOOL finished))completion { - self.selectedItem = itemName; - NSLog(@"道具名称=====%@",itemName); - if (itemName != nil && ![itemName isEqual: @"resetItem"]) { - [self loadItemWithCompletion:^{ - if (completion) { - completion(YES); - } - }]; - } else { - [self releaseItem]; - if(completion) { - completion(NO); - } - } -} - - -- (void)loadItemWithCompletion:(void(^)(void))completion { -} - -- (NSString *)getStickTipsWithItemName:(NSString *)itemName { - if ([self.stickTipDic.allKeys containsObject:itemName]) { - return self.stickTipDic[itemName]; - } - return nil; -} - -//释放item,内部会自动清除相关资源文件 -- (void)releaseItem { - [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; -} -@end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerVideoRenderViewModel.h b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerVideoRenderViewModel.h new file mode 100644 index 00000000..9aa78acf --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerVideoRenderViewModel.h @@ -0,0 +1,16 @@ +// +// FUStickerVideoRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/9/19. +// + +#import "FUVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUStickerVideoRenderViewModel : FUVideoRenderViewModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerVideoRenderViewModel.m b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerVideoRenderViewModel.m new file mode 100644 index 00000000..445429c5 --- /dev/null +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerVideoRenderViewModel.m @@ -0,0 +1,12 @@ +// +// FUStickerVideoRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/9/19. +// + +#import "FUStickerVideoRenderViewModel.h" + +@implementation FUStickerVideoRenderViewModel + +@end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.h b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.h index 187c5ae3..e62ef796 100644 --- a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.h +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.h @@ -2,21 +2,14 @@ // FUStickerViewModel.h // FULiveDemo // -// Created by 项林平 on 2022/7/15. -// Copyright © 2022 FaceUnity. All rights reserved. +// Created by 项林平 on 2022/7/26. // -#import "FUMetaManager.h" +#import "FURenderViewModel.h" NS_ASSUME_NONNULL_BEGIN -@interface FUStickerViewModel : NSObject - -@property (nonatomic, copy) NSArray *stickerItems; - -- (void)loadItem:(NSString *)item completion:(nullable void(^)(void))completion; - -- (void)releaseItem; +@interface FUStickerViewModel : FURenderViewModel @end diff --git a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.m b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.m index 93adc644..c5df66b4 100644 --- a/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.m +++ b/FULiveDemo/Modules/Sticker/ViewModel/FUStickerViewModel.m @@ -2,45 +2,25 @@ // FUStickerViewModel.m // FULiveDemo // -// Created by 项林平 on 2022/7/15. -// Copyright © 2022 FaceUnity. All rights reserved. +// Created by 项林平 on 2022/7/26. // #import "FUStickerViewModel.h" -#import "FULocalDataManager.h" - -@interface FUStickerViewModel () - -@property (nonatomic, strong) FUSticker *currentSticker; - -@end @implementation FUStickerViewModel -- (void)loadItem:(NSString *)item completion:(void (^)(void))completion { - if (!item) { - !completion ?: completion(); - } - NSString *path = [[NSBundle mainBundle] pathForResource:item ofType:@"bundle"]; - FUSticker *sticker = [FUSticker itemWithPath:path name:@"FUSticker"]; - if (!self.currentSticker) { - [[FURenderKit shareRenderKit].stickerContainer addSticker:sticker completion:completion]; - } else { - [[FURenderKit shareRenderKit].stickerContainer replaceSticker:self.currentSticker withSticker:sticker completion:completion]; - } - self.currentSticker = sticker; +#pragma mark - Overriding + +- (FUModule)module { + return FUModuleSticker; } -- (void)releaseItem { - [[FURenderKit shareRenderKit].stickerContainer removeAllSticks]; - self.currentSticker = nil; +- (BOOL)supportMediaRendering { + return YES; } -- (NSArray *)stickerItems { - if (!_stickerItems) { - _stickerItems = @[@"resetItem", @"CatSparks", @"fu_zh_fenshu", @"sdlr", @"xlong_zh_fu", @"newy1", @"redribbt", @"DaisyPig", @"sdlu"]; - } - return _stickerItems; +- (BOOL)supportPresetSelection { + return NO; } @end diff --git a/FULiveDemo/PrefixHeader.pch b/FULiveDemo/PrefixHeader.pch deleted file mode 100644 index 5038a96b..00000000 --- a/FULiveDemo/PrefixHeader.pch +++ /dev/null @@ -1,22 +0,0 @@ -// -// PrefixHeader.pch -// FULiveDemo -// -// Created by 孙慕 on 2020/9/15. -// Copyright © 2020 FaceUnity. All rights reserved. -// - -#ifndef PrefixHeader_pch -#define PrefixHeader_pch - -#import -#import -#import -#import - -#import "FULiveDefine.h" -#import "FUManager.h" -#import "FULandmarkManager.h" -#import "UIColor+FU.h" - -#endif /* PrefixHeader_pch */ diff --git a/FULiveDemo/Render/View/FUCaptureButton.h b/FULiveDemo/Render/View/FUCaptureButton.h new file mode 100644 index 00000000..2e8a4e6a --- /dev/null +++ b/FULiveDemo/Render/View/FUCaptureButton.h @@ -0,0 +1,29 @@ +// +// FUCaptureButton.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUCaptureButtonDelegate + +- (void)captureButtonDidTakePhoto; +- (void)captureButtonDidStartRecording; +- (void)captureButtonDidFinishRecording; + +@end + +@interface FUCaptureButton : UIView + +/// 是否可以录制视频,默认为YES +@property (nonatomic, assign) BOOL recordVideo; + +@property (nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/View/FUCaptureButton.m b/FULiveDemo/Render/View/FUCaptureButton.m new file mode 100644 index 00000000..901ed52d --- /dev/null +++ b/FULiveDemo/Render/View/FUCaptureButton.m @@ -0,0 +1,136 @@ +// +// FUCaptureButton.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/10. +// + +#import "FUCaptureButton.h" +#import "FUCircleProgressView.h" + +#import "UIButton+FU.h" + +@interface FUCaptureButton () + +@property (nonatomic, strong) UIButton *button; +@property (nonatomic, strong) FUCircleProgressView *circleProgress; +@property (nonatomic, strong) UILongPressGestureRecognizer *longPress; + +@property (nonatomic, strong) NSTimer *timer; + +@end + +@implementation FUCaptureButton { + NSInteger timeCount; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.button]; + [self addSubview:self.circleProgress]; + + // 点击拍照 + __weak typeof(self) weakSelf = self; + [self.button addCommonActionWithDelay:0.1 actionHandler:^{ + __strong typeof(weakSelf) strongSelf = weakSelf; + if (strongSelf.delegate && [strongSelf.delegate respondsToSelector:@selector(captureButtonDidTakePhoto)]) { + [strongSelf.delegate captureButtonDidTakePhoto]; + } + }]; + + // 长按录制视频 + self.longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)]; + self.longPress.minimumPressDuration = 0.3; + [self addGestureRecognizer:self.longPress]; + + _recordVideo = YES; + } + return self; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + self.circleProgress.frame = CGRectMake(1, 1, CGRectGetWidth(self.frame) - 2, CGRectGetHeight(self.frame) - 2); +} + +#pragma mark - Private methods + +- (void)startRecording { + [UIView animateWithDuration:0.5 animations:^{ + self.transform = CGAffineTransformMakeScale(1.1, 1.1); + }]; + if (self.delegate && [self.delegate respondsToSelector:@selector(captureButtonDidStartRecording)]) { + [self.delegate captureButtonDidStartRecording]; + } +} + +- (void)stopRecording { + self.transform = CGAffineTransformIdentity; + if (self.delegate && [self.delegate respondsToSelector:@selector(captureButtonDidFinishRecording)]) { + [self.delegate captureButtonDidFinishRecording]; + } +} + +- (void)invalidateTimer { + [self.timer invalidate]; + self.timer = nil; + timeCount = 0; + self.circleProgress.percent = 0; +} + +#pragma mark - Event response + +- (void)longPressAction:(UILongPressGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateBegan) { + self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTimeAction) userInfo:nil repeats:YES]; + [self.timer fire]; + [self startRecording]; + } else if (sender.state == UIGestureRecognizerStateEnded) { + [self stopRecording]; + [self invalidateTimer]; + } +} + +- (void)updateTimeAction { + timeCount += 1; + self.circleProgress.percent += 0.01; + if (timeCount > 100) { + // 自动结束录制 + [self stopRecording]; + [self invalidateTimer]; + } +} + +#pragma mark - Setters + +- (void)setRecordVideo:(BOOL)recordVideo { + _recordVideo = recordVideo; + self.longPress.enabled = recordVideo; +} + +#pragma mark - Getters + +- (UIButton *)button { + if (!_button) { + _button = [UIButton buttonWithType:UIButtonTypeCustom]; + _button.frame = self.bounds; + [_button setImage:[UIImage imageNamed:@"render_camera_capture"] forState:UIControlStateNormal]; + _button.adjustsImageWhenHighlighted = NO; + _button.adjustsImageWhenDisabled = NO; + } + return _button; +} + +- (FUCircleProgressView *)circleProgress { + if (!_circleProgress) { + _circleProgress = [[FUCircleProgressView alloc] initWithFrame:CGRectMake(1, 1, CGRectGetWidth(self.frame) - 2, CGRectGetHeight(self.frame) - 2)]; + _circleProgress.progressColor = [UIColor colorWithRed:92 / 255.0 green:181 / 255.0 blue:249 / 255.0 alpha:1]; + _circleProgress.backgroundColor = [UIColor clearColor]; + _circleProgress.progressBackgroundColor = [UIColor clearColor]; + _circleProgress.userInteractionEnabled = NO; + } + return _circleProgress; +} + +@end diff --git a/FULiveDemo/Helpers/UI/FUCircleProgressView.h b/FULiveDemo/Render/View/FUCircleProgressView.h similarity index 100% rename from FULiveDemo/Helpers/UI/FUCircleProgressView.h rename to FULiveDemo/Render/View/FUCircleProgressView.h diff --git a/FULiveDemo/Helpers/UI/FUCircleProgressView.m b/FULiveDemo/Render/View/FUCircleProgressView.m similarity index 98% rename from FULiveDemo/Helpers/UI/FUCircleProgressView.m rename to FULiveDemo/Render/View/FUCircleProgressView.m index 648c20cb..6b872188 100755 --- a/FULiveDemo/Helpers/UI/FUCircleProgressView.m +++ b/FULiveDemo/Render/View/FUCircleProgressView.m @@ -30,7 +30,7 @@ - (instancetype)init { } - (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder] ; + self = [super initWithCoder:aDecoder]; if(self) { [self initData]; } diff --git a/FULiveDemo/Helpers/UI/FUHeadButtonView.h b/FULiveDemo/Render/View/FUHeadButtonView.h similarity index 100% rename from FULiveDemo/Helpers/UI/FUHeadButtonView.h rename to FULiveDemo/Render/View/FUHeadButtonView.h diff --git a/FULiveDemo/Helpers/UI/FUHeadButtonView.m b/FULiveDemo/Render/View/FUHeadButtonView.m similarity index 83% rename from FULiveDemo/Helpers/UI/FUHeadButtonView.m rename to FULiveDemo/Render/View/FUHeadButtonView.m index a4aeb272..de2c5ca9 100644 --- a/FULiveDemo/Helpers/UI/FUHeadButtonView.m +++ b/FULiveDemo/Render/View/FUHeadButtonView.m @@ -23,22 +23,22 @@ -(instancetype)initWithFrame:(CGRect)frame{ -(void)setupSubView{ _mHomeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_mHomeBtn setImage:[UIImage imageNamed:@"home icon"] forState:UIControlStateNormal]; + [_mHomeBtn setImage:[UIImage imageNamed:@"render_back_home"] forState:UIControlStateNormal]; [_mHomeBtn addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_mHomeBtn]; _selectedImageBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_selectedImageBtn setImage:[UIImage imageNamed:@"demo_icon_more"] forState:UIControlStateNormal]; + [_selectedImageBtn setImage:[UIImage imageNamed:@"render_more"] forState:UIControlStateNormal]; [_selectedImageBtn addTarget:self action:@selector(selImageAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_selectedImageBtn]; _bulyBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_bulyBtn setImage:[UIImage imageNamed:@"bugly"] forState:UIControlStateNormal]; + [_bulyBtn setImage:[UIImage imageNamed:@"render_bugly"] forState:UIControlStateNormal]; [_bulyBtn addTarget:self action:@selector(buglyAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_bulyBtn]; _switchBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_switchBtn setImage:[UIImage imageNamed:@"camera_btn_shotcut_normal"] forState:UIControlStateNormal]; + [_switchBtn setImage:[UIImage imageNamed:@"render_camera_switch"] forState:UIControlStateNormal]; [_switchBtn addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_switchBtn]; @@ -54,34 +54,34 @@ -(void)setupSubView{ -(void)addLayoutConstraint{ [_mHomeBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self); - make.left.equalTo(self).offset(10); + make.leading.equalTo(self).offset(10); make.height.width.mas_equalTo(44); }]; [_inputSegm mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.mHomeBtn); - make.left.equalTo(self.mHomeBtn.mas_right).offset(12); + make.leading.equalTo(self.mHomeBtn.mas_trailing).offset(12); make.width.mas_equalTo(96); make.height.mas_equalTo(27); }]; [_switchBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.equalTo(self).offset(-10); + make.trailing.equalTo(self).offset(-10); make.centerY.equalTo(self.mHomeBtn); make.height.width.mas_equalTo(44); }]; [_bulyBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.equalTo(self.switchBtn.mas_left).offset(-10); + make.trailing.equalTo(self.switchBtn.mas_leading).offset(-10); make.centerY.equalTo(self.mHomeBtn); make.height.width.mas_equalTo(44); }]; [_selectedImageBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.equalTo(self.bulyBtn.mas_left).offset(-10); + make.trailing.equalTo(self.bulyBtn.mas_leading).offset(-10); make.centerY.equalTo(self.mHomeBtn); make.height.width.mas_equalTo(44); diff --git a/FULiveDemo/Helpers/UI/FULightingSlider.h b/FULiveDemo/Render/View/FULightingSlider.h similarity index 100% rename from FULiveDemo/Helpers/UI/FULightingSlider.h rename to FULiveDemo/Render/View/FULightingSlider.h diff --git a/FULiveDemo/Render/View/FULightingSlider.m b/FULiveDemo/Render/View/FULightingSlider.m new file mode 100644 index 00000000..6694cd37 --- /dev/null +++ b/FULiveDemo/Render/View/FULightingSlider.m @@ -0,0 +1,52 @@ +// +// FULightingSlider.m +// FULiveDemo +// +// Created by L on 2018/9/20. +// Copyright © 2018年 L. All rights reserved. +// + +#import "FULightingSlider.h" + +@implementation FULightingSlider +{ + UIView *line; +} + +-(instancetype)initWithFrame:(CGRect)frame{ + if (self = [super initWithFrame:frame]) { + [self setThumbImage:[UIImage imageNamed:@"render_lighting"] forState:UIControlStateNormal]; + [self setMaximumTrackTintColor:[UIColor whiteColor]]; + [self setMinimumTrackTintColor:[UIColor whiteColor]]; + } + return self; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + [self setThumbImage:[UIImage imageNamed:@"render_lighting"] forState:UIControlStateNormal]; + [self setMaximumTrackTintColor:[UIColor whiteColor]]; + [self setMinimumTrackTintColor:[UIColor whiteColor]]; +} + +-(void)layoutSubviews { + [super layoutSubviews]; + if (!line) { + line = [[UIView alloc] init]; + line.backgroundColor = [UIColor whiteColor]; + line.layer.masksToBounds = YES; + line.layer.cornerRadius = 1.0; + [self insertSubview:line atIndex: self.subviews.count - 1]; + } + line.frame = CGRectMake(self.frame.size.width / 2.0 - 1.0, 4.0, 2.0, self.frame.size.height - 8.0); + + CGFloat value = self.value; + [self setValue:value animated:NO]; +} + + +- (void)setValue:(float)value animated:(BOOL)animated { + [super setValue:value animated:animated]; +} + +@end diff --git a/FULiveDemo/Helpers/UI/FULightingView.h b/FULiveDemo/Render/View/FULightingView.h similarity index 89% rename from FULiveDemo/Helpers/UI/FULightingView.h rename to FULiveDemo/Render/View/FULightingView.h index 6f617dc9..3fbe9bc0 100644 --- a/FULiveDemo/Helpers/UI/FULightingView.h +++ b/FULiveDemo/Render/View/FULightingView.h @@ -15,12 +15,12 @@ NS_ASSUME_NONNULL_BEGIN @protocol FULightingViewDelegate @optional -- (void)lightingViewValueDidChange:(float)value ; +- (void)lightingViewValueDidChange:(float)value; @end @interface FULightingView : UIView @property (strong, nonatomic) FULightingSlider *slider; -@property (nonatomic, assign) iddelegate ; +@property (nonatomic, assign) iddelegate; @end NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/View/FULightingView.m b/FULiveDemo/Render/View/FULightingView.m new file mode 100644 index 00000000..41389d8c --- /dev/null +++ b/FULiveDemo/Render/View/FULightingView.m @@ -0,0 +1,56 @@ +// +// FULightingView.m +// FULiveDemo +// +// Created by L on 2018/9/20. +// Copyright © 2018年 L. All rights reserved. +// + +#import "FULightingView.h" + +@interface FULightingView() +@property (strong, nonatomic) UIImageView *sunImage; +@property (strong, nonatomic) UIImageView *monImage; +@end + +@implementation FULightingView + +-(instancetype)initWithFrame:(CGRect)frame{ + if (self = [super initWithFrame:frame]) { + [self setupSubView]; + } + return self; +} + +-(void)setupSubView{ + self.monImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"render_lighting_mon"]]; + self.monImage.frame = CGRectMake(10, 0, 20, 20); + [self addSubview:self.monImage]; + self.sunImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"render_lighting_sun"]]; + self.sunImage.frame = CGRectMake(self.frame.size.width - 30, 0, 20, 20); + [self addSubview:self.sunImage]; + + self.slider = [[FULightingSlider alloc] initWithFrame:CGRectMake(40, 0, self.frame.size.width - 80, 20)]; + [self.slider addTarget:self action:@selector(sliderValueChange:) forControlEvents:UIControlEventValueChanged]; + [self addSubview:self.slider]; + + self.monImage.transform = CGAffineTransformMakeRotation(M_PI_2); + self.sunImage.transform = CGAffineTransformMakeRotation(M_PI_2); +} + + +-(void)awakeFromNib { + [super awakeFromNib]; + [self setupSubView]; + +} + +-(void)sliderValueChange:(FULightingSlider *)sender { + float value = sender.value; + if ([self.delegate respondsToSelector:@selector(lightingViewValueDidChange:)]) { + [self.delegate lightingViewValueDidChange:value]; + } +} + + +@end diff --git a/FULiveDemo/Helpers/UI/FUPopupMenu.h b/FULiveDemo/Render/View/FUPopupMenu.h similarity index 96% rename from FULiveDemo/Helpers/UI/FUPopupMenu.h rename to FULiveDemo/Render/View/FUPopupMenu.h index 69e0903e..4a3cf96f 100644 --- a/FULiveDemo/Helpers/UI/FUPopupMenu.h +++ b/FULiveDemo/Render/View/FUPopupMenu.h @@ -48,11 +48,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) int selIndex; -/// 不需要按钮 --(void)dismissBtn; -/** - 消失 - */ + +/// 隐藏 - (void)dismiss; @end diff --git a/FULiveDemo/Helpers/UI/FUPopupMenu.m b/FULiveDemo/Render/View/FUPopupMenu.m similarity index 94% rename from FULiveDemo/Helpers/UI/FUPopupMenu.m rename to FULiveDemo/Render/View/FUPopupMenu.m index 5cf91e52..ca475384 100644 --- a/FULiveDemo/Helpers/UI/FUPopupMenu.m +++ b/FULiveDemo/Render/View/FUPopupMenu.m @@ -68,8 +68,8 @@ - (void)setupView{ UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(25, 81, self.frame.size.width-50, 50); - [btn setImage:[UIImage imageNamed:@"demo_icon_add_to"] forState:UIControlStateNormal]; - [btn setTitle:FUNSLocalizedString(@"载入图片或视频", nil) forState:UIControlStateNormal]; + [btn setImage:[UIImage imageNamed:@"render_select_media"] forState:UIControlStateNormal]; + [btn setTitle:FULocalizedString(@"载入图片或视频") forState:UIControlStateNormal]; [btn addTarget:self action:@selector(didClickBtn) forControlEvents:UIControlEventTouchUpInside]; btn.titleLabel.font = [UIFont systemFontOfSize:13]; btn.titleLabel.textAlignment = NSTextAlignmentLeft; @@ -110,7 +110,7 @@ - (void)show [UIView animateWithDuration: 0.25 animations:^{ self.layer.affineTransform = CGAffineTransformMakeScale(1.0, 1.0); self.alpha = 1; - _menuBackView.alpha = 1; + self.menuBackView.alpha = 1; } completion:^(BOOL finished) { }]; } @@ -120,22 +120,16 @@ - (void)dismiss{ [UIView animateWithDuration: 0.25 animations:^{ self.layer.affineTransform = CGAffineTransformMakeScale(0.1, 0.1); self.alpha = 0; - _menuBackView.alpha = 0; + self.menuBackView.alpha = 0; } completion:^(BOOL finished) { self.delegate = nil; [self removeFromSuperview]; - [_menuBackView removeFromSuperview]; + [self.menuBackView removeFromSuperview]; }]; } --(void)dismissBtn{ - -} - -- (void)touchOutSide{ - +- (void)touchOutSide { [self dismiss]; - } -(void)didClickBtn{ diff --git a/FULiveDemo/Render/ViewController/FUImageRenderViewController.h b/FULiveDemo/Render/ViewController/FUImageRenderViewController.h new file mode 100644 index 00000000..2e93370c --- /dev/null +++ b/FULiveDemo/Render/ViewController/FUImageRenderViewController.h @@ -0,0 +1,36 @@ +// +// FUImageRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import +#import + +#import "FUImageRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUImageRenderViewController : UIViewController + +@property (nonatomic, strong, readonly) FUGLDisplayView *renderView; +/// 人脸/人体/手势检测提示标签 +@property (nonatomic, strong, readonly) UILabel *noTrackLabel; +/// 额外操作提示标签 +@property (nonatomic, strong, readonly) UILabel *tipLabel; + +@property (nonatomic, strong, readonly) FUImageRenderViewModel *viewModel; + +- (instancetype)initWithViewModel:(FUImageRenderViewModel *)viewModel; + +/// 更新保存按钮距离屏幕底部的距离 +/// @param isHidden 是否隐藏视图 +/// @param animated 是否需要动画 +- (void)updateBottomConstraintsOfDownloadButton:(CGFloat)constant + hidden:(BOOL)isHidden + animated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/ViewController/FUImageRenderViewController.m b/FULiveDemo/Render/ViewController/FUImageRenderViewController.m new file mode 100644 index 00000000..fa0d073a --- /dev/null +++ b/FULiveDemo/Render/ViewController/FUImageRenderViewController.m @@ -0,0 +1,264 @@ +// +// FUImageRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FUImageRenderViewController.h" + +#import "FULandmarkManager.h" + +@interface FUImageRenderViewController () + +@property (nonatomic, strong) FUGLDisplayView *renderView; + +@property (nonatomic, strong) UIButton *downloadButton; + +@property (nonatomic, strong) UILabel *noTrackLabel; + +@property (nonatomic, strong) UILabel *tipLabel; + +@property (nonatomic, strong) FUImageRenderViewModel *viewModel; + +@end + +@implementation FUImageRenderViewController + +#pragma mark - Initializer + +- (instancetype)initWithViewModel:(FUImageRenderViewModel *)viewModel { + self = [super init]; + if (self) { + self.viewModel = viewModel; + self.viewModel.delegate = self; + } + return self; +} + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureUI]; + + [self.viewModel start]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + // 添加点位测试开关 + if ([FURenderKitManager sharedManager].showsLandmarks) { + [FULandmarkManager show]; + } +} + +- (void)viewWillDisappear:(BOOL)animated { + // 移除点位测试开关 + if ([FURenderKitManager sharedManager].showsLandmarks) { + [FULandmarkManager dismiss]; + } +} + +- (void)dealloc { + [self.viewModel stop]; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; +} + +#pragma mark - UI + +- (void)configureUI { + self.view.backgroundColor = [UIColor blackColor]; + + [self.view addSubview:self.renderView]; + [self.renderView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.equalTo(self.view); + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); + if(FUDeviceIsiPhoneXStyle()) { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-50); + } else { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); + } + } else { + make.top.equalTo(self.view.mas_top); + make.bottom.equalTo(self.view.mas_bottom); + } + make.leading.trailing.equalTo(self.view); + }]; + + UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [backButton setImage:[UIImage imageNamed:@"back_item"] forState:UIControlStateNormal]; + [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:backButton]; + [backButton mas_makeConstraints:^(MASConstraintMaker *make) { + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(20); + } else { + make.top.equalTo(self.view.mas_top).offset(30); + } + make.leading.equalTo(self.view.mas_leading).offset(10); + make.size.mas_offset(CGSizeMake(44, 44)); + }]; + + + [self.view addSubview:self.noTrackLabel]; + [self.noTrackLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.view); + }]; + + [self.view addSubview:self.tipLabel]; + [self.tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.view.mas_centerY).mas_offset(24); + make.centerX.equalTo(self.view); + make.width.mas_equalTo(300); + make.height.mas_equalTo(32); + }]; + + [self.view addSubview:self.downloadButton]; + [self.downloadButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_bottom).offset(-FUHeightIncludeBottomSafeArea(69)); + make.centerX.equalTo(self.view); + make.size.mas_offset(CGSizeMake(85, 85)); + }]; +} + +#pragma mark - Instance methods + +- (void)updateBottomConstraintsOfDownloadButton:(CGFloat)constraints hidden:(BOOL)isHidden animated:(BOOL)animated { + [self.downloadButton mas_updateConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_bottom).mas_offset(-constraints); + }]; + if (animated) { + [UIView animateWithDuration:0.15 animations:^{ + self.downloadButton.transform = isHidden ? CGAffineTransformIdentity : CGAffineTransformMakeScale(0.9, 0.9); + [self.view layoutIfNeeded]; + }]; + } else { + self.downloadButton.transform = isHidden ? CGAffineTransformIdentity : CGAffineTransformMakeScale(0.9, 0.9); + } +} + +#pragma mark - Event response + +- (void)backAction:(UIButton *)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)downloadAction:(UIButton *)sender { + @FUWeakify(self) + self.viewModel.captureImageHandler = ^(UIImage * _Nonnull image) { + @FUStrongify(self) + dispatch_async(dispatch_get_main_queue(), ^{ + UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); + }); + }; +} + +- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { + if (error) { + [SVProgressHUD showError:FULocalizedString(@"保存图片失败")]; + } else { + [SVProgressHUD showSuccess:FULocalizedString(@"图片已保存到相册")]; + } +} + +- (void)applicationWillResignActive { + [self.viewModel stop]; +} + +- (void)applicationDidBecomeActive { + [self.viewModel start]; +} + +#pragma mark - FUImageRenderViewModelDelegate + +- (void)imageRenderDidOutputImageBuffer:(FUImageBuffer)imageBuffer { + [self.renderView displayImageData:imageBuffer.buffer0 withSize:imageBuffer.size]; +} + +- (void)imageRenderShouldCheckDetectingStatus:(FUDetectingParts)parts { + @autoreleasepool { + BOOL detectingResult = YES; + switch (parts) { + case FUDetectingPartsFace: + detectingResult = [FURenderKitManager faceTracked]; + break; + case FUDetectingPartsHuman: + detectingResult = [FURenderKitManager humanTracked]; + break; + case FUDetectingPartsHand: + detectingResult = [FURenderKitManager handTracked]; + break; + default: + break; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.noTrackLabel.hidden = detectingResult; + if (!detectingResult) { + self.noTrackLabel.text = parts == FUDetectingPartsFace ? FULocalizedString(@"未检测到人脸") : (parts == FUDetectingPartsHuman ? FULocalizedString(@"未检测到人体") : FULocalizedString(@"未检测到手势")); + } + }); + } +} + +#pragma mark - Getters + +- (UIButton *)downloadButton { + if (!_downloadButton) { + _downloadButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _downloadButton.backgroundColor = [UIColor whiteColor]; + _downloadButton.layer.cornerRadius = 42.5; + [_downloadButton setBackgroundImage:[UIImage imageNamed:@"render_save"] forState:UIControlStateNormal]; + [_downloadButton addTarget:self action:@selector(downloadAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _downloadButton; +} + +- (UILabel *)noTrackLabel { + if (!_noTrackLabel) { + _noTrackLabel = [[UILabel alloc] init]; + _noTrackLabel.textColor = [UIColor whiteColor]; + _noTrackLabel.font = [UIFont systemFontOfSize:17]; + _noTrackLabel.text = FULocalizedString(@"未检测到人脸"); + _noTrackLabel.hidden = YES; + } + return _noTrackLabel; +} + +- (UILabel *)tipLabel { + if (!_tipLabel) { + _tipLabel = [[UILabel alloc] init]; + _tipLabel.textColor = [UIColor whiteColor]; + _tipLabel.font = [UIFont systemFontOfSize:32]; + _tipLabel.textAlignment = NSTextAlignmentCenter; + _tipLabel.hidden = YES; + } + return _tipLabel; +} + +- (FUGLDisplayView *)renderView { + if (!_renderView) { + _renderView = [[FUGLDisplayView alloc] initWithFrame:self.view.bounds]; + _renderView.contentMode = FUGLDisplayViewContentModeScaleAspectFit; + } + return _renderView; +} + +#pragma mark - Override methods + +- (BOOL)prefersStatusBarHidden { + return !FUDeviceIsiPhoneXStyle(); +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +@end diff --git a/FULiveDemo/Render/ViewController/FURenderViewController.h b/FULiveDemo/Render/ViewController/FURenderViewController.h new file mode 100644 index 00000000..8430e4fb --- /dev/null +++ b/FULiveDemo/Render/ViewController/FURenderViewController.h @@ -0,0 +1,40 @@ +// +// FURenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/19. +// Copyright © 2022 FaceUnity. All rights reserved. +// + +#import +#import +#import + +#import "FUHeadButtonView.h" +#import "FUCaptureButton.h" +#import "FURenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FURenderViewController : UIViewController + +/// 渲染视图 +@property (nonatomic, strong, readonly) FUGLDisplayView *renderView; +/// 顶部功能视图 +@property (nonatomic, strong, readonly) FUHeadButtonView *headButtonView; +/// 人脸/人体/手势检测提示标签 +@property (nonatomic, strong, readonly) UILabel *noTrackLabel; +/// 额外操作提示标签 +@property (nonatomic, strong, readonly) UILabel *tipLabel; + +@property (nonatomic, strong, readonly) FURenderViewModel *viewModel; + +- (instancetype)initWithViewModel:(FURenderViewModel *)viewModel; + +/// 更新拍照/录制按钮到屏幕底部的距离 +/// @param animated 是否需要动画 +- (void)updateBottomConstraintsOfCaptureButton:(CGFloat)constant animated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/ViewController/FURenderViewController.m b/FULiveDemo/Render/ViewController/FURenderViewController.m new file mode 100644 index 00000000..eb743bae --- /dev/null +++ b/FULiveDemo/Render/ViewController/FURenderViewController.m @@ -0,0 +1,508 @@ +// +// FURenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/19. +// Copyright © 2022 FaceUnity. All rights reserved. +// + +#import "FURenderViewController.h" +#import "FUMediaPickerViewController.h" +#import "FUHeadButtonView.h" +#import "FUCaptureButton.h" +#import "FULightingView.h" +#import "FUPopupMenu.h" +#import "FULandmarkManager.h" + +@interface FURenderViewController () + +/// 渲染视图 +@property (nonatomic, strong) FUGLDisplayView *renderView; +/// 顶部功能视图 +@property (nonatomic, strong) FUHeadButtonView *headButtonView; +/// 拍照和录制视频按钮 +@property (nonatomic, strong) FUCaptureButton *captureButton; +/// 曝光度调节器 +@property (nonatomic, strong) FULightingView *lightingView; +/// 手动对焦指示器 +@property (nonatomic, strong) UIImageView *adjustImageView; +/// debug信息标签 +@property (nonatomic, strong) FUInsetsLabel *buglyLabel; + +@property (nonatomic, strong) UILabel *noTrackLabel; + +@property (nonatomic, strong) UILabel *tipLabel; + +@property (nonatomic, strong) FURenderViewModel *viewModel; + +@end + +@implementation FURenderViewController { + // 对焦点击操作记录时间 + CFAbsoluteTime operatedTime; +} + +#pragma mark - Initializer + +- (instancetype)initWithViewModel:(FURenderViewModel *)viewModel { + self = [super init]; + if (self) { + self.viewModel = viewModel; + self.viewModel.delegate = self; + } + return self; +} + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 加载美颜 + if (self.viewModel.needsLoadingBeauty) { + [[FUBeautyComponentManager sharedManager] loadBeauty]; + } + + [self configureUI]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // 每次进入页面或者返回页面都需要重新设置人脸和人体检测模式 + if (self.viewModel.necessaryAIModelTypes & FUAIModelTypeFace) { + [FURenderKitManager setFaceProcessorDetectMode:FUFaceProcessorDetectModeVideo]; + } + if (self.viewModel.necessaryAIModelTypes & FUAIModelTypeHuman) { + [FURenderKitManager setHumanProcessorDetectMode:FUHumanProcessorDetectModeVideo]; + } + + [self.viewModel startCameraWithRenderView:self.renderView]; + + // 添加点位测试开关 + if ([FURenderKitManager sharedManager].showsLandmarks) { + [FULandmarkManager show]; + } +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + [self.viewModel stopCamera]; + [self.viewModel resetCameraFocusAndExposureMode]; + + // 移除点位测试开关 + if ([FURenderKitManager sharedManager].showsLandmarks) { + [FULandmarkManager dismiss]; + } +} + +- (void)dealloc { + if (self.viewModel.needsLoadingBeauty) { + [FUBeautyComponentManager destory]; + } +} + + +#pragma mark - UI + +- (void)configureUI { + self.view.backgroundColor = [UIColor colorWithRed:17/255.0 green:18/255.0 blue:38/255.0 alpha:1.0]; + + [self.view addSubview:self.renderView]; + [self.renderView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.equalTo(self.view); + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); + if(FUDeviceIsiPhoneXStyle()) { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-50); + } else { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); + } + } else { + make.top.equalTo(self.view.mas_top); + make.bottom.equalTo(self.view.mas_bottom); + } + make.leading.trailing.equalTo(self.view); + }]; + + [self.view addSubview:self.headButtonView]; + [self.headButtonView mas_makeConstraints:^(MASConstraintMaker *make) { + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(15); + } else { + make.top.equalTo(self.view.mas_top).offset(30); + } + make.leading.trailing.equalTo(self.view); + make.height.mas_equalTo(44); + }]; + + [self.view addSubview:self.buglyLabel]; + [self.buglyLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.headButtonView.mas_bottom).offset(15); + make.leading.equalTo(self.view).offset(10); + }]; + + [self.view addSubview:self.lightingView]; + [self.view addSubview:self.adjustImageView]; + + [self.view addSubview:self.noTrackLabel]; + [self.noTrackLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.view); + }]; + + [self.view addSubview:self.tipLabel]; + [self.tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.view.mas_centerY).mas_offset(24); + make.centerX.equalTo(self.view); + }]; + + [self.view addSubview:self.captureButton]; + [self.captureButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.equalTo(self.view); + make.bottom.equalTo(self.view.mas_bottom).mas_offset(-FUHeightIncludeBottomSafeArea(10)); + make.size.mas_offset(CGSizeMake(81, 81)); + }]; +} + +#pragma mark - Instance methods + +- (void)updateBottomConstraintsOfCaptureButton:(CGFloat)constant animated:(BOOL)animated { + [self.captureButton mas_updateConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_bottom).mas_offset(-constant); + }]; + if (animated) { + [UIView animateWithDuration:0.15 animations:^{ + [self.view layoutIfNeeded]; + }]; + } +} + +#pragma mark - Private methods + +/// 延迟隐藏视图 +- (void)hideFocusAndLightingViewAfterDelay:(NSTimeInterval)deley { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(deley * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + CFAbsoluteTime currentTime = CFAbsoluteTimeGetCurrent(); + if (currentTime - self->operatedTime > 1.29) { + self.lightingView.hidden = YES; + self.adjustImageView.hidden = YES; + } + }); +} + +#pragma mark - Event response + +- (void)renderViewTapAction:(UITapGestureRecognizer *)tap { + operatedTime = CFAbsoluteTimeGetCurrent(); + self.lightingView.hidden = NO; + self.adjustImageView.hidden = NO; + [self.viewModel switchCameraFocusMode:FUCaptureCameraFocusModeChangeless]; + CGPoint center = [tap locationInView:self.renderView]; + self.adjustImageView.center = center; + // 缩放动画 + self.adjustImageView.transform = CGAffineTransformIdentity; + [UIView animateWithDuration:0.3 animations:^{ + self.adjustImageView.transform = CGAffineTransformMakeScale(0.67, 0.67); + } completion:^(BOOL finished) { + [self hideFocusAndLightingViewAfterDelay:1.1]; + }]; + // 根据renderView的填充模式计算图像中心点 + CGPoint pictureCenter; + CGFloat scale = self.viewModel.inputBufferHeight / self.viewModel.inputBufferWidth; + CGFloat renderViewWidth = CGRectGetWidth(self.renderView.bounds); + CGFloat renderViewHeight = CGRectGetHeight(self.renderView.bounds); + if (self.renderView.contentMode == FUGLDisplayViewContentModeScaleAspectFill) { + // 短边填满(宽度按比例截取中间部分) + CGFloat leading = (renderViewHeight / scale - renderViewWidth) / 2.0; + CGFloat pictureWidth = renderViewWidth + leading * 2; + center.x += leading; + if (center.y <= 0) { + return; + } + pictureCenter = CGPointMake(center.y / renderViewHeight, self.viewModel.captureDevicePostion == AVCaptureDevicePositionFront ? center.x / pictureWidth : 1 - center.x / pictureWidth); + } else if (self.renderView.contentMode == FUGLDisplayViewContentModeScaleAspectFit) { + // 长边填满(高度上下会留空白) + CGFloat top = (renderViewHeight - renderViewWidth * scale) / 2.0; + CGFloat pictureHeight = renderViewHeight - top * 2; + center.y -= top; + if (center.y <= 0) { + return; + } + pictureCenter = CGPointMake(center.y / pictureHeight, self.viewModel.captureDevicePostion == AVCaptureDevicePositionFront ? center.x / renderViewWidth : 1 - center.x / renderViewWidth); + } else { + // 拉伸填满 + pictureCenter = CGPointMake(center.y / renderViewHeight, self.viewModel.captureDevicePostion == AVCaptureDevicePositionFront ? center.x / renderViewWidth : 1 - center.x / renderViewWidth); + } + [self.viewModel setCameraFocusPoint:pictureCenter]; +} + +- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *) contextInfo { + if (error) { + [SVProgressHUD showError:FULocalizedString(@"保存图片失败")]; + } else { + [SVProgressHUD showSuccess:FULocalizedString(@"图片已保存到相册")]; + } +} + +- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { + if (error) { + [SVProgressHUD showError:FULocalizedString(@"保存视频失败")]; + } else { + [SVProgressHUD showSuccess:FULocalizedString(@"视频已保存到相册")]; + } +} + +#pragma mark - FURenderViewModelDelegate + +- (void)renderDidOutputDebugInformations:(NSString *)informations { + dispatch_async(dispatch_get_main_queue(), ^{ + if (!self.buglyLabel.hidden) { + self.buglyLabel.text = informations; + } + }); +} + +- (void)renderShouldCheckDetectingStatus:(FUDetectingParts)parts { + @autoreleasepool { + BOOL detectingResult = YES; + switch (parts) { + case FUDetectingPartsFace: + detectingResult = [FURenderKitManager faceTracked]; + break; + case FUDetectingPartsHuman: + detectingResult = [FURenderKitManager humanTracked]; + break; + case FUDetectingPartsHand: + detectingResult = [FURenderKitManager handTracked]; + break; + default: + break; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.noTrackLabel.hidden = detectingResult; + if (!detectingResult) { + self.noTrackLabel.text = parts == FUDetectingPartsFace ? FULocalizedString(@"未检测到人脸") : (parts == FUDetectingPartsHuman ? FULocalizedString(@"未检测到人体") : FULocalizedString(@"未检测到手势")); + } + }); + } +} + +#pragma mark - FULightingViewDelegate + +- (void)lightingViewValueDidChange:(float)value { + operatedTime = CFAbsoluteTimeGetCurrent(); + [self hideFocusAndLightingViewAfterDelay:1.3]; + [self.viewModel setCameraExposureValue:value]; +} + +#pragma mark - FUHeadButtonViewDelegate + +- (void)headButtonViewBackAction:(UIButton *)btn { + // 恢复相机曝光度 + [self.viewModel setCameraExposureValue:0]; + [self.viewModel stopCamera]; + [self.viewModel resetCameraSettings]; + [FURenderKitManager clearItems]; + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)headButtonViewSegmentedChange:(UISegmentedControl *)sender { + [self.viewModel switchCameraOutputFormat]; +} + +- (void)headButtonViewSelImageAction:(UIButton *)btn { + if (!self.viewModel.supportPresetSelection) { + // 直接进入图片和视频选择页面 + FUMediaPickerViewController *picker = [[FUMediaPickerViewController alloc] initWithViewModel:[[FUMediaPickerViewModel alloc] initWithModule:self.viewModel.module]]; + [self.navigationController pushViewController:picker animated:YES]; + } else { + // 弹出视图 + CGFloat height; + BOOL hideMediaSelection; + if (self.viewModel.supportMediaRendering) { + // 支持分辨率、图片或视频视图 + height = 132; + hideMediaSelection = NO; + } else { + // 只支持分辨率视图 + height = 80; + hideMediaSelection = YES; + } + int selectedPresetIndex = (int)[self.viewModel.presets indexOfObject:self.viewModel.capturePreset]; + [FUPopupMenu showRelyOnView:btn frame:CGRectMake(17, CGRectGetMaxY(self.headButtonView.frame) + 1, 340, height) defaultSelectedAtIndex:selectedPresetIndex onlyTop:hideMediaSelection dataSource:self.viewModel.presetTitles delegate:self]; + } +} + +- (void)headButtonViewBuglyAction:(UIButton *)btn { + self.buglyLabel.hidden = !self.buglyLabel.hidden; +} + +- (void)headButtonViewSwitchAction:(UIButton *)btn { + btn.userInteractionEnabled = NO; + dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC); + dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){ + btn.userInteractionEnabled = YES; + }); + [self.viewModel switchCameraBetweenFrontAndRear:self.viewModel.captureDevicePostion != AVCaptureDevicePositionFront unsupportedPresetHandler:^{ + // 硬件不支持当前分辨率,则降低一个分辨率 + NSInteger currentIndex = [self.viewModel.presets indexOfObject:self.viewModel.capturePreset]; + if (currentIndex < 1) { + return; + } + [self fuPopupMenuDidSelectedAtIndex:currentIndex - 1]; + }]; +} + +#pragma mark - FUPopupMenuDelegate + +/// 选择图片或视频 +- (void)fuPopupMenuDidSelectedImage { + // 直接进入图片和视频选择页面 + FUMediaPickerViewController *picker = [[FUMediaPickerViewController alloc] initWithViewModel:[[FUMediaPickerViewModel alloc] initWithModule:self.viewModel.module]]; + [self.navigationController pushViewController:picker animated:YES]; +} + +/// 分辨率切换 +- (void)fuPopupMenuDidSelectedAtIndex:(NSInteger)index { + AVCaptureSessionPreset selectedPreset = self.viewModel.presets[index]; + [self.viewModel switchCapturePreset:selectedPreset unsupportedPresetHandler:^{ + [SVProgressHUD showInfo:FULocalizedString(@"设备不支持该分辨率")]; + }]; +} + +#pragma mark - FUCaptureButtonDelegate + +- (void)captureButtonDidTakePhoto { + UIImage *image = [FURenderKit captureImage]; + UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); + +} + +- (void)captureButtonDidStartRecording { + NSString *videoPath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4", FUCurrentDateString()]]; + if (!videoPath) { + return; + } + [FURenderKit startRecordVideoWithFilePath:videoPath]; +} + +- (void)captureButtonDidFinishRecording { + @FUWeakify(self) + [FURenderKit stopRecordVideoComplention:^(NSString * _Nonnull filePath) { + @FUStrongify(self) + if (!filePath) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + UISaveVideoAtPathToSavedPhotosAlbum(filePath, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL); + }); + }]; +} + +#pragma mark - Getters + +- (FUGLDisplayView *)renderView { + if (!_renderView) { + _renderView = [[FUGLDisplayView alloc] initWithFrame:self.view.bounds]; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(renderViewTapAction:)]; + [_renderView addGestureRecognizer:tap]; + } + return _renderView; +} + +- (FUHeadButtonView *)headButtonView { + if (!_headButtonView) { + _headButtonView = [[FUHeadButtonView alloc] init]; + _headButtonView.delegate = self; + _headButtonView.selectedImageBtn.hidden = (!self.viewModel.supportMediaRendering && !self.viewModel.supportPresetSelection); + _headButtonView.inputSegm.hidden = !self.viewModel.supportSwitchingOutputFormat; + if (!_headButtonView.hidden) { + [_headButtonView.selectedImageBtn setImage:self.viewModel.supportPresetSelection ? [UIImage imageNamed:@"render_more"] : [UIImage imageNamed:@"render_picture"] forState:UIControlStateNormal]; + } + } + return _headButtonView; +} + +- (FUInsetsLabel *)buglyLabel { + if (!_buglyLabel) { + _buglyLabel = [[FUInsetsLabel alloc] initWithFrame:CGRectZero insets:UIEdgeInsetsMake(5, 5, 5, 5)]; + _buglyLabel.layer.masksToBounds = YES; + _buglyLabel.layer.cornerRadius = 5; + _buglyLabel.numberOfLines = 0; + _buglyLabel.backgroundColor = [UIColor darkGrayColor]; + _buglyLabel.text = @"resolution:\n720x1280\nfps:30\nrender time:\n0ms"; + _buglyLabel.textColor = [UIColor whiteColor]; + _buglyLabel.alpha = 0.74; + _buglyLabel.font = [UIFont systemFontOfSize:13]; + _buglyLabel.hidden = YES; + } + return _buglyLabel; +} + +- (FULightingView *)lightingView { + if (!_lightingView) { + _lightingView = [[FULightingView alloc] initWithFrame:CGRectMake(0, 0, 280, 40)]; + _lightingView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - 20, CGRectGetHeight(self.view.bounds) / 2.0 - 60); + _lightingView.transform = CGAffineTransformMakeRotation(-M_PI_2); + _lightingView.slider.minimumValue = -2; + _lightingView.slider.maximumValue = 2; + _lightingView.slider.value = 0; + _lightingView.delegate = self; + _lightingView.hidden = YES; + } + return _lightingView; +} + +- (UIImageView *)adjustImageView { + if (!_adjustImageView) { + _adjustImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"render_adjust"]]; + _adjustImageView.center = self.view.center; + _adjustImageView.hidden = YES; + } + return _adjustImageView; +} + +- (UILabel *)noTrackLabel { + if (!_noTrackLabel) { + _noTrackLabel = [[UILabel alloc] init]; + _noTrackLabel.textColor = [UIColor whiteColor]; + _noTrackLabel.font = [UIFont systemFontOfSize:17]; + _noTrackLabel.textAlignment = NSTextAlignmentCenter; + _noTrackLabel.text = FULocalizedString(@"No_Face_Tracking"); + _noTrackLabel.hidden = YES; + } + return _noTrackLabel; +} + +- (UILabel *)tipLabel { + if (!_tipLabel) { + _tipLabel = [[UILabel alloc] init]; + _tipLabel.textColor = [UIColor whiteColor]; + _tipLabel.font = [UIFont systemFontOfSize:32]; + _tipLabel.textAlignment = NSTextAlignmentCenter; + _tipLabel.hidden = YES; + } + return _tipLabel; +} + +- (FUCaptureButton *)captureButton { + if (!_captureButton) { + _captureButton = [[FUCaptureButton alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.view.bounds) / 2.0 - 40.5, CGRectGetHeight(self.view.bounds) - 91, 81, 81)]; + _captureButton.recordVideo = self.viewModel.supportVideoRecording; + _captureButton.hidden = !self.viewModel.supportCaptureAndRecording; + _captureButton.delegate = self; + } + return _captureButton; +} + +#pragma mark - Overriding + +- (BOOL)prefersStatusBarHidden { + return !FUDeviceIsiPhoneXStyle(); +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +@end diff --git a/FULiveDemo/Render/ViewController/FUVideoRenderViewController.h b/FULiveDemo/Render/ViewController/FUVideoRenderViewController.h new file mode 100644 index 00000000..9edf373a --- /dev/null +++ b/FULiveDemo/Render/ViewController/FUVideoRenderViewController.h @@ -0,0 +1,36 @@ +// +// FUVideoRenderViewController.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import +#import + +#import "FUVideoRenderViewModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUVideoRenderViewController : UIViewController + +@property (nonatomic, strong, readonly) FUGLDisplayView *renderView; +/// 人脸/人体/手势检测提示标签 +@property (nonatomic, strong, readonly) UILabel *noTrackLabel; +/// 额外操作提示标签 +@property (nonatomic, strong, readonly) UILabel *tipLabel; + +@property (nonatomic, strong, readonly) FUVideoRenderViewModel *viewModel; + +- (instancetype)initWithViewModel:(FUVideoRenderViewModel *)viewModel; + +/// 更新保存按钮距离屏幕底部的距离 +/// @param isHidden 是否隐藏视图 +/// @param animated 是否需要动画 +- (void)updateBottomConstraintsOfDownloadButton:(CGFloat)constraints + hidden:(BOOL)isHidden + animated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/ViewController/FUVideoRenderViewController.m b/FULiveDemo/Render/ViewController/FUVideoRenderViewController.m new file mode 100644 index 00000000..70f4ffb6 --- /dev/null +++ b/FULiveDemo/Render/ViewController/FUVideoRenderViewController.m @@ -0,0 +1,299 @@ +// +// FUVideoRenderViewController.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/8. +// + +#import "FUVideoRenderViewController.h" + +#import "FULandmarkManager.h" + +@interface FUVideoRenderViewController () + +@property (nonatomic, strong) FUGLDisplayView *renderView; + +@property (nonatomic, strong) UIButton *playVideoButton; + +@property (nonatomic, strong) UIButton *downloadButton; + +@property (nonatomic, strong) UILabel *noTrackLabel; + +@property (nonatomic, strong) UILabel *tipLabel; + +@property (nonatomic, strong) NSURL *videoURL; + +@property (nonatomic, strong) FUVideoRenderViewModel *viewModel; + +@end + +@implementation FUVideoRenderViewController + +#pragma mark - Initializer + +- (instancetype)initWithViewModel:(FUVideoRenderViewModel *)viewModel { + self = [super init]; + if (self) { + self.viewModel = viewModel; + self.viewModel.delegate = self; + } + return self; +} + +#pragma mark - Life cycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self configureUI]; + + [self playVideoAction:self.playVideoButton]; + + self.renderView.origintation = (FUGLDisplayViewOrientation)self.viewModel.videoOrientation; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + // 添加点位测试开关 + if ([FURenderKitManager sharedManager].showsLandmarks) { + [FULandmarkManager show]; + } +} + +- (void)viewWillDisappear:(BOOL)animated { + // 移除点位测试开关 + if ([FURenderKitManager sharedManager].showsLandmarks) { + [FULandmarkManager dismiss]; + } +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; +} + +#pragma mark - UI + +- (void)configureUI { + self.view.backgroundColor = [UIColor blackColor]; + + [self.view addSubview:self.renderView]; + [self.renderView mas_makeConstraints:^(MASConstraintMaker *make) { + make.leading.trailing.equalTo(self.view); + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); + if(FUDeviceIsiPhoneXStyle()) { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).mas_offset(-50); + } else { + make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); + } + } else { + make.top.equalTo(self.view.mas_top); + make.bottom.equalTo(self.view.mas_bottom); + } + make.leading.trailing.equalTo(self.view); + }]; + + UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [backButton setImage:[UIImage imageNamed:@"back_item"] forState:UIControlStateNormal]; + [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:backButton]; + [backButton mas_makeConstraints:^(MASConstraintMaker *make) { + if (@available(iOS 11.0, *)) { + make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(20); + } else { + make.top.equalTo(self.view.mas_top).offset(30); + } + make.leading.equalTo(self.view.mas_leading).offset(10); + make.size.mas_offset(CGSizeMake(44, 44)); + }]; + + [self.view addSubview:self.noTrackLabel]; + [self.noTrackLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.view); + }]; + + [self.view addSubview:self.tipLabel]; + [self.tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.view.mas_centerY).mas_offset(24); + make.centerX.equalTo(self.view); + make.width.mas_equalTo(300); + make.height.mas_equalTo(32); + }]; + + [self.view addSubview:self.playVideoButton]; + [self.playVideoButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.equalTo(self.view); + make.size.mas_offset(CGSizeMake(85, 85)); + }]; + + [self.view addSubview:self.downloadButton]; + [self.downloadButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_bottom).offset(-FUHeightIncludeBottomSafeArea(69)); + make.centerX.equalTo(self.view); + make.size.mas_offset(CGSizeMake(85, 85)); + }]; +} + + +#pragma mark - Instance methods + +- (void)updateBottomConstraintsOfDownloadButton:(CGFloat)constraints hidden:(BOOL)isHidden animated:(BOOL)animated { + [self.downloadButton mas_updateConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.view.mas_bottom).mas_offset(-constraints); + }]; + if (animated) { + [UIView animateWithDuration:0.15 animations:^{ + self.downloadButton.transform = isHidden ? CGAffineTransformIdentity : CGAffineTransformMakeScale(0.9, 0.9); + [self.view layoutIfNeeded]; + }]; + } else { + self.downloadButton.transform = isHidden ? CGAffineTransformIdentity : CGAffineTransformMakeScale(0.9, 0.9); + } +} + +#pragma mark - Event response + +- (void)backAction:(UIButton *)sender { + [self.viewModel stop]; + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)playVideoAction:(UIButton *)sender { + sender.selected = YES; + sender.hidden = YES; + self.downloadButton.hidden = YES; + [self.viewModel start]; +} + +- (void)downloadAction:(UIButton *)sender { + // 保存视频到相册 + UISaveVideoAtPathToSavedPhotosAlbum(kFUFinalPath, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL); + dispatch_async(dispatch_get_main_queue(), ^{ + self.downloadButton.hidden = YES; + }); +} + +- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { + if (error) { + [SVProgressHUD showError:FULocalizedString(@"保存视频失败")]; + } else { + [SVProgressHUD showSuccess:FULocalizedString(@"视频已保存到相册")]; + } +} + +- (void)applicationWillResignActive { + [self.viewModel stop]; +} + +- (void)applicationDidBecomeActive { + [self playVideoAction:self.playVideoButton]; +} + +#pragma mark - FUVideoRenderViewModelDelegate + +- (void)videoRenderDidOutputPixelBuffer:(CVPixelBufferRef)pixelBuffer { + [self.renderView displayPixelBuffer:pixelBuffer]; +} + +- (void)videoRenderDidFinishProcessing { + dispatch_async(dispatch_get_main_queue(), ^{ + self.downloadButton.hidden = NO; + self.playVideoButton.hidden = NO; + }); +} + +- (void)videoRenderShouldCheckDetectingStatus:(FUDetectingParts)parts { + @autoreleasepool { + BOOL detectingResult = YES; + switch (parts) { + case FUDetectingPartsFace: + detectingResult = [FURenderKitManager faceTracked]; + break; + case FUDetectingPartsHuman: + detectingResult = [FURenderKitManager humanTracked]; + break; + case FUDetectingPartsHand: + detectingResult = [FURenderKitManager handTracked]; + break; + default: + break; + } + dispatch_async(dispatch_get_main_queue(), ^{ + self.noTrackLabel.hidden = detectingResult; + if (!detectingResult) { + self.noTrackLabel.text = parts == FUDetectingPartsFace ? FULocalizedString(@"未检测到人脸") : (parts == FUDetectingPartsHuman ? FULocalizedString(@"未检测到人体") : FULocalizedString(@"未检测到手势")); + } + }); + } +} + +#pragma mark - Getters + +- (UIButton *)playVideoButton { + if (!_playVideoButton) { + _playVideoButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_playVideoButton setBackgroundImage:[UIImage imageNamed:@"render_play"] forState:UIControlStateNormal]; + [_playVideoButton setBackgroundImage:[UIImage imageNamed:@"render_replay"] forState:UIControlStateSelected]; + _playVideoButton.hidden = YES; + [_playVideoButton addTarget:self action:@selector(playVideoAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _playVideoButton; +} + +- (UIButton *)downloadButton { + if (!_downloadButton) { + _downloadButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _downloadButton.backgroundColor = [UIColor whiteColor]; + _downloadButton.layer.cornerRadius = 42.5; + [_downloadButton setBackgroundImage:[UIImage imageNamed:@"render_save"] forState:UIControlStateNormal]; + [_downloadButton addTarget:self action:@selector(downloadAction:) forControlEvents:UIControlEventTouchUpInside]; + _downloadButton.hidden = YES; + } + return _downloadButton; +} + +- (UILabel *)noTrackLabel { + if (!_noTrackLabel) { + _noTrackLabel = [[UILabel alloc] init]; + _noTrackLabel.textColor = [UIColor whiteColor]; + _noTrackLabel.font = [UIFont systemFontOfSize:17]; + _noTrackLabel.text = FULocalizedString(@"未检测到人脸"); + _noTrackLabel.hidden = YES; + } + return _noTrackLabel; +} + +- (UILabel *)tipLabel { + if (!_tipLabel) { + _tipLabel = [[UILabel alloc] init]; + _tipLabel.textColor = [UIColor whiteColor]; + _tipLabel.font = [UIFont systemFontOfSize:32]; + _tipLabel.textAlignment = NSTextAlignmentCenter; + _tipLabel.hidden = YES; + } + return _tipLabel; +} + +- (FUGLDisplayView *)renderView { + if (!_renderView) { + _renderView = [[FUGLDisplayView alloc] initWithFrame:self.view.bounds]; + _renderView.contentMode = FUGLDisplayViewContentModeScaleAspectFit; + } + return _renderView; +} + +#pragma mark - Override methods + +- (BOOL)prefersStatusBarHidden { + return !FUDeviceIsiPhoneXStyle(); +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +@end diff --git a/FULiveDemo/Render/ViewModel/FUImageRenderViewModel.h b/FULiveDemo/Render/ViewModel/FUImageRenderViewModel.h new file mode 100644 index 00000000..f514a8d7 --- /dev/null +++ b/FULiveDemo/Render/ViewModel/FUImageRenderViewModel.h @@ -0,0 +1,48 @@ +// +// FUImageRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUImageRenderViewModelDelegate + +- (void)imageRenderDidOutputImageBuffer:(FUImageBuffer)imageBuffer; + +@optional +/// 跟踪状态 +- (void)imageRenderShouldCheckDetectingStatus:(FUDetectingParts)parts; + +@end + +@interface FUImageRenderViewModel : NSObject + +/// 是否渲染,默认为YES +@property (nonatomic, assign, getter=isRendering) BOOL rendering; +/// 需要跟踪的部位,默认为FUDetectingPartsFace +@property (nonatomic, assign) FUDetectingParts detectingParts; + +/// 需要加载的AI模型,默认为FUAIModelTypeFace +@property (nonatomic, assign, readonly) FUAIModelType necessaryAIModelTypes; + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, copy, nullable) void (^captureImageHandler)(UIImage *image); + +- (instancetype)initWithImage:(UIImage *)image; + +- (void)start; + +- (void)stop; + +//- (UIImage *)captureImage; +// +//- (void)captureImageWithCompletion:(void (^)(UIImage *image))completionHandler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/ViewModel/FUImageRenderViewModel.m b/FULiveDemo/Render/ViewModel/FUImageRenderViewModel.m new file mode 100644 index 00000000..f1c34c03 --- /dev/null +++ b/FULiveDemo/Render/ViewModel/FUImageRenderViewModel.m @@ -0,0 +1,135 @@ +// +// FUImageRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import "FUImageRenderViewModel.h" + +@interface FUImageRenderViewModel () + +@property (nonatomic, strong) CADisplayLink *displayLink; + +@property (nonatomic, strong) NSOperationQueue *renderOperationQueue; + +@property (nonatomic, strong) UIImage *renderImage; + +@end + +@implementation FUImageRenderViewModel { + FUImageBuffer currentImageBuffer; +} + +#pragma mark - Initializer + +- (instancetype)initWithImage:(UIImage *)image { + self = [super init]; + if (self) { + self.rendering = YES; + self.detectingParts = FUDetectingPartsFace; + if (self.necessaryAIModelTypes & FUAIModelTypeFace) { + [FURenderKitManager setFaceProcessorDetectMode:FUFaceProcessorDetectModeImage]; + } + if (self.necessaryAIModelTypes & FUAIModelTypeHuman) { + [FURenderKitManager setHumanProcessorDetectMode:FUHumanProcessorDetectModeVideo]; + } + self.renderImage = [UIImage imageWithData:UIImageJPEGRepresentation(image, 1)]; + } + return self; +} + +- (void)dealloc { + if (¤tImageBuffer != NULL) { + [UIImage freeImageBuffer:¤tImageBuffer]; + } +} + +#pragma mark - Instance methods + +- (void)start { + [FURenderKitManager resetTrackedResult]; + if (!_displayLink) { + self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkAction)]; + [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + self.displayLink.frameInterval = 10; + } + self.displayLink.paused = NO; +} + +- (void)stop { + self.displayLink.paused = YES; + [self.displayLink invalidate]; + self.displayLink = nil; + [self.renderOperationQueue cancelAllOperations]; +} + +#pragma mark - Event response + +- (void)displayLinkAction { + [self.renderOperationQueue addOperationWithBlock:^{ + [FURenderKitManager updateBeautyBlurEffect]; + @autoreleasepool { + self->currentImageBuffer = [self.renderImage getImageBuffer]; + if (self.isRendering) { + FURenderInput *input = [[FURenderInput alloc] init]; + switch (self.renderImage.imageOrientation) { + case UIImageOrientationUp: + case UIImageOrientationUpMirrored: + input.renderConfig.imageOrientation = FUImageOrientationUP; + break; + case UIImageOrientationLeft: + case UIImageOrientationLeftMirrored: + input.renderConfig.imageOrientation = FUImageOrientationRight; + break; + case UIImageOrientationDown: + case UIImageOrientationDownMirrored: + input.renderConfig.imageOrientation = FUImageOrientationDown; + break; + case UIImageOrientationRight: + case UIImageOrientationRightMirrored: + input.renderConfig.imageOrientation = FUImageOrientationLeft; + break; + } + input.imageBuffer = self->currentImageBuffer; + FURenderOutput *output = [[FURenderKit shareRenderKit] renderWithInput:input]; + self->currentImageBuffer = output.imageBuffer; + } + if (self.captureImageHandler) { + UIImage *captureImage = [UIImage imageWithRGBAImageBuffer:&self->currentImageBuffer autoFreeBuffer:NO]; + self.captureImageHandler(captureImage); + self.captureImageHandler = nil; + } + if (self.delegate && [self.delegate respondsToSelector:@selector(imageRenderDidOutputImageBuffer:)]) { + [self.delegate imageRenderDidOutputImageBuffer:self->currentImageBuffer]; + } + // 释放内存 + [UIImage freeImageBuffer:&self->currentImageBuffer]; + } + + if (self.detectingParts != FUDetectingPartsNone) { + // 需要检查人脸/人体/手势检测状态 + if (self.delegate && [self.delegate respondsToSelector:@selector(imageRenderShouldCheckDetectingStatus:)]) { + [self.delegate imageRenderShouldCheckDetectingStatus:self.detectingParts]; + } + } + }]; +} + +#pragma mark - Getters + +- (NSOperationQueue *)renderOperationQueue { + if (!_renderOperationQueue) { + _renderOperationQueue = [[NSOperationQueue alloc] init]; + _renderOperationQueue.maxConcurrentOperationCount = 1; + } + return _renderOperationQueue; +} + +#pragma mark - Overriding attributes + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace; +} + +@end diff --git a/FULiveDemo/Render/ViewModel/FURenderViewModel.h b/FULiveDemo/Render/ViewModel/FURenderViewModel.h new file mode 100644 index 00000000..21d11cc0 --- /dev/null +++ b/FULiveDemo/Render/ViewModel/FURenderViewModel.h @@ -0,0 +1,108 @@ +// +// FURenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/7/15. +// Copyright © 2022 FaceUnity. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FURenderViewModelDelegate + +@optional +- (void)renderWillInputPixelBuffer:(CVPixelBufferRef)pixelBuffer; + +- (void)renderDidOutputDebugInformations:(NSString *)informations; +/// 跟踪状态 +- (void)renderShouldCheckDetectingStatus:(FUDetectingParts)parts; + +@end + +@interface FURenderViewModel : NSObject + +/// 是否渲染,默认为YES +@property (nonatomic, assign, getter=isRendering) BOOL rendering; +/// 最大支持人脸数量,默认为4 +@property (nonatomic, assign) NSInteger maxFaceNumber; +/// 最大支持人体数量,默认为4 +@property (nonatomic, assign) NSInteger maxHumanNumber; +/// 需要跟踪的部位,默认为FUDetectingPartsFace +@property (nonatomic, assign) FUDetectingParts detectingParts; + +/// 模块 +@property (nonatomic, assign, readonly) FUModule module; +/// 需要加载的AI模型,默认为FUAIModelTypeFace +@property (nonatomic, assign, readonly) FUAIModelType necessaryAIModelTypes; +/// 是否支持拍照和视频录制,默认YES +@property (nonatomic, assign, readonly) BOOL supportCaptureAndRecording; +/// 是否支持图片或者视频渲染,默认为NO +@property (nonatomic, assign, readonly) BOOL supportMediaRendering; +/// 是否支持分辨率选择,默认为NO +@property (nonatomic, assign, readonly) BOOL supportPresetSelection; +/// 是否支持切换相机输出格式,默认为YES +@property (nonatomic, assign, readonly) BOOL supportSwitchingOutputFormat; +/// 相机分辨率 +@property (nonatomic, copy, readonly) AVCaptureSessionPreset capturePreset; +/// 相机前后置摄像头 +@property (nonatomic, assign, readonly) AVCaptureDevicePosition captureDevicePostion; +/// 支持的分辨率 +@property (nonatomic, copy, readonly) NSArray *presets; +/// 显示的分辨率数组 +@property (nonatomic, copy, readonly) NSArray *presetTitles; +/// 是否支持10秒视频录制,默认为YES +@property (nonatomic, assign, readonly) BOOL supportVideoRecording; +/// 是否需要加载美颜,默认为YES +@property (nonatomic, assign, readonly) BOOL needsLoadingBeauty; +/// 人脸是否完整(临时处理海报换脸问题) +@property (nonatomic, assign, readonly) BOOL trackedCompleteFace; +/// 输入buffer宽度 +@property (nonatomic, assign, readonly) CGFloat inputBufferWidth; +/// 输入buffer高度 +@property (nonatomic, assign, readonly) CGFloat inputBufferHeight; + +@property (nonatomic, weak) id delegate; + +/// 开始相机采集渲染 +/// @param renderView GLView +- (void)startCameraWithRenderView:(FUGLDisplayView *)renderView; + +/// 停止相机 +- (void)stopCamera; + +/// 切换相机输出格式 +- (void)switchCameraOutputFormat; + +/// 切换相机分辨率 +/// @param preset 分辨率 +/// @param handler 硬件不支持分辨率回调 +- (void)switchCapturePreset:(AVCaptureSessionPreset)preset unsupportedPresetHandler:(nullable void (^)(void))handler; + +/// 切换相机前后置摄像头 +/// @param front 是否前置 +/// @param handler 硬件不支持当前分辨率回调 +- (void)switchCameraBetweenFrontAndRear:(BOOL)front unsupportedPresetHandler:(nullable void (^)(void))handler; + +/// 切换相机对焦模式 +/// @param mode 对焦模式 +- (void)switchCameraFocusMode:(FUCaptureCameraFocusMode)mode; + +/// 相机对焦 +/// @param point 对焦点 +- (void)setCameraFocusPoint:(CGPoint)point; + +/// 设置相机曝光度 +/// @param value 曝光度 +- (void)setCameraExposureValue:(CGFloat)value; + +/// 恢复相机对焦和曝光模式 +- (void)resetCameraFocusAndExposureMode; + +/// 相机恢复默认设置 +- (void)resetCameraSettings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/ViewModel/FURenderViewModel.m b/FULiveDemo/Render/ViewModel/FURenderViewModel.m new file mode 100644 index 00000000..24eb10ab --- /dev/null +++ b/FULiveDemo/Render/ViewModel/FURenderViewModel.m @@ -0,0 +1,312 @@ +// +// FURenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/7/15. +// Copyright © 2022 FaceUnity. All rights reserved. +// + +#import "FURenderViewModel.h" + +@interface FURenderViewModel () + +/// 缓存渲染线程的人脸中心点 +@property (nonatomic, assign) CGPoint faceCenter; +@property (nonatomic, assign) BOOL trackedCompleteFace; +@property (nonatomic, assign) CGFloat inputBufferWidth; +@property (nonatomic, assign) CGFloat inputBufferHeight; + +@end + +@implementation FURenderViewModel { + // 计算帧率相关变量 + CFAbsoluteTime startTime, lastCalculateTime; + int rate; + NSTimeInterval currentCalculateTime; +} + +- (instancetype)init { + self = [super init]; + if (self) { + self.rendering = YES; + self.maxFaceNumber = 4; + self.maxHumanNumber = 4; + self.detectingParts = FUDetectingPartsFace; + + [FURenderKit shareRenderKit].delegate = self; + [FURenderKit shareRenderKit].captureCamera.dataSource = self; + + if (self.necessaryAIModelTypes & FUAIModelTypeFace) { + // 加载人脸AI模型 + [FURenderKitManager loadFaceAIModel]; + // 开启人脸离开延迟 + // [FUAIKit setFaceDelayLeaveEnable:YES]; + } + if (self.necessaryAIModelTypes & FUAIModelTypeHuman) { + // 加载人体AI模型 + [FURenderKitManager loadHumanAIModel]; + } + if (self.necessaryAIModelTypes & FUAIModelTypeHand) { + // 加载手势AI模型 + [FURenderKitManager loadHandAIModel]; + // 设置未跟踪到手势时每次检测的间隔帧数为3 + [FUAIKit setHandDetectEveryFramesWhenNoHand:3]; + } + // 设置设备性能相关细项 + [[FURenderKitManager sharedManager] setDevicePerformanceDetails]; + } + return self; +} + +#pragma mark - Instance methods + +- (void)startCameraWithRenderView:(FUGLDisplayView *)renderView { + // 需要音频轨道 + [FURenderKit shareRenderKit].internalCameraSetting.needsAudioTrack = YES; + [[FURenderKit shareRenderKit] startInternalCamera]; + [FURenderKit shareRenderKit].glDisplayView = renderView; +} + +- (void)stopCamera { + [[FURenderKit shareRenderKit] stopInternalCamera]; + [FURenderKit shareRenderKit].glDisplayView = nil; +} + +- (void)switchCameraOutputFormat { + OSType format = [FURenderKit shareRenderKit].internalCameraSetting.format == kCVPixelFormatType_32BGRA ? kCVPixelFormatType_420YpCbCr8BiPlanarFullRange : kCVPixelFormatType_32BGRA; + [FURenderKit shareRenderKit].internalCameraSetting.format = format; +} + +- (void)switchCapturePreset:(AVCaptureSessionPreset)preset unsupportedPresetHandler:(void (^)(void))handler { + if (![FURenderKit shareRenderKit].captureCamera) { + return; + } + FUCaptureCamera *camera = [FURenderKit shareRenderKit].captureCamera; + if ([camera changeSessionPreset:preset]) { + [FURenderKit shareRenderKit].internalCameraSetting.sessionPreset = preset; + } else { + // 硬件不支持该分辨率 + if (handler) { + handler(); + } + } +} + +- (void)switchCameraBetweenFrontAndRear:(BOOL)front unsupportedPresetHandler:(void (^)(void))handler { + if (![FURenderKit shareRenderKit].captureCamera) { + return; + } + FUCaptureCamera *camera = [FURenderKit shareRenderKit].captureCamera; + if (![camera supportsAVCaptureSessionPreset:front]) { + // 硬件不支持分辨率 + if (handler) { + handler(); + } + } + [FURenderKit shareRenderKit].internalCameraSetting.position = front ? AVCaptureDevicePositionFront : AVCaptureDevicePositionBack; +} + +- (void)switchCameraFocusMode:(FUCaptureCameraFocusMode)mode { + if (![FURenderKit shareRenderKit].captureCamera) { + return; + } + [[FURenderKit shareRenderKit].captureCamera cameraChangeMode:mode]; +} + +- (void)setCameraFocusPoint:(CGPoint)point { + if (![FURenderKit shareRenderKit].captureCamera) { + return; + } + [[FURenderKit shareRenderKit].captureCamera focusWithMode:AVCaptureFocusModeAutoFocus exposeWithMode:AVCaptureExposureModeAutoExpose atDevicePoint:point monitorSubjectAreaChange:YES]; +} + +- (void)setCameraExposureValue:(CGFloat)value { + if (![FURenderKit shareRenderKit].captureCamera) { + return; + } + [[FURenderKit shareRenderKit].captureCamera setExposureValue:value]; +} + +- (void)resetCameraFocusAndExposureMode { + if (![FURenderKit shareRenderKit].captureCamera) { + return; + } + [[FURenderKit shareRenderKit].captureCamera resetFocusAndExposureModes]; +} + +- (void)resetCameraSettings { + [FURenderKit shareRenderKit].internalCameraSetting.sessionPreset = AVCaptureSessionPreset1280x720; + [FURenderKit shareRenderKit].internalCameraSetting.position = AVCaptureDevicePositionFront; + [FURenderKit shareRenderKit].internalCameraSetting.format = kCVPixelFormatType_32BGRA; +} + +#pragma mark - Private methods + +- (void)updateFaceCenterPoint { + CGPoint center = CGPointMake(0.5, 0.5); + if ([FURenderKitManager faceTracked] && [FURenderKit shareRenderKit].captureCamera) { + center = [self trackedFaceCenter]; + if ([FURenderKit shareRenderKit].captureCamera.isFrontCamera) { + center = CGPointMake(center.y, center.x); + } else { + center = CGPointMake(center.y, 1 - center.x); + } + } + self.faceCenter = center; +} + +- (CGPoint)trackedFaceCenter { + // 获取人脸信息 + float rect[4]; + [FUAIKit getFaceInfo:0 name:@"face_rect" pret:rect number:4]; + CGFloat minX = rect[0]; + CGFloat minY = rect[1]; + CGFloat maxX = rect[2]; + CGFloat maxY = rect[3]; + // 判断人脸是否完整 + if (minX < 0 || minY < 0 || maxX > self.inputBufferWidth || maxY > self.inputBufferHeight) { + self.trackedCompleteFace = NO; + } else { + self.trackedCompleteFace = YES; + } + // 计算中心点的坐标 + CGFloat centerX = (minX + maxX) * 0.5; + CGFloat centerY = (minY + maxY) * 0.5; + // 转换坐标 + centerX = centerX / self.inputBufferWidth; + centerY = centerY / self.inputBufferHeight; + return CGPointMake(centerX, centerY); +} + +#pragma mark - FURenderKitDelegate + +- (BOOL)renderKitShouldDoRender { + return self.rendering; +} + +- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput { + if (renderInput.pixelBuffer != NULL) { + self.inputBufferWidth = CVPixelBufferGetWidth(renderInput.pixelBuffer); + self.inputBufferHeight = CVPixelBufferGetHeight(renderInput.pixelBuffer); + } + [FURenderKitManager updateBeautyBlurEffect]; + if (self.delegate && [self.delegate respondsToSelector:@selector(renderWillInputPixelBuffer:)]) { + [self.delegate renderWillInputPixelBuffer:renderInput.pixelBuffer]; + } + startTime = CFAbsoluteTimeGetCurrent(); +} + +- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput { + CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent(); + // 加一帧占用时间 + currentCalculateTime += (endTime - startTime); + // 加帧数 + rate += 1; + if (endTime - lastCalculateTime >= 1) { + // 一秒钟计算一次 + int width = (int)CVPixelBufferGetWidth(renderOutput.pixelBuffer); + int height = (int)CVPixelBufferGetHeight(renderOutput.pixelBuffer); + NSString *debugString = [NSString stringWithFormat:@"resolution:\n%dx%d\nfps: %d\nrender time:\n%.0fms", width, height, rate, currentCalculateTime * 1000 / rate]; + if (self.delegate && [self.delegate respondsToSelector:@selector(renderDidOutputDebugInformations:)]) { + [self.delegate renderDidOutputDebugInformations:debugString]; + } + // 恢复计算数据 + lastCalculateTime = endTime; + currentCalculateTime = 0; + rate = 0; + } + + // 更新人脸中心点 + [self updateFaceCenterPoint]; + + if (self.detectingParts != FUDetectingPartsNone) { + // 需要检查人脸/人体/手势检测状态 + if (self.delegate && [self.delegate respondsToSelector:@selector(renderShouldCheckDetectingStatus:)]) { + [self.delegate renderShouldCheckDetectingStatus:self.detectingParts]; + } + } +} + +#pragma mark - FUCaptureCameraDataSource + +- (CGPoint)fuCaptureFaceCenterInImage:(FUCaptureCamera *)camera { + return self.faceCenter; +} + +#pragma mark - Setters + +- (void)setMaxFaceNumber:(NSInteger)maxFaceNumber { + if (_maxFaceNumber == maxFaceNumber) { + return; + } + _maxFaceNumber = maxFaceNumber; + [FURenderKitManager setMaxFaceNumber:maxFaceNumber]; +} + +- (void)setMaxHumanNumber:(NSInteger)maxHumanNumber { + if (_maxHumanNumber == maxHumanNumber) { + return; + } + _maxHumanNumber = maxHumanNumber; + [FURenderKitManager setMaxHumanNumber:maxHumanNumber]; +} + +#pragma mark - Overriding attributes + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace; +} + +- (BOOL)supportCaptureAndRecording { + return YES; +} + +- (BOOL)supportMediaRendering { + return NO; +} + +- (BOOL)supportPresetSelection { + return NO; +} + +- (BOOL)supportSwitchingOutputFormat { + return YES; +} + +- (BOOL)supportVideoRecording { + return YES; +} + +- (NSArray *)presets { + return @[AVCaptureSessionPreset640x480, AVCaptureSessionPreset1280x720, AVCaptureSessionPreset1920x1080]; +} + +- (NSArray *)presetTitles { + NSMutableArray *titles = [[NSMutableArray alloc] init]; + for (AVCaptureSessionPreset preset in self.presets) { + if (preset == AVCaptureSessionPreset640x480) { + [titles addObject:@"480x640"]; + } else if (preset == AVCaptureSessionPreset1280x720) { + [titles addObject:@"720x1280"]; + } else if (preset == AVCaptureSessionPreset1920x1080) { + [titles addObject:@"1080x1920"]; + } + } + return [titles copy]; +} + +- (BOOL)needsLoadingBeauty { + return YES; +} + +#pragma mark - Getters + +- (AVCaptureSessionPreset)capturePreset { + return [FURenderKit shareRenderKit].internalCameraSetting.sessionPreset; +} + +- (AVCaptureDevicePosition)captureDevicePostion { + return [FURenderKit shareRenderKit].internalCameraSetting.position; +} + +@end diff --git a/FULiveDemo/Render/ViewModel/FUVideoRenderViewModel.h b/FULiveDemo/Render/ViewModel/FUVideoRenderViewModel.h new file mode 100644 index 00000000..63faadb7 --- /dev/null +++ b/FULiveDemo/Render/ViewModel/FUVideoRenderViewModel.h @@ -0,0 +1,47 @@ +// +// FUVideoRenderViewModel.h +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +#define kFUFinalPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"finalVideo.mp4"] + +@protocol FUVideoRenderViewModelDelegate + +- (void)videoRenderDidOutputPixelBuffer:(CVPixelBufferRef)pixelBuffer; + +- (void)videoRenderDidFinishProcessing; +@optional +- (void)videoRenderShouldCheckDetectingStatus:(FUDetectingParts)parts; + +@end + +@interface FUVideoRenderViewModel : NSObject + +/// 是否渲染,默认为YES +@property (nonatomic, assign, getter=isRendering) BOOL rendering; +/// 需要跟踪的部位,默认为FUDetectingPartsFace +@property (nonatomic, assign) FUDetectingParts detectingParts; + +/// 需要加载的AI模型,默认为FUAIModelTypeFace +@property (nonatomic, assign, readonly) FUAIModelType necessaryAIModelTypes; +/// 视频方向,默认为FUVideoOrientationPortrait +/// @discussion 开始视频解码后自动获取解码器的视频方向 +@property (nonatomic, assign, readonly) FUVideoOrientation videoOrientation; + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithVideoURL:(NSURL *)videoURL; + +- (void)start; + +- (void)stop; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FULiveDemo/Render/ViewModel/FUVideoRenderViewModel.m b/FULiveDemo/Render/ViewModel/FUVideoRenderViewModel.m new file mode 100644 index 00000000..1685196b --- /dev/null +++ b/FULiveDemo/Render/ViewModel/FUVideoRenderViewModel.m @@ -0,0 +1,174 @@ +// +// FUVideoRenderViewModel.m +// FULiveDemo +// +// Created by 项林平 on 2022/8/9. +// + +#import "FUVideoRenderViewModel.h" + +@interface FUVideoRenderViewModel () + +@property (nonatomic, assign) FUVideoOrientation videoOrientation; + +@property (nonatomic, strong) NSURL *videoURL; + +@property (nonatomic, strong) FUVideoProcessor *videoProcessor; + +@property (nonatomic, strong) AVPlayer *audioReader; + +@property (nonatomic, assign) BOOL isPreviewing; + +@property (nonatomic, strong) NSOperationQueue *previewQueue; + +@end + +@implementation FUVideoRenderViewModel { + // 缓存的预览帧 + CVPixelBufferRef previewBuffer; +} + +#pragma mark - Initializer + +- (instancetype)initWithVideoURL:(NSURL *)videoURL { + self = [super init]; + if (self) { + self.rendering = YES; + self.detectingParts = FUDetectingPartsFace; + + if (self.necessaryAIModelTypes & FUAIModelTypeFace) { + [FURenderKitManager setFaceProcessorDetectMode:FUFaceProcessorDetectModeVideo]; + } + if (self.necessaryAIModelTypes & FUAIModelTypeHuman) { + [FURenderKitManager setHumanProcessorDetectMode:FUHumanProcessorDetectModeVideo]; + } + self.videoURL = videoURL; + self.previewQueue = [[NSOperationQueue alloc] init]; + self.previewQueue.maxConcurrentOperationCount = 1; + } + return self; +} + +- (void)dealloc { + if (previewBuffer != NULL) { + CVPixelBufferRelease(previewBuffer); + previewBuffer = NULL; + } +} + +#pragma mark - Instance methods + +- (void)start { + [self stopPreviewing]; + if (self.videoProcessor) { + [self.videoProcessor cancelProcessing]; + self.videoProcessor = nil; + } + self.videoProcessor = [[FUVideoProcessor alloc] initWithReadingURL:self.videoURL writingURL:[NSURL fileURLWithPath:kFUFinalPath]]; + @FUWeakify(self) + self.videoProcessor.processingVideoBufferHandler = ^CVPixelBufferRef _Nonnull(CVPixelBufferRef _Nonnull videoPixelBuffer, CGFloat time) { + @FUStrongify(self) + videoPixelBuffer = [self renderVideoPixelBuffer:videoPixelBuffer]; + return videoPixelBuffer; + }; + + self.videoProcessor.processingFinishedHandler = ^{ + @FUStrongify(self) + if (self.delegate && [self.delegate respondsToSelector:@selector(videoRenderDidFinishProcessing)]) { + [self.delegate videoRenderDidFinishProcessing]; + } + [self startPreviewing]; + }; + + [self.videoProcessor startProcessing]; + self.videoOrientation = self.videoProcessor.reader.videoOrientation; + + // 播放音频 + self.audioReader = [AVPlayer playerWithURL:self.videoURL]; + self.audioReader.actionAtItemEnd = AVPlayerActionAtItemEndNone; + [self.audioReader play]; +} + +- (void)stop { + if (self.isPreviewing) { + self.isPreviewing = NO; + } + [self.videoProcessor cancelProcessing]; + self.videoProcessor = nil; + [self.audioReader pause]; + self.audioReader = nil; +} + +#pragma mark - Private methods + +- (void)startPreviewing { + // 获取最后视频帧,需要循环render预览 + self.isPreviewing = YES; + UIImage *lastImage = [FUUtility lastFrameImageFromVideoURL:self.videoURL preferredTrackTransform:NO]; + previewBuffer = [FUImageHelper pixelBufferFromImage:lastImage]; + [self.previewQueue addOperationWithBlock:^{ + while (self.isPreviewing && self->previewBuffer != NULL) { + CVPixelBufferRetain(self->previewBuffer); + [self renderVideoPixelBuffer:self->previewBuffer]; + CVPixelBufferRelease(self->previewBuffer); + // 设置render时间间隔 + usleep(1000000*0.033); + } + }]; +} + +- (void)stopPreviewing { + if (self.isPreviewing) { + self.isPreviewing = NO; + [self.previewQueue cancelAllOperations]; + } + if (previewBuffer != NULL) { + CVPixelBufferRelease(previewBuffer); + previewBuffer = NULL; + } +} + +- (CVPixelBufferRef)renderVideoPixelBuffer:(CVPixelBufferRef)videoPixelBuffer { + @autoreleasepool { + if (self.isRendering) { + FURenderInput *input = [[FURenderInput alloc] init]; + input.pixelBuffer = videoPixelBuffer; + input.renderConfig.imageOrientation = FUImageOrientationUP; + switch (self.videoProcessor.reader.videoOrientation) { + case FUVideoOrientationPortrait: + input.renderConfig.imageOrientation = FUImageOrientationUP; + break; + case FUVideoOrientationLandscapeRight: + input.renderConfig.imageOrientation = FUImageOrientationLeft; + break; + case FUVideoOrientationUpsideDown: + input.renderConfig.imageOrientation = FUImageOrientationDown; + break; + case FUVideoOrientationLandscapeLeft: + input.renderConfig.imageOrientation = FUImageOrientationRight; + break; + } + FURenderOutput *output = [[FURenderKit shareRenderKit] renderWithInput:input]; + videoPixelBuffer = output.pixelBuffer; + } + if (self.delegate && [self.delegate respondsToSelector:@selector(videoRenderDidOutputPixelBuffer:)]) { + [self.delegate videoRenderDidOutputPixelBuffer:videoPixelBuffer]; + } + if (self.detectingParts != FUDetectingPartsNone) { + // 需要检查人脸/人体/手势检测状态 + if (self.delegate && [self.delegate respondsToSelector:@selector(videoRenderShouldCheckDetectingStatus:)]) { + [self.delegate videoRenderShouldCheckDetectingStatus:self.detectingParts]; + } + } + } + return videoPixelBuffer; +} + + +#pragma mark - Overriding + +- (FUAIModelType)necessaryAIModelTypes { + return FUAIModelTypeFace; +} + +@end diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/baozi.bundle" b/FULiveDemo/Resource/ARMask/baozi.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/baozi.bundle" rename to FULiveDemo/Resource/ARMask/baozi.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/bluebird.bundle" b/FULiveDemo/Resource/ARMask/bluebird.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/bluebird.bundle" rename to FULiveDemo/Resource/ARMask/bluebird.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/fenhudie.bundle" b/FULiveDemo/Resource/ARMask/fenhudie.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/fenhudie.bundle" rename to FULiveDemo/Resource/ARMask/fenhudie.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/lanhudie.bundle" b/FULiveDemo/Resource/ARMask/lanhudie.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/lanhudie.bundle" rename to FULiveDemo/Resource/ARMask/lanhudie.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger.bundle" b/FULiveDemo/Resource/ARMask/tiger.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger.bundle" rename to FULiveDemo/Resource/ARMask/tiger.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_bai.bundle" b/FULiveDemo/Resource/ARMask/tiger_bai.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_bai.bundle" rename to FULiveDemo/Resource/ARMask/tiger_bai.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_huang.bundle" b/FULiveDemo/Resource/ARMask/tiger_huang.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/tiger_huang.bundle" rename to FULiveDemo/Resource/ARMask/tiger_huang.bundle diff --git "a/FULiveDemo/Resource/items/AR\351\235\242\345\205\267/xiongmao.bundle" b/FULiveDemo/Resource/ARMask/xiongmao.bundle similarity index 100% rename from "FULiveDemo/Resource/items/AR\351\235\242\345\205\267/xiongmao.bundle" rename to FULiveDemo/Resource/ARMask/xiongmao.bundle diff --git a/FULiveDemo/Resource/items/Animoji/baihu_Animoji.bundle b/FULiveDemo/Resource/Animoji/baihu_Animoji.bundle similarity index 100% rename from FULiveDemo/Resource/items/Animoji/baihu_Animoji.bundle rename to FULiveDemo/Resource/Animoji/baihu_Animoji.bundle diff --git a/FULiveDemo/Resource/Animoji/baimao_Animoji.bundle b/FULiveDemo/Resource/Animoji/baimao_Animoji.bundle new file mode 100644 index 00000000..8842179f Binary files /dev/null and b/FULiveDemo/Resource/Animoji/baimao_Animoji.bundle differ diff --git a/FULiveDemo/Resource/items/Animoji/cartoon_princess_Animoji.bundle b/FULiveDemo/Resource/Animoji/cartoon_princess_Animoji.bundle similarity index 100% rename from FULiveDemo/Resource/items/Animoji/cartoon_princess_Animoji.bundle rename to FULiveDemo/Resource/Animoji/cartoon_princess_Animoji.bundle diff --git a/FULiveDemo/Resource/Animoji/comic_filter.json b/FULiveDemo/Resource/Animoji/comic_filter.json new file mode 100644 index 00000000..182b1df3 --- /dev/null +++ b/FULiveDemo/Resource/Animoji/comic_filter.json @@ -0,0 +1,38 @@ +[ + { + "style":-1, + "icon":"reset_item" + }, + { + "style":0, + "icon":"fuzzytoonfilter1" + }, + { + "style":2, + "icon":"fuzzytoonfilter2" + }, + { + "style":1, + "icon":"fuzzytoonfilter3" + }, + { + "style":3, + "icon":"fuzzytoonfilter4" + }, + { + "style":4, + "icon":"fuzzytoonfilter5" + }, + { + "style":5, + "icon":"fuzzytoonfilter6" + }, + { + "style":6, + "icon":"fuzzytoonfilter7" + }, + { + "style":7, + "icon":"fuzzytoonfilter8" + } +] diff --git a/FULiveDemo/Resource/Animoji/douniuquan_Animoji.bundle b/FULiveDemo/Resource/Animoji/douniuquan_Animoji.bundle new file mode 100644 index 00000000..b21caeb3 Binary files /dev/null and b/FULiveDemo/Resource/Animoji/douniuquan_Animoji.bundle differ diff --git a/FULiveDemo/Resource/items/Animoji/frog_Animoji.bundle b/FULiveDemo/Resource/Animoji/frog_Animoji.bundle similarity index 100% rename from FULiveDemo/Resource/items/Animoji/frog_Animoji.bundle rename to FULiveDemo/Resource/Animoji/frog_Animoji.bundle diff --git a/FULiveDemo/Resource/Animoji/hashiqi_Animoji.bundle b/FULiveDemo/Resource/Animoji/hashiqi_Animoji.bundle new file mode 100644 index 00000000..ddec306d Binary files /dev/null and b/FULiveDemo/Resource/Animoji/hashiqi_Animoji.bundle differ diff --git a/FULiveDemo/Resource/Animoji/hetun_Animoji.bundle b/FULiveDemo/Resource/Animoji/hetun_Animoji.bundle new file mode 100644 index 00000000..dc33c7a7 Binary files /dev/null and b/FULiveDemo/Resource/Animoji/hetun_Animoji.bundle differ diff --git a/FULiveDemo/Resource/Animoji/huangya_Animoji.bundle b/FULiveDemo/Resource/Animoji/huangya_Animoji.bundle new file mode 100644 index 00000000..33b9ae23 Binary files /dev/null and b/FULiveDemo/Resource/Animoji/huangya_Animoji.bundle differ diff --git a/FULiveDemo/Resource/items/Animoji/kaola_Animoji.bundle b/FULiveDemo/Resource/Animoji/kaola_Animoji.bundle similarity index 100% rename from FULiveDemo/Resource/items/Animoji/kaola_Animoji.bundle rename to FULiveDemo/Resource/Animoji/kaola_Animoji.bundle diff --git a/FULiveDemo/Resource/items/Animoji/kuloutou_Animoji.bundle b/FULiveDemo/Resource/Animoji/kuloutou_Animoji.bundle similarity index 100% rename from FULiveDemo/Resource/items/Animoji/kuloutou_Animoji.bundle rename to FULiveDemo/Resource/Animoji/kuloutou_Animoji.bundle diff --git a/FULiveDemo/Resource/Animoji/qgirl_Animoji.bundle b/FULiveDemo/Resource/Animoji/qgirl_Animoji.bundle new file mode 100644 index 00000000..ef7997b0 Binary files /dev/null and b/FULiveDemo/Resource/Animoji/qgirl_Animoji.bundle differ diff --git a/FULiveDemo/Resource/items/Animoji/wuxia_Animoji.bundle b/FULiveDemo/Resource/Animoji/wuxia_Animoji.bundle similarity index 100% rename from FULiveDemo/Resource/items/Animoji/wuxia_Animoji.bundle rename to FULiveDemo/Resource/Animoji/wuxia_Animoji.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/facemakeup_3.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/facemakeup_3.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/facemakeup_3.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/facemakeup_3.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/female_hair_23.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/female_hair_23.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/female_hair_23.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/female_hair_23.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/headnv.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/headnv.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/headnv.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/headnv.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/midBody_female.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/midBody_female.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/midBody_female.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/midBody_female.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/taozhuang_12.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/taozhuang_12.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/taozhuang_12.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/taozhuang_12.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/toushi_5.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/toushi_5.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/toushi_5.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/toushi_5.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/xiezi_danxie.bundle" b/FULiveDemo/Resource/BodyAvatar/Female/xiezi_danxie.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/xiezi_danxie.bundle" rename to FULiveDemo/Resource/BodyAvatar/Female/xiezi_danxie.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/headnan.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/headnan.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/headnan.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/headnan.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/kuzi_changku_5.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/kuzi_changku_5.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/kuzi_changku_5.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/kuzi_changku_5.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/male_hair_5.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/male_hair_5.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/male_hair_5.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/male_hair_5.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/midBody_male.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/midBody_male.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/midBody_male.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/midBody_male.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/peishi_erding_2.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/peishi_erding_2.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/peishi_erding_2.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/peishi_erding_2.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/toushi_7.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/toushi_7.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/toushi_7.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/toushi_7.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/waitao_3.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/waitao_3.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/waitao_3.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/waitao_3.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/xiezi_tuoxie_2.bundle" b/FULiveDemo/Resource/BodyAvatar/Male/xiezi_tuoxie_2.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/xiezi_tuoxie_2.bundle" rename to FULiveDemo/Resource/BodyAvatar/Male/xiezi_tuoxie_2.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/anim_idle.bundle" b/FULiveDemo/Resource/BodyAvatar/anim_idle.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/anim_idle.bundle" rename to FULiveDemo/Resource/BodyAvatar/anim_idle.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/controller_config.bundle" b/FULiveDemo/Resource/BodyAvatar/controller_config.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/controller_config.bundle" rename to FULiveDemo/Resource/BodyAvatar/controller_config.bundle diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/default_bg.bundle" b/FULiveDemo/Resource/BodyAvatar/default_bg.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/default_bg.bundle" rename to FULiveDemo/Resource/BodyAvatar/default_bg.bundle diff --git a/FULiveDemo/Resource/BodyBeauty/body_beauty.json b/FULiveDemo/Resource/BodyBeauty/body_beauty.json new file mode 100644 index 00000000..1a785d00 --- /dev/null +++ b/FULiveDemo/Resource/BodyBeauty/body_beauty.json @@ -0,0 +1,45 @@ +[ + { + "name":"瘦身", + "parts":0, + "defaultValue":0, + "currentValue":0 + }, + { + "name":"长腿", + "parts":1, + "defaultValue":0, + "currentValue":0 + }, + { + "name":"细腰", + "parts":2, + "defaultValue":0, + "currentValue":0 + }, + { + "name":"美肩", + "parts":3, + "defaultValue":0.5, + "currentValue":0.5, + "defaultValueInMiddle":true + }, + { + "name":"美臀", + "parts":4, + "defaultValue":0, + "currentValue":0 + }, + { + "name":"小头", + "parts":5, + "defaultValue":0, + "currentValue":0 + }, + { + "name":"瘦腿", + "parts":6, + "defaultValue":0, + "currentValue":0 + } +] diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp2.bundle" b/FULiveDemo/Resource/DistortingMirror/facewarp2.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp2.bundle" rename to FULiveDemo/Resource/DistortingMirror/facewarp2.bundle diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp3.bundle" b/FULiveDemo/Resource/DistortingMirror/facewarp3.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp3.bundle" rename to FULiveDemo/Resource/DistortingMirror/facewarp3.bundle diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp4.bundle" b/FULiveDemo/Resource/DistortingMirror/facewarp4.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp4.bundle" rename to FULiveDemo/Resource/DistortingMirror/facewarp4.bundle diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp5.bundle" b/FULiveDemo/Resource/DistortingMirror/facewarp5.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp5.bundle" rename to FULiveDemo/Resource/DistortingMirror/facewarp5.bundle diff --git "a/FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp6.bundle" b/FULiveDemo/Resource/DistortingMirror/facewarp6.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\223\210\345\223\210\351\225\234/facewarp6.bundle" rename to FULiveDemo/Resource/DistortingMirror/facewarp6.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/future_warrior.bundle" b/FULiveDemo/Resource/ExpressionRecognition/future_warrior.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/future_warrior.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/future_warrior.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/jet_mask.bundle" b/FULiveDemo/Resource/ExpressionRecognition/jet_mask.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/jet_mask.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/jet_mask.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/luhantongkuan_ztt_fu.bundle" b/FULiveDemo/Resource/ExpressionRecognition/luhantongkuan_ztt_fu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/luhantongkuan_ztt_fu.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/luhantongkuan_ztt_fu.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/qingqing_ztt_fu.bundle" b/FULiveDemo/Resource/ExpressionRecognition/qingqing_ztt_fu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/qingqing_ztt_fu.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/qingqing_ztt_fu.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/sdx2.bundle" b/FULiveDemo/Resource/ExpressionRecognition/sdx2.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/sdx2.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/sdx2.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaobianzi_zh_fu.bundle" b/FULiveDemo/Resource/ExpressionRecognition/xiaobianzi_zh_fu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaobianzi_zh_fu.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/xiaobianzi_zh_fu.bundle diff --git "a/FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaoxueshen_ztt_fu.bundle" b/FULiveDemo/Resource/ExpressionRecognition/xiaoxueshen_ztt_fu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\350\241\250\346\203\205\350\257\206\345\210\253/xiaoxueshen_ztt_fu.bundle" rename to FULiveDemo/Resource/ExpressionRecognition/xiaoxueshen_ztt_fu.bundle diff --git "a/FULiveDemo/Resource/items/\346\265\267\346\212\245\346\215\242\350\204\270/change_face.bundle" b/FULiveDemo/Resource/FaceFusion/change_face.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\346\265\267\346\212\245\346\215\242\350\204\270/change_face.bundle" rename to FULiveDemo/Resource/FaceFusion/change_face.bundle diff --git a/FULiveDemo/Resource/GestureRecognition/ctrl_flower_740.bundle b/FULiveDemo/Resource/GestureRecognition/ctrl_flower_740.bundle new file mode 100644 index 00000000..6851ee41 Binary files /dev/null and b/FULiveDemo/Resource/GestureRecognition/ctrl_flower_740.bundle differ diff --git a/FULiveDemo/Resource/GestureRecognition/ctrl_rain_740.bundle b/FULiveDemo/Resource/GestureRecognition/ctrl_rain_740.bundle new file mode 100644 index 00000000..d85a48f1 Binary files /dev/null and b/FULiveDemo/Resource/GestureRecognition/ctrl_rain_740.bundle differ diff --git a/FULiveDemo/Resource/GestureRecognition/ctrl_snow_740.bundle b/FULiveDemo/Resource/GestureRecognition/ctrl_snow_740.bundle new file mode 100644 index 00000000..79cb0a2e Binary files /dev/null and b/FULiveDemo/Resource/GestureRecognition/ctrl_snow_740.bundle differ diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_cute.bundle" b/FULiveDemo/Resource/GestureRecognition/ssd_thread_cute.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_cute.bundle" rename to FULiveDemo/Resource/GestureRecognition/ssd_thread_cute.bundle diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_korheart.bundle" b/FULiveDemo/Resource/GestureRecognition/ssd_thread_korheart.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_korheart.bundle" rename to FULiveDemo/Resource/GestureRecognition/ssd_thread_korheart.bundle diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_six.bundle" b/FULiveDemo/Resource/GestureRecognition/ssd_thread_six.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_six.bundle" rename to FULiveDemo/Resource/GestureRecognition/ssd_thread_six.bundle diff --git a/FULiveDemo/Resource/GreenScreen/green_screen_740.bundle b/FULiveDemo/Resource/GreenScreen/green_screen_740.bundle new file mode 100644 index 00000000..eebcd72c Binary files /dev/null and b/FULiveDemo/Resource/GreenScreen/green_screen_740.bundle differ diff --git a/FULiveDemo/Resource/HairBeauty/hair_beauty.json b/FULiveDemo/Resource/HairBeauty/hair_beauty.json new file mode 100644 index 00000000..2b960816 --- /dev/null +++ b/FULiveDemo/Resource/HairBeauty/hair_beauty.json @@ -0,0 +1,84 @@ +[ + { + "value":0.5, + "icon":"reset_item" + }, + { + "value":0.5, + "icon":"icon_gradualchangehair_01", + "isGradient":true, + "index":0 + }, + { + "value":0.5, + "icon":"icon_gradualchangehair_02", + "isGradient":true, + "index":1 + }, + { + "value":0.5, + "icon":"icon_gradualchangehair_03", + "isGradient":true, + "index":2 + }, + { + "value":0.5, + "icon":"icon_gradualchangehair_04", + "isGradient":true, + "index":3 + }, + { + "value":0.5, + "icon":"icon_gradualchangehair_05", + "isGradient":true, + "index":4 + }, + { + "value":0.5, + "icon":"hair_color_1", + "isGradient":false, + "index":0 + }, + { + "value":0.5, + "icon":"hair_color_2", + "isGradient":false, + "index":1 + }, + { + "value":0.5, + "icon":"hair_color_3", + "isGradient":false, + "index":2 + }, + { + "value":0.5, + "icon":"hair_color_4", + "isGradient":false, + "index":3 + }, + { + "value":0.5, + "icon":"hair_color_5", + "isGradient":false, + "index":4 + }, + { + "value":0.5, + "icon":"hair_color_6", + "isGradient":false, + "index":5 + }, + { + "value":0.5, + "icon":"hair_color_7", + "isGradient":false, + "index":6 + }, + { + "value":0.5, + "icon":"hair_color_8", + "isGradient":false, + "index":7 + } +] diff --git a/FULiveDemo/Resource/HairBeauty/hair_gradient.bundle b/FULiveDemo/Resource/HairBeauty/hair_gradient.bundle new file mode 100644 index 00000000..3d71a0e7 Binary files /dev/null and b/FULiveDemo/Resource/HairBeauty/hair_gradient.bundle differ diff --git a/FULiveDemo/Resource/HairBeauty/hair_normal.bundle b/FULiveDemo/Resource/HairBeauty/hair_normal.bundle new file mode 100644 index 00000000..7265a7cf Binary files /dev/null and b/FULiveDemo/Resource/HairBeauty/hair_normal.bundle differ diff --git "a/FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp1.bundle" b/FULiveDemo/Resource/Hilarious/big_head_facewarp1.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp1.bundle" rename to FULiveDemo/Resource/Hilarious/big_head_facewarp1.bundle diff --git "a/FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp2.bundle" b/FULiveDemo/Resource/Hilarious/big_head_facewarp2.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp2.bundle" rename to FULiveDemo/Resource/Hilarious/big_head_facewarp2.bundle diff --git "a/FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp3.bundle" b/FULiveDemo/Resource/Hilarious/big_head_facewarp3.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp3.bundle" rename to FULiveDemo/Resource/Hilarious/big_head_facewarp3.bundle diff --git "a/FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp4.bundle" b/FULiveDemo/Resource/Hilarious/big_head_facewarp4.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp4.bundle" rename to FULiveDemo/Resource/Hilarious/big_head_facewarp4.bundle diff --git "a/FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp5.bundle" b/FULiveDemo/Resource/Hilarious/big_head_facewarp5.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp5.bundle" rename to FULiveDemo/Resource/Hilarious/big_head_facewarp5.bundle diff --git "a/FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp6.bundle" b/FULiveDemo/Resource/Hilarious/big_head_facewarp6.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\345\244\247\345\244\264\345\223\210\345\223\210/big_head_facewarp6.bundle" rename to FULiveDemo/Resource/Hilarious/big_head_facewarp6.bundle diff --git a/FULiveDemo/Config/homepage_data_source.json b/FULiveDemo/Resource/Homepage/homepage_data_source.json similarity index 81% rename from FULiveDemo/Config/homepage_data_source.json rename to FULiveDemo/Resource/Homepage/homepage_data_source.json index 4d8bd0f0..52c9c44b 100644 --- a/FULiveDemo/Config/homepage_data_source.json +++ b/FULiveDemo/Resource/Homepage/homepage_data_source.json @@ -1,76 +1,76 @@ [ { - "type":0, + "group":0, "name":"人脸特效", "modules":[ { - "type":0, + "module":0, "title":"美颜", "moduleCode":0, "permissionCode":1 }, { - "type":1, + "module":1, "title":"美妆", "moduleCode":0, "permissionCode":524288 }, { - "type":2, + "module":2, "title":"道具贴纸", "moduleCode":0, "permissionCode":110 }, { - "type":3, + "module":3, "title":"Animoji", "moduleCode":0, "permissionCode":16 }, { - "type":4, + "module":4, "title":"美发", "moduleCode":0, "permissionCode":1048576 }, { - "type":5, + "module":5, "title":"轻美妆", "moduleCode":1, "permissionCode":8 }, { - "type":6, + "module":6, "title":"AR面具", "moduleCode":0, "permissionCode":96 }, { - "type":7, + "module":7, "title":"搞笑大头", "moduleCode":1, "permissionCode":32768 }, { - "type":8, + "module":8, "title":"海报换脸", "moduleCode":0, "permissionCode":8388608 }, { - "type":9, + "module":9, "title":"表情识别", "moduleCode":0, "permissionCode":2058 }, { - "type":10, + "module":10, "title":"音乐滤镜", "moduleCode":0, "permissionCode":131072 }, { - "type":11, + "module":11, "title":"哈哈镜", "moduleCode":0, "permissionCode":65536 @@ -78,35 +78,35 @@ ] }, { - "type":1, + "group":1, "name":"人体特效", "modules":[ { - "type":12, + "module":12, "title":"美体", "moduleCode":1, "permissionCode":32 }, { - "type":13, + "module":13, "title":"全身Avatar", "moduleCode":1, "permissionCode":448 }, { - "type":14, + "module":14, "title":"人像分割", "moduleCode":0, "permissionCode":256 }, { - "type":15, + "module":15, "title":"手势识别", "moduleCode":0, "permissionCode":512 }, { - "type":16, + "module":16, "title":"绿幕抠像", "moduleCode":1, "permissionCode":512 @@ -114,11 +114,11 @@ ] }, { - "type":2, - "name":"精品贴纸", + "group":2, + "name":"内容服务", "modules":[ { - "type":17, + "module":17, "title":"精品贴纸", "moduleCode":0, "permissionCode":110 diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/light_makeup.bundle" b/FULiveDemo/Resource/LightMakeup/light_makeup.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/light_makeup.bundle" rename to FULiveDemo/Resource/LightMakeup/light_makeup.bundle diff --git a/FULiveDemo/Resource/LightMakeup/light_makeup.json b/FULiveDemo/Resource/LightMakeup/light_makeup.json new file mode 100644 index 00000000..cde752d9 --- /dev/null +++ b/FULiveDemo/Resource/LightMakeup/light_makeup.json @@ -0,0 +1,210 @@ +[ + { + "name": "卸妆", + "imageStr": "cancel_item", + "isSel": true, + "value": 0.0, + "selectedFilter": "origin", + "selectedFilterLevel": 1.0, + "makeups": [{ + "makeType": 0, + "namaValueStr": "makeup_intensity_lip", + "value": 0.0 + }, + { + "makeType": 1, + "namaValueStr": "makeup_intensity_blusher", + "value": 0.0 + }, + { + "makeType": 2, + "namaValueStr": "makeup_intensity_eyeBrow", + "value": 0.0 + }, + { + "makeType": 3, + "namaValueStr": "makeup_intensity_eye", + "value": 0.0 + }, + { + "makeType": 4, + "namaValueStr": "makeup_intensity_eyeLiner", + "value": 0.0 + }, + { + "makeType": 5, + "namaValueStr": "makeup_intensity_eyelash", + "value": 0.0 + }, + { + "makeType": 6, + "namaValueStr": "makeup_intensity_pupil", + "value": 0.0 + }, + + { + "makeType": 4, + "namaValueStr": "makeup_intensity_eyeLiner", + "value": 0.0 + }, + { + "makeType": 5, + "namaValueStr": "makeup_intensity_eyelash", + "value": 0.0 + }, + { + "makeType": 6, + "namaValueStr": "makeup_intensity_pupil", + "value": 0.0 + } + ] + }, + { + "name": "桃花", + "imageStr": "demo_makeup_peachblossom", + "value": 1.0, + "selectedFilter": "fennen3", + "selectedFilterLevel": 1.0, + "isSel": false, + "makeups": [{ + "makeType": 1, + "namaValueStr": "makeup_intensity_lip", + "value": 0.9, + "colorStr": "makeup_lip_color", + "colorStrV": [0.90, 0.21, 0.49, 0.3], + "is_two_color": 0, + "lip_type": 1 + }, + { + "makeType": 2, + "namaBundle": "mu_blush_01", + "namaValueStr": "makeup_intensity_blusher", + "value": 0.9 + }, + { + "makeType": 3, + "namaBundle": "mu_eyebrow_01", + "namaValueStr": "makeup_intensity_eyeBrow", + "value": 0.9 + }, + { + "makeType": 4, + "namaBundle": "mu_eyeshadow_01", + "namaValueStr": "makeup_intensity_eye", + "value": 0.9 + } + ] + }, + + { + "name": "西柚", + "imageStr": "demo_makeup_grapefruit", + "value": 1.0, + "selectedFilter": "lengsediao4", + "selectedFilterLevel": 0.7, + "isSel": false, + "makeups": [{ + "makeType": 1, + "namaValueStr": "makeup_intensity_lip", + "value": 0.7, + "colorStr": "makeup_lip_color", + "colorStrV": [0.94, 0.29, 0.11, 0.4], + "is_two_color": 0, + "lip_type": 1 + }, + { + "makeType": 2, + "namaBundle": "mu_blush_23", + "namaValueStr": "makeup_intensity_blusher", + "value": 0.7 + }, + { + "makeType": 3, + "namaBundle": "mu_eyebrow_19", + "namaValueStr": "makeup_intensity_eyeBrow", + "value": 0.5 + }, + { + "makeType": 4, + "namaBundle": "mu_eyeshadow_21", + "namaValueStr": "makeup_intensity_eye", + "value": 0.7 + } + ] + }, + + { + "name": "男友", + "imageStr": "demo_makeup_boyfriend", + "value": 1.0, + "selectedFilter": "xiaoqingxin3", + "selectedFilterLevel": 0.9, + "isSel": false, + "makeups": [{ + "makeType": 1, + "namaValueStr": "makeup_intensity_lip", + "value": 0.7, + "colorStr": "makeup_lip_color", + "colorStrV": [0.88, 0.55, 0.51, 0.7], + "is_two_color": 0, + "lip_type": 1 + }, + { + "makeType": 2, + "namaBundle": "mu_blush_20", + "namaValueStr": "makeup_intensity_blusher", + "value": 0.7 + }, + { + "makeType": 3, + "namaBundle": "mu_eyebrow_16", + "namaValueStr": "makeup_intensity_eyeBrow", + "value": 0.5 + }, + { + "makeType": 4, + "namaBundle": "mu_eyeshadow_18", + "namaValueStr": "makeup_intensity_eye", + "value": 0.7 + } + ] + }, + { + "name": "清透", + "imageStr": "demo_makeup_clear", + "value": 1.0, + "selectedFilter": "xiaoqingxin6", + "selectedFilterLevel": 0.8, + "isSel": false, + "makeups": [{ + "makeType": 1, + "namaValueStr": "makeup_intensity_lip", + "value": 0.7, + "colorStr": "makeup_lip_color", + "colorStrV": [0.89, 0.59, 0.58, 0.50], + "colorStr2": "makeup_lip_color2", + "colorStr2V": "", + "is_two_color": 0, + "lip_type": 1 + }, + { + "makeType": 2, + "namaBundle": "mu_blush_22", + "namaValueStr": "makeup_intensity_blusher", + "value": 0.7 + }, + { + "makeType": 3, + "namaBundle": "mu_eyebrow_18", + "namaValueStr": "makeup_intensity_eyeBrow", + "value": 0.5 + }, + { + "makeType": 4, + "namaBundle": "mu_eyeshadow_20", + "namaValueStr": "makeup_intensity_eye", + "value": 0.7 + } + ] + } +] diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_01.png" b/FULiveDemo/Resource/LightMakeup/mu_blush_01.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_01.png" rename to FULiveDemo/Resource/LightMakeup/mu_blush_01.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_20.png" b/FULiveDemo/Resource/LightMakeup/mu_blush_20.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_20.png" rename to FULiveDemo/Resource/LightMakeup/mu_blush_20.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_22.png" b/FULiveDemo/Resource/LightMakeup/mu_blush_22.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_22.png" rename to FULiveDemo/Resource/LightMakeup/mu_blush_22.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_23.png" b/FULiveDemo/Resource/LightMakeup/mu_blush_23.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_blush_23.png" rename to FULiveDemo/Resource/LightMakeup/mu_blush_23.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_01.png" b/FULiveDemo/Resource/LightMakeup/mu_eyebrow_01.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_01.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyebrow_01.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_16.png" b/FULiveDemo/Resource/LightMakeup/mu_eyebrow_16.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_16.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyebrow_16.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_18.png" b/FULiveDemo/Resource/LightMakeup/mu_eyebrow_18.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_18.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyebrow_18.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_19.png" b/FULiveDemo/Resource/LightMakeup/mu_eyebrow_19.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_19.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyebrow_19.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_01.png" b/FULiveDemo/Resource/LightMakeup/mu_eyeshadow_01.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_01.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyeshadow_01.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_18.png" b/FULiveDemo/Resource/LightMakeup/mu_eyeshadow_18.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_18.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyeshadow_18.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_20.png" b/FULiveDemo/Resource/LightMakeup/mu_eyeshadow_20.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_20.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyeshadow_20.png diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_21.png" b/FULiveDemo/Resource/LightMakeup/mu_eyeshadow_21.png similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_21.png" rename to FULiveDemo/Resource/LightMakeup/mu_eyeshadow_21.png diff --git "a/FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin.mp3" b/FULiveDemo/Resource/MusicFilter/douyin.mp3 similarity index 100% rename from "FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin.mp3" rename to FULiveDemo/Resource/MusicFilter/douyin.mp3 diff --git "a/FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_01.bundle" b/FULiveDemo/Resource/MusicFilter/douyin_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_01.bundle" rename to FULiveDemo/Resource/MusicFilter/douyin_01.bundle diff --git "a/FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_02.bundle" b/FULiveDemo/Resource/MusicFilter/douyin_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\237\263\344\271\220\346\273\244\351\225\234/douyin_02.bundle" rename to FULiveDemo/Resource/MusicFilter/douyin_02.bundle diff --git a/FULiveDemo/Resource/Animation/tiezhiIcon/tiezhi_data.json b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/tiezhi_data.json similarity index 100% rename from FULiveDemo/Resource/Animation/tiezhiIcon/tiezhi_data.json rename to FULiveDemo/Resource/Others/Animation/tiezhiIcon/tiezhi_data.json diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00036.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00036.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00036.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00036.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00037.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00037.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00037.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00037.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00038.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00038.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00038.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00038.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00039.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00039.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00039.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00039.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00040.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00040.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00040.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00040.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00041.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00041.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00041.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00041.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00042.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00042.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00042.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00042.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00043.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00043.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00043.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00043.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00044.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00044.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00044.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00044.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00045.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00045.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00045.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00045.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00046.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00046.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00046.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00046.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00047.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00047.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00047.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00047.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00048.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00048.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00048.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00048.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00049.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00049.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00049.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00049.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00050.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00050.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00050.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00050.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00051.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00051.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00051.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00051.png" diff --git "a/FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00052.png" "b/FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00052.png" similarity index 100% rename from "FULiveDemo/Resource/Animation/tiezhiIcon/\346\265\201\346\230\237_00052.png" rename to "FULiveDemo/Resource/Others/Animation/tiezhiIcon/\346\265\201\346\230\237_00052.png" diff --git a/FULiveDemo/Resource/Render/landmarks.bundle b/FULiveDemo/Resource/Render/landmarks.bundle new file mode 100644 index 00000000..5b81cd37 Binary files /dev/null and b/FULiveDemo/Resource/Render/landmarks.bundle differ diff --git a/FULiveDemo/Resource/Render/test_configurations.plist b/FULiveDemo/Resource/Render/test_configurations.plist new file mode 100644 index 00000000..baa558a7 --- /dev/null +++ b/FULiveDemo/Resource/Render/test_configurations.plist @@ -0,0 +1,10 @@ + + + + + 美妆导图 + + 点位开关 + + + diff --git a/FULiveDemo/Resource/Segmentation/bg_segment.bundle b/FULiveDemo/Resource/Segmentation/bg_segment.bundle new file mode 100644 index 00000000..a1567688 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/bg_segment.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/boyfriend1_740.bundle b/FULiveDemo/Resource/Segmentation/boyfriend1_740.bundle new file mode 100644 index 00000000..246130c5 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/boyfriend1_740.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/boyfriend2_740.bundle b/FULiveDemo/Resource/Segmentation/boyfriend2_740.bundle new file mode 100644 index 00000000..2bc52c07 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/boyfriend2_740.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/boyfriend3_740.bundle b/FULiveDemo/Resource/Segmentation/boyfriend3_740.bundle new file mode 100644 index 00000000..24b8a0a4 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/boyfriend3_740.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/gufeng_zh_fu.bundle b/FULiveDemo/Resource/Segmentation/gufeng_zh_fu.bundle new file mode 100644 index 00000000..dfeed510 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/gufeng_zh_fu.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/hez_ztt_fu.bundle b/FULiveDemo/Resource/Segmentation/hez_ztt_fu.bundle new file mode 100644 index 00000000..bdd2fce6 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/hez_ztt_fu.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/human_outline_740.bundle b/FULiveDemo/Resource/Segmentation/human_outline_740.bundle new file mode 100644 index 00000000..bba23202 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/human_outline_740.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/ice_lm_fu.bundle b/FULiveDemo/Resource/Segmentation/ice_lm_fu.bundle new file mode 100644 index 00000000..08e64645 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/ice_lm_fu.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/sea_lm_fu.bundle b/FULiveDemo/Resource/Segmentation/sea_lm_fu.bundle new file mode 100644 index 00000000..63ef0609 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/sea_lm_fu.bundle differ diff --git a/FULiveDemo/Resource/Segmentation/segmentation.json b/FULiveDemo/Resource/Segmentation/segmentation.json new file mode 100644 index 00000000..d46ae0df --- /dev/null +++ b/FULiveDemo/Resource/Segmentation/segmentation.json @@ -0,0 +1,46 @@ +[ + { + "type":0, + "name":"reset_item" + }, + { + "type":0, + "name":"add_item" + }, + { + "type":0, + "name":"human_outline_740" + }, + { + "type":0, + "name":"boyfriend1_740" + }, + { + "type":0, + "name":"boyfriend3_740" + }, + { + "type":0, + "name":"boyfriend2_740" + }, + { + "type":0, + "name":"hez_ztt_fu" + }, + { + "type":0, + "name":"gufeng_zh_fu" + }, + { + "type":0, + "name":"xiandai_ztt_fu" + }, + { + "type":0, + "name":"sea_lm_fu" + }, + { + "type":0, + "name":"ice_lm_fu" + } +] diff --git a/FULiveDemo/Resource/Segmentation/xiandai_ztt_fu.bundle b/FULiveDemo/Resource/Segmentation/xiandai_ztt_fu.bundle new file mode 100644 index 00000000..18a33742 Binary files /dev/null and b/FULiveDemo/Resource/Segmentation/xiandai_ztt_fu.bundle differ diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/CatSparks.bundle" b/FULiveDemo/Resource/Sticker/CatSparks.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/CatSparks.bundle" rename to FULiveDemo/Resource/Sticker/CatSparks.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/DaisyPig.bundle" b/FULiveDemo/Resource/Sticker/DaisyPig.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/DaisyPig.bundle" rename to FULiveDemo/Resource/Sticker/DaisyPig.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/fu_zh_fenshu.bundle" b/FULiveDemo/Resource/Sticker/fu_zh_fenshu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/fu_zh_fenshu.bundle" rename to FULiveDemo/Resource/Sticker/fu_zh_fenshu.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/newy1.bundle" b/FULiveDemo/Resource/Sticker/newy1.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/newy1.bundle" rename to FULiveDemo/Resource/Sticker/newy1.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/redribbt.bundle" b/FULiveDemo/Resource/Sticker/redribbt.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/redribbt.bundle" rename to FULiveDemo/Resource/Sticker/redribbt.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlr.bundle" b/FULiveDemo/Resource/Sticker/sdlr.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlr.bundle" rename to FULiveDemo/Resource/Sticker/sdlr.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlu.bundle" b/FULiveDemo/Resource/Sticker/sdlu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/sdlu.bundle" rename to FULiveDemo/Resource/Sticker/sdlu.bundle diff --git "a/FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/xlong_zh_fu.bundle" b/FULiveDemo/Resource/Sticker/xlong_zh_fu.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\351\201\223\345\205\267\350\264\264\347\272\270/xlong_zh_fu.bundle" rename to FULiveDemo/Resource/Sticker/xlong_zh_fu.bundle diff --git a/FULiveDemo/Resource/items/Animoji/baimao_Animoji.bundle b/FULiveDemo/Resource/items/Animoji/baimao_Animoji.bundle deleted file mode 100644 index 708a73ca..00000000 Binary files a/FULiveDemo/Resource/items/Animoji/baimao_Animoji.bundle and /dev/null differ diff --git a/FULiveDemo/Resource/items/Animoji/douniuquan_Animoji.bundle b/FULiveDemo/Resource/items/Animoji/douniuquan_Animoji.bundle deleted file mode 100644 index 905cdeed..00000000 Binary files a/FULiveDemo/Resource/items/Animoji/douniuquan_Animoji.bundle and /dev/null differ diff --git a/FULiveDemo/Resource/items/Animoji/hashiqi_Animoji.bundle b/FULiveDemo/Resource/items/Animoji/hashiqi_Animoji.bundle deleted file mode 100644 index 850331af..00000000 Binary files a/FULiveDemo/Resource/items/Animoji/hashiqi_Animoji.bundle and /dev/null differ diff --git a/FULiveDemo/Resource/items/Animoji/hetun_Animoji.bundle b/FULiveDemo/Resource/items/Animoji/hetun_Animoji.bundle deleted file mode 100644 index 2a8ddfbd..00000000 Binary files a/FULiveDemo/Resource/items/Animoji/hetun_Animoji.bundle and /dev/null differ diff --git a/FULiveDemo/Resource/items/Animoji/huangya_Animoji.bundle b/FULiveDemo/Resource/items/Animoji/huangya_Animoji.bundle deleted file mode 100644 index 7c344333..00000000 Binary files a/FULiveDemo/Resource/items/Animoji/huangya_Animoji.bundle and /dev/null differ diff --git a/FULiveDemo/Resource/items/Animoji/qgirl_Animoji.bundle b/FULiveDemo/Resource/items/Animoji/qgirl_Animoji.bundle deleted file mode 100644 index 9b93c855..00000000 Binary files a/FULiveDemo/Resource/items/Animoji/qgirl_Animoji.bundle and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/bg_segment.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/bg_segment.bundle" deleted file mode 100644 index 6f0c95b1..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/bg_segment.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend1_740.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend1_740.bundle" deleted file mode 100644 index cceaffe6..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend1_740.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend2_740.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend2_740.bundle" deleted file mode 100644 index ce658df8..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend2_740.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend3_740.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend3_740.bundle" deleted file mode 100644 index aafa3aa4..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/boyfriend3_740.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/gufeng_zh_fu.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/gufeng_zh_fu.bundle" deleted file mode 100644 index eb93e644..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/gufeng_zh_fu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/hez_ztt_fu.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/hez_ztt_fu.bundle" deleted file mode 100644 index 290f7558..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/hez_ztt_fu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/human_outline_740.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/human_outline_740.bundle" deleted file mode 100644 index d8065c07..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/human_outline_740.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/ice_lm_fu.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/ice_lm_fu.bundle" deleted file mode 100644 index 6e4a314a..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/ice_lm_fu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/sea_lm_fu.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/sea_lm_fu.bundle" deleted file mode 100644 index 02e6d2ac..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/sea_lm_fu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/xiandai_ztt_fu.bundle" "b/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/xiandai_ztt_fu.bundle" deleted file mode 100644 index b52ce15e..00000000 Binary files "a/FULiveDemo/Resource/items/\344\272\272\345\203\217\345\210\206\345\211\262/xiandai_ztt_fu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyelash_1@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyelash_1@3x.png" deleted file mode 100644 index 77797a63..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyelash_1@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeliner_1.bundle" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeliner_1.bundle" deleted file mode 100644 index e2571696..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeliner_1.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeliner_1@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeliner_1@3x.png" deleted file mode 100644 index 780e6433..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeliner_1@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeshadow_4.bundle" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeshadow_4.bundle" deleted file mode 100644 index b8277db6..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeshadow_4.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeshadow_4@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeshadow_4@3x.png" deleted file mode 100644 index 240575aa..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/Eyeshadow_4@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/avatar_nv_image.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/avatar_nv_image.png" deleted file mode 100644 index 9d4fcd38..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/avatar_nv_image.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/eyelash_01.bundle" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/eyelash_01.bundle" deleted file mode 100644 index a5d878b1..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/eyelash_01.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/facemakeup_3@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/facemakeup_3@3x.png" deleted file mode 100644 index 28026caa..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/facemakeup_3@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/lipgloss_1.bundle" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/lipgloss_1.bundle" deleted file mode 100644 index a8319b93..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/lipgloss_1.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/lipgloss_1@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/lipgloss_1@3x.png" deleted file mode 100644 index f1b2c38e..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/lipgloss_1@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/taozhuang_12@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/taozhuang_12@3x.png" deleted file mode 100644 index 13df214b..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/taozhuang_12@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/toushi_5@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/toushi_5@3x.png" deleted file mode 100644 index 71a89b5d..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/toushi_5@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/xiezi_danxie@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/xiezi_danxie@3x.png" deleted file mode 100644 index 27592b5b..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\345\245\263\346\250\2410610/xiezi_danxie@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/avatar_nan_image.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/avatar_nan_image.png" deleted file mode 100644 index 2f3f1b68..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/avatar_nan_image.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/kuzi_changku_5@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/kuzi_changku_5@3x.png" deleted file mode 100644 index a27c9556..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/kuzi_changku_5@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/peishi_erding_2@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/peishi_erding_2@3x.png" deleted file mode 100644 index aac28cf7..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/peishi_erding_2@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/toushi_7@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/toushi_7@3x.png" deleted file mode 100644 index 5805661d..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/toushi_7@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/waitao_3@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/waitao_3@3x.png" deleted file mode 100644 index 296460c0..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/waitao_3@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/xiezi_tuoxie_2@3x.png" "b/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/xiezi_tuoxie_2@3x.png" deleted file mode 100644 index aef6ad03..00000000 Binary files "a/FULiveDemo/Resource/items/\345\205\250\350\272\253avatar/\347\224\267\346\250\2410610/xiezi_tuoxie_2@3x.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_flower.bundle" "b/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_flower.bundle" deleted file mode 100644 index c6ea0814..00000000 Binary files "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_flower.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_rain.bundle" "b/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_rain.bundle" deleted file mode 100644 index b606cc82..00000000 Binary files "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_rain.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_snow.bundle" "b/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_snow.bundle" deleted file mode 100644 index 9583a581..00000000 Binary files "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ctrl_snow.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_thumb.bundle" "b/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_thumb.bundle" deleted file mode 100644 index 9866e034..00000000 Binary files "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_thumb.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_thumb.png" "b/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_thumb.png" deleted file mode 100644 index c892b90d..00000000 Binary files "a/FULiveDemo/Resource/items/\346\211\213\345\212\277\350\257\206\345\210\253/ssd_thread_thumb.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/green_screen.bundle" "b/FULiveDemo/Resource/items/\347\273\277\345\271\225/green_screen.bundle" deleted file mode 100644 index 1e710091..00000000 Binary files "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/green_screen.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/hotStamping.mp4" "b/FULiveDemo/Resource/items/\347\273\277\345\271\225/hotStamping.mp4" deleted file mode 100644 index d33c1297..00000000 Binary files "a/FULiveDemo/Resource/items/\347\273\277\345\271\225/hotStamping.mp4" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\217\221/hair_gradient.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\217\221/hair_gradient.bundle" deleted file mode 100644 index 79cada54..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\217\221/hair_gradient.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\217\221/hair_normal.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\217\221/hair_normal.bundle" deleted file mode 100644 index 68f73121..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\217\221/hair_normal.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/Rose.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/Rose.bundle" deleted file mode 100644 index c5292c55..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/Rose.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chaomo.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chaomo.bundle" deleted file mode 100644 index 1fe06646..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chaomo.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chuju.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chuju.bundle" deleted file mode 100644 index e305fb65..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chuju.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chuqiu.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chuqiu.bundle" deleted file mode 100644 index 44ee9310..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/chuqiu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/diadiatu.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/diadiatu.bundle" deleted file mode 100644 index 89a9e82c..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/diadiatu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/dongling.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/dongling.bundle" deleted file mode 100644 index 32d29884..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/dongling.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/gangfeng.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/gangfeng.bundle" deleted file mode 100644 index a8122028..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/gangfeng.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/guofeng.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/guofeng.bundle" deleted file mode 100644 index 7accb708..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/guofeng.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/hongfeng.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/hongfeng.bundle" deleted file mode 100644 index ef4791e7..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/hongfeng.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/hunxie.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/hunxie.bundle" deleted file mode 100644 index dadea8d7..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/hunxie.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/jianling.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/jianling.bundle" deleted file mode 100644 index a2c29b49..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/jianling.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/xiezhuan.json" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/xiezhuan.json" deleted file mode 100755 index 7183ee63..00000000 --- "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/xiezhuan.json" +++ /dev/null @@ -1,88 +0,0 @@ -{ - "blend_type_tex_blusher": 0, - "blend_type_tex_blusher2": 0, - "makeup_blusher_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_blusher": "zhuangrong_sh.png", - "makeup_intensity_blusher": 0.800000011920929, - "makeup_brow_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_brow": "brow.png", - "brow_warp": 1.0, - "brow_warp_type": 3, - "makeup_intensity_eyeBrow": 0.699999988079071, - "makeup_eyeLash_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_eyeLash": "eyeLash.png", - "makeup_intensity_eyelash": 1.0, - "makeup_eyeLiner_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_eyeLiner": "eyeLiner.png", - "makeup_intensity_eyeLiner": 1.0, - "blend_type_tex_eye": 0, - "blend_type_tex_eye2": 0, - "blend_type_tex_eye3": 1, - "blend_type_tex_eye4": 0, - "makeup_eye_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "makeup_eye_color2": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "makeup_eye_color3": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_eye": "eye.png", - "tex_eye2": "eye2.png", - "tex_eye3": "eye3.png", - "makeup_intensity_eye": 1.0, - "makeup_highlight_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_highlight": "zhuangrong_gg.png", - "makeup_intensity_highlight": 1.0, - "makeup_shadow_color": [ - 0.0, - 0.0, - 0.0, - 0.0 - ], - "tex_shadow": "zhuangrong_yy.png", - "makeup_intensity_shadow": 1.0, - "makeup_lip_color": [ - 0.501960813999176, - 0.10196078568696976, - 0.10196078568696976, - 1.0 - ], - "lip_type": 0, - "makeup_intensity_lip": 0.0 -} diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/nuandong.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/nuandong.bundle" deleted file mode 100644 index 2d3f202a..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/nuandong.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/qianzhihe.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/qianzhihe.bundle" deleted file mode 100644 index 8b01613b..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/qianzhihe.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/renyu.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/renyu.bundle" deleted file mode 100644 index 9d1a0e31..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/renyu.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/shaonv.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/shaonv.bundle" deleted file mode 100644 index 1525c841..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/shaonv.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/yanshimao.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/yanshimao.bundle" deleted file mode 100644 index cd8c16f4..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/yanshimao.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/ziyun.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/ziyun.bundle" deleted file mode 100644 index e3cef9ad..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/ziyun.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_01.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_01.bundle" deleted file mode 100644 index ce5625d8..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_01.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_02.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_02.bundle" deleted file mode 100644 index 503dc372..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_02.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_03.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_03.bundle" deleted file mode 100644 index 410086a3..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_03.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_04.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_04.bundle" deleted file mode 100644 index 63a2d7e1..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_04.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_05.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_05.bundle" deleted file mode 100644 index fd3c071a..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\345\217\243\347\272\242/mu_style_lip_05.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_17.png" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_17.png" deleted file mode 100644 index bae6dccc..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_eyebrow_17.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_19.png" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_19.png" deleted file mode 100644 index 3ff88ede..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_eyeshadow_19.png" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/linjia.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/linjia.bundle" deleted file mode 100644 index 205476c8..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/linjia.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/oumei.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/oumei.bundle" deleted file mode 100644 index c2aaee19..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/oumei.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/tianmei.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/tianmei.bundle" deleted file mode 100644 index 252c9d35..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/tianmei.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/wumei.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/wumei.bundle" deleted file mode 100644 index 8199e47f..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/wumei.bundle" and /dev/null differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/xinggan.bundle" "b/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/xinggan.bundle" deleted file mode 100644 index 18055a69..00000000 Binary files "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/bundle/xinggan.bundle" and /dev/null differ diff --git a/FULiveDemo/Resource/landmarks.bundle b/FULiveDemo/Resource/landmarks.bundle deleted file mode 100644 index 78042bc9..00000000 Binary files a/FULiveDemo/Resource/landmarks.bundle and /dev/null differ diff --git a/FULiveDemo/Resource/loading.gif b/FULiveDemo/Resource/loading.gif deleted file mode 100644 index 5e77429c..00000000 Binary files a/FULiveDemo/Resource/loading.gif and /dev/null differ diff --git a/FULiveDemo/en.lproj/Main.strings b/FULiveDemo/en.lproj/Main.strings deleted file mode 100644 index db4c6c6f..00000000 --- a/FULiveDemo/en.lproj/Main.strings +++ /dev/null @@ -1,42 +0,0 @@ - -/* Class = "UIButton"; normalTitle = "选择视频"; ObjectID = "2ag-fZ-Ri1"; */ -"2ag-fZ-Ri1.normalTitle" = "Video"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "5je-9v-vRG"; */ -"5je-9v-vRG.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "IKc-Xp-TP9"; */ -"IKc-Xp-TP9.text" = "Label"; - -/* Class = "UILabel"; text = "请从相册中选择图片或视频"; ObjectID = "Lpf-yL-Pbn"; */ -"Lpf-yL-Pbn.text" = "Choose photo or video from your album"; - -/* Class = "UILabel"; text = "tip"; ObjectID = "SPa-lE-qrM"; */ -"SPa-lE-qrM.text" = "tip"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Stx-fP-4ke"; */ -"Stx-fP-4ke.text" = "Label"; - -/* Class = "UIButton"; normalTitle = "选择图片"; ObjectID = "UiZ-vl-sDp"; */ -"UiZ-vl-sDp.normalTitle" = "Photo"; - -/* Class = "UINavigationItem"; title = "FULive"; ObjectID = "VOl-If-oZU"; */ -"VOl-If-oZU.title" = "FULive"; - -/* Class = "UILabel"; text = "FU Live Demo"; ObjectID = "ZEM-xr-yq7"; */ -"ZEM-xr-yq7.text" = "FU Live Demo effects version"; - -/* Class = "UISegmentedControl"; iTs-WC-nMu.segmentTitles[0] = "BGRA"; ObjectID = "iTs-WC-nMu"; */ -"iTs-WC-nMu.segmentTitles[0]" = "BGRA"; - -/* Class = "UISegmentedControl"; iTs-WC-nMu.segmentTitles[1] = "YUV"; ObjectID = "iTs-WC-nMu"; */ -"iTs-WC-nMu.segmentTitles[1]" = "YUV"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "jpY-tM-lDQ"; */ -"jpY-tM-lDQ.text" = "Label"; - -/* Class = "UIButton"; normalTitle = "性能优先"; ObjectID = "xCs-c0-iQR"; */ -"xCs-c0-iQR.normalTitle" = "Performance Preferred"; - -/* Class = "UILabel"; text = "未检测到人脸"; ObjectID = "xr3-Jo-KJU"; */ -"xr3-Jo-KJU.text" = "No Face Tracking"; diff --git a/FULiveDemo/zh-Hans.lproj/Main.storyboard b/FULiveDemo/zh-Hans.lproj/Main.storyboard deleted file mode 100644 index 568e5566..00000000 --- a/FULiveDemo/zh-Hans.lproj/Main.storyboard +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FULiveDemo/zh-Hans.lproj/Main.strings b/FULiveDemo/zh-Hans.lproj/Main.strings deleted file mode 100644 index 338f58ae..00000000 --- a/FULiveDemo/zh-Hans.lproj/Main.strings +++ /dev/null @@ -1,42 +0,0 @@ - -/* Class = "UIButton"; normalTitle = "选择视频"; ObjectID = "2ag-fZ-Ri1"; */ -"2ag-fZ-Ri1.normalTitle" = "选择视频"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "5je-9v-vRG"; */ -"5je-9v-vRG.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "IKc-Xp-TP9"; */ -"IKc-Xp-TP9.text" = "Label"; - -/* Class = "UILabel"; text = "请从相册中选择图片或视频"; ObjectID = "Lpf-yL-Pbn"; */ -"Lpf-yL-Pbn.text" = "请从相册中选择图片或视频"; - -/* Class = "UILabel"; text = "tip"; ObjectID = "SPa-lE-qrM"; */ -"SPa-lE-qrM.text" = "tip"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Stx-fP-4ke"; */ -"Stx-fP-4ke.text" = "Label"; - -/* Class = "UIButton"; normalTitle = "选择图片"; ObjectID = "UiZ-vl-sDp"; */ -"UiZ-vl-sDp.normalTitle" = "选择图片"; - -/* Class = "UINavigationItem"; title = "FULive"; ObjectID = "VOl-If-oZU"; */ -"VOl-If-oZU.title" = "FULive"; - -/* Class = "UILabel"; text = "FU Live Demo"; ObjectID = "ZEM-xr-yq7"; */ -"ZEM-xr-yq7.text" = "FU Live Demo 特效版"; - -/* Class = "UISegmentedControl"; iTs-WC-nMu.segmentTitles[0] = "BGRA"; ObjectID = "iTs-WC-nMu"; */ -"iTs-WC-nMu.segmentTitles[0]" = "BGRA"; - -/* Class = "UISegmentedControl"; iTs-WC-nMu.segmentTitles[1] = "YUV"; ObjectID = "iTs-WC-nMu"; */ -"iTs-WC-nMu.segmentTitles[1]" = "YUV"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "jpY-tM-lDQ"; */ -"jpY-tM-lDQ.text" = "Label"; - -/* Class = "UIButton"; normalTitle = "性能优先"; ObjectID = "xCs-c0-iQR"; */ -"xCs-c0-iQR.normalTitle" = "性能优先"; - -/* Class = "UILabel"; text = "未检测到人脸"; ObjectID = "xr3-Jo-KJU"; */ -"xr3-Jo-KJU.text" = "未检测到人脸"; diff --git a/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.pbxproj b/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.pbxproj new file mode 100644 index 00000000..cdc2ddb0 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.pbxproj @@ -0,0 +1,982 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + E31FC58828CB290200A90560 /* FUMakeupComponent.strings in Resources */ = {isa = PBXBuildFile; fileRef = E31FC58A28CB290200A90560 /* FUMakeupComponent.strings */; }; + E31FC58D28CB292900A90560 /* FUMakeupComponent.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31FC58C28CB292900A90560 /* FUMakeupComponent.xcassets */; }; + E32A0A9128D0244D001964E4 /* FUMakeupComponentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E32A0A8F28D0244D001964E4 /* FUMakeupComponentManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E32A0A9228D0244D001964E4 /* FUMakeupComponentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E32A0A9028D0244D001964E4 /* FUMakeupComponentManager.m */; }; + E32A0A9D28D04F3F001964E4 /* FUCustomizedMakeupView.m in Sources */ = {isa = PBXBuildFile; fileRef = E32A0A9B28D04F3F001964E4 /* FUCustomizedMakeupView.m */; }; + E32A0A9E28D04F3F001964E4 /* FUCustomizedMakeupView.h in Headers */ = {isa = PBXBuildFile; fileRef = E32A0A9C28D04F3F001964E4 /* FUCustomizedMakeupView.h */; }; + E32A0AA128D0507E001964E4 /* FUCustomizedMakeupViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E32A0A9F28D0507E001964E4 /* FUCustomizedMakeupViewModel.h */; }; + E32A0AA228D0507E001964E4 /* FUCustomizedMakeupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E32A0AA028D0507E001964E4 /* FUCustomizedMakeupViewModel.m */; }; + E32A0AA528D0561B001964E4 /* FUCustomizedMakeupModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E32A0AA328D0561B001964E4 /* FUCustomizedMakeupModel.h */; }; + E32A0AA628D0561B001964E4 /* FUCustomizedMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E32A0AA428D0561B001964E4 /* FUCustomizedMakeupModel.m */; }; + E32A0AAE28D0588C001964E4 /* customized_makeups.json in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AAD28D0588C001964E4 /* customized_makeups.json */; }; + E32A0AB128D1A260001964E4 /* FUCustomizedMakeupColorPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = E32A0AAF28D1A260001964E4 /* FUCustomizedMakeupColorPicker.h */; }; + E32A0AB228D1A260001964E4 /* FUCustomizedMakeupColorPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = E32A0AB028D1A260001964E4 /* FUCustomizedMakeupColorPicker.m */; }; + E32A0ABF28D1C501001964E4 /* mu_style_foundation_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0ABE28D1C501001964E4 /* mu_style_foundation_01.bundle */; }; + E32A0AD728D1C5B5001964E4 /* mu_style_eyebrow_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AD328D1C5B5001964E4 /* mu_style_eyebrow_04.bundle */; }; + E32A0AD828D1C5B5001964E4 /* mu_style_eyebrow_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AD428D1C5B5001964E4 /* mu_style_eyebrow_03.bundle */; }; + E32A0AD928D1C5B5001964E4 /* mu_style_eyebrow_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AD528D1C5B5001964E4 /* mu_style_eyebrow_01.bundle */; }; + E32A0ADA28D1C5B5001964E4 /* mu_style_eyebrow_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AD628D1C5B5001964E4 /* mu_style_eyebrow_02.bundle */; }; + E32A0ADD28D1C5CF001964E4 /* mu_style_highlight_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0ADB28D1C5CE001964E4 /* mu_style_highlight_01.bundle */; }; + E32A0ADE28D1C5CF001964E4 /* mu_style_highlight_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0ADC28D1C5CE001964E4 /* mu_style_highlight_02.bundle */; }; + E32A0AE528D1C5DB001964E4 /* mu_style_eyelash_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0ADF28D1C5DB001964E4 /* mu_style_eyelash_05.bundle */; }; + E32A0AE628D1C5DB001964E4 /* mu_style_eyelash_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AE028D1C5DB001964E4 /* mu_style_eyelash_03.bundle */; }; + E32A0AE728D1C5DB001964E4 /* mu_style_eyelash_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AE128D1C5DB001964E4 /* mu_style_eyelash_01.bundle */; }; + E32A0AE828D1C5DB001964E4 /* mu_style_eyelash_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AE228D1C5DB001964E4 /* mu_style_eyelash_02.bundle */; }; + E32A0AE928D1C5DB001964E4 /* mu_style_eyelash_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AE328D1C5DB001964E4 /* mu_style_eyelash_06.bundle */; }; + E32A0AEA28D1C5DB001964E4 /* mu_style_eyelash_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AE428D1C5DB001964E4 /* mu_style_eyelash_04.bundle */; }; + E32A0AF328D1C5E7001964E4 /* mu_style_eyepupil_07.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AEB28D1C5E6001964E4 /* mu_style_eyepupil_07.bundle */; }; + E32A0AF428D1C5E7001964E4 /* mu_style_eyepupil_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AEC28D1C5E6001964E4 /* mu_style_eyepupil_06.bundle */; }; + E32A0AF528D1C5E7001964E4 /* mu_style_eyepupil_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AED28D1C5E6001964E4 /* mu_style_eyepupil_01.bundle */; }; + E32A0AF628D1C5E7001964E4 /* mu_style_eyepupil_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AEE28D1C5E7001964E4 /* mu_style_eyepupil_05.bundle */; }; + E32A0AF728D1C5E7001964E4 /* mu_style_eyepupil_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AEF28D1C5E7001964E4 /* mu_style_eyepupil_04.bundle */; }; + E32A0AF828D1C5E7001964E4 /* mu_style_eyepupil_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AF028D1C5E7001964E4 /* mu_style_eyepupil_03.bundle */; }; + E32A0AF928D1C5E7001964E4 /* mu_style_eyepupil_08.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AF128D1C5E7001964E4 /* mu_style_eyepupil_08.bundle */; }; + E32A0AFA28D1C5E7001964E4 /* mu_style_eyepupil_09.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AF228D1C5E7001964E4 /* mu_style_eyepupil_09.bundle */; }; + E32A0B0028D1C5F7001964E4 /* mu_style_blush_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AFB28D1C5F7001964E4 /* mu_style_blush_04.bundle */; }; + E32A0B0128D1C5F7001964E4 /* mu_style_blush_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AFC28D1C5F7001964E4 /* mu_style_blush_01.bundle */; }; + E32A0B0228D1C5F7001964E4 /* mu_style_blush_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AFD28D1C5F7001964E4 /* mu_style_blush_02.bundle */; }; + E32A0B0328D1C5F7001964E4 /* mu_style_blush_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AFE28D1C5F7001964E4 /* mu_style_blush_05.bundle */; }; + E32A0B0428D1C5F7001964E4 /* mu_style_blush_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0AFF28D1C5F7001964E4 /* mu_style_blush_03.bundle */; }; + E32A0B0C28D1C60C001964E4 /* mu_style_eyeliner_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0528D1C60C001964E4 /* mu_style_eyeliner_02.bundle */; }; + E32A0B0D28D1C60C001964E4 /* mu_style_eyeliner_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0628D1C60C001964E4 /* mu_style_eyeliner_05.bundle */; }; + E32A0B0E28D1C60C001964E4 /* mu_style_eyeliner_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0728D1C60C001964E4 /* mu_style_eyeliner_06.bundle */; }; + E32A0B0F28D1C60C001964E4 /* mu_style_eyeliner_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0828D1C60C001964E4 /* mu_style_eyeliner_01.bundle */; }; + E32A0B1028D1C60C001964E4 /* mu_style_eyeliner_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0928D1C60C001964E4 /* mu_style_eyeliner_04.bundle */; }; + E32A0B1128D1C60C001964E4 /* mu_style_eyeliner_07.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0A28D1C60C001964E4 /* mu_style_eyeliner_07.bundle */; }; + E32A0B1228D1C60C001964E4 /* mu_style_eyeliner_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B0B28D1C60C001964E4 /* mu_style_eyeliner_03.bundle */; }; + E32A0B1B28D1C619001964E4 /* mu_style_eyeshadow_05.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1328D1C619001964E4 /* mu_style_eyeshadow_05.bundle */; }; + E32A0B1C28D1C619001964E4 /* mu_style_eyeshadow_08.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1428D1C619001964E4 /* mu_style_eyeshadow_08.bundle */; }; + E32A0B1D28D1C619001964E4 /* mu_style_eyeshadow_03.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1528D1C619001964E4 /* mu_style_eyeshadow_03.bundle */; }; + E32A0B1E28D1C619001964E4 /* mu_style_eyeshadow_07.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1628D1C619001964E4 /* mu_style_eyeshadow_07.bundle */; }; + E32A0B1F28D1C619001964E4 /* mu_style_eyeshadow_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1728D1C619001964E4 /* mu_style_eyeshadow_01.bundle */; }; + E32A0B2028D1C619001964E4 /* mu_style_eyeshadow_02.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1828D1C619001964E4 /* mu_style_eyeshadow_02.bundle */; }; + E32A0B2128D1C619001964E4 /* mu_style_eyeshadow_04.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1928D1C619001964E4 /* mu_style_eyeshadow_04.bundle */; }; + E32A0B2228D1C619001964E4 /* mu_style_eyeshadow_06.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B1A28D1C619001964E4 /* mu_style_eyeshadow_06.bundle */; }; + E32A0B2428D1C621001964E4 /* mu_style_contour_01.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E32A0B2328D1C621001964E4 /* mu_style_contour_01.bundle */; }; + E3381CC728DC6B53005C2E57 /* hunxue.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3381CC628DC6B53005C2E57 /* hunxue.bundle */; }; + E3381CC928DC6B70005C2E57 /* hunxue.json in Resources */ = {isa = PBXBuildFile; fileRef = E3381CC828DC6B70005C2E57 /* hunxue.json */; }; + E3381CCF28DC6BA2005C2E57 /* shuirun.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3381CCA28DC6BA1005C2E57 /* shuirun.bundle */; }; + E3381CD028DC6BA2005C2E57 /* wumian.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3381CCB28DC6BA1005C2E57 /* wumian.bundle */; }; + E3381CD128DC6BA2005C2E57 /* zhuguang.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3381CCC28DC6BA2005C2E57 /* zhuguang.bundle */; }; + E3381CD228DC6BA2005C2E57 /* yaochun.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3381CCD28DC6BA2005C2E57 /* yaochun.bundle */; }; + E3381CD328DC6BA2005C2E57 /* runze.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3381CCE28DC6BA2005C2E57 /* runze.bundle */; }; + E369F8D428D851760036AC5A /* FURenderKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E369F8D328D851760036AC5A /* FURenderKit.framework */; }; + E39B4E0028E5A092001DC204 /* rose.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E39B4DFF28E5A092001DC204 /* rose.bundle */; }; + E3A13D4B28C877D9009402A3 /* FUMakeupComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A13D4A28C877D9009402A3 /* FUMakeupComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3A13D6428C878D8009402A3 /* FUCommonUIComponent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3A13D6328C878D8009402A3 /* FUCommonUIComponent.framework */; }; + E3A13D7628C87BB2009402A3 /* FUMakeupDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A13D7428C87BB2009402A3 /* FUMakeupDefine.h */; }; + E3A13D7728C87BB2009402A3 /* FUMakeupDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D7528C87BB2009402A3 /* FUMakeupDefine.m */; }; + E3A13D7A28C87EF5009402A3 /* FUCombinationMakeupView.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D7828C87EF5009402A3 /* FUCombinationMakeupView.m */; }; + E3A13D7B28C87EF5009402A3 /* FUCombinationMakeupView.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A13D7928C87EF5009402A3 /* FUCombinationMakeupView.h */; }; + E3A13D8428C885FA009402A3 /* FUCombinationMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D8228C885FA009402A3 /* FUCombinationMakeupModel.m */; }; + E3A13D8528C885FA009402A3 /* FUCombinationMakeupModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A13D8328C885FA009402A3 /* FUCombinationMakeupModel.h */; }; + E3A13D8828C88691009402A3 /* FUCombinationMakeupViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A13D8628C88691009402A3 /* FUCombinationMakeupViewModel.h */; }; + E3A13D8928C88691009402A3 /* FUCombinationMakeupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D8728C88691009402A3 /* FUCombinationMakeupViewModel.m */; }; + E3A13D9228C991C5009402A3 /* FUSubMakeupModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A13D9028C991C5009402A3 /* FUSubMakeupModel.h */; }; + E3A13D9328C991C5009402A3 /* FUSubMakeupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A13D9128C991C5009402A3 /* FUSubMakeupModel.m */; }; + E3A13DAA28C9BE68009402A3 /* combination_makeups.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DA928C9BE68009402A3 /* combination_makeups.json */; }; + E3A13DC128C9C64E009402A3 /* chuqiu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB028C9C64E009402A3 /* chuqiu.bundle */; }; + E3A13DC228C9C64E009402A3 /* jianling.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB128C9C64E009402A3 /* jianling.bundle */; }; + E3A13DC328C9C64E009402A3 /* hongfeng.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB228C9C64E009402A3 /* hongfeng.bundle */; }; + E3A13DC428C9C64E009402A3 /* ziyun.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB328C9C64E009402A3 /* ziyun.bundle */; }; + E3A13DC628C9C64E009402A3 /* gangfeng.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB528C9C64E009402A3 /* gangfeng.bundle */; }; + E3A13DC728C9C64E009402A3 /* yanshimao.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB628C9C64E009402A3 /* yanshimao.bundle */; }; + E3A13DC828C9C64E009402A3 /* chaomo.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB728C9C64E009402A3 /* chaomo.bundle */; }; + E3A13DC928C9C64E009402A3 /* chuju.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB828C9C64E009402A3 /* chuju.bundle */; }; + E3A13DCA28C9C64E009402A3 /* shaonv.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DB928C9C64E009402A3 /* shaonv.bundle */; }; + E3A13DCB28C9C64E009402A3 /* qianzhihe.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DBA28C9C64E009402A3 /* qianzhihe.bundle */; }; + E3A13DCD28C9C64E009402A3 /* guofeng.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DBC28C9C64E009402A3 /* guofeng.bundle */; }; + E3A13DCE28C9C64E009402A3 /* dongling.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DBD28C9C64E009402A3 /* dongling.bundle */; }; + E3A13DCF28C9C64E009402A3 /* renyu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DBE28C9C64E009402A3 /* renyu.bundle */; }; + E3A13DD028C9C64E009402A3 /* nuandong.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DBF28C9C64E009402A3 /* nuandong.bundle */; }; + E3A13DD128C9C64E009402A3 /* diadiatu.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DC028C9C64E009402A3 /* diadiatu.bundle */; }; + E3A13DD728C9C65D009402A3 /* oumei.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DD228C9C65D009402A3 /* oumei.bundle */; }; + E3A13DD828C9C65D009402A3 /* tianmei.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DD328C9C65D009402A3 /* tianmei.bundle */; }; + E3A13DD928C9C65D009402A3 /* linjia.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DD428C9C65D009402A3 /* linjia.bundle */; }; + E3A13DDA28C9C65D009402A3 /* wumei.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DD528C9C65D009402A3 /* wumei.bundle */; }; + E3A13DDB28C9C65D009402A3 /* xinggan.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DD628C9C65D009402A3 /* xinggan.bundle */; }; + E3A13DE128C9C673009402A3 /* xinggan.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DDC28C9C673009402A3 /* xinggan.json */; }; + E3A13DE228C9C673009402A3 /* tianmei.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DDD28C9C673009402A3 /* tianmei.json */; }; + E3A13DE328C9C673009402A3 /* oumei.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DDE28C9C673009402A3 /* oumei.json */; }; + E3A13DE428C9C673009402A3 /* wumei.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DDF28C9C673009402A3 /* wumei.json */; }; + E3A13DE528C9C673009402A3 /* linjia.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DE028C9C673009402A3 /* linjia.json */; }; + E3A13DF828C9C68F009402A3 /* diadiatu.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DE628C9C68E009402A3 /* diadiatu.json */; }; + E3A13DF928C9C68F009402A3 /* rose.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DE728C9C68E009402A3 /* rose.json */; }; + E3A13DFB28C9C68F009402A3 /* jianling.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DE928C9C68E009402A3 /* jianling.json */; }; + E3A13DFC28C9C68F009402A3 /* shaonv.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DEA28C9C68E009402A3 /* shaonv.json */; }; + E3A13DFD28C9C68F009402A3 /* chuqiu.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DEB28C9C68E009402A3 /* chuqiu.json */; }; + E3A13DFF28C9C68F009402A3 /* renyu.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DED28C9C68E009402A3 /* renyu.json */; }; + E3A13E0028C9C68F009402A3 /* chuju.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DEE28C9C68E009402A3 /* chuju.json */; }; + E3A13E0128C9C68F009402A3 /* guofeng.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DEF28C9C68E009402A3 /* guofeng.json */; }; + E3A13E0228C9C68F009402A3 /* dongling.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF028C9C68F009402A3 /* dongling.json */; }; + E3A13E0328C9C68F009402A3 /* gangfeng.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF128C9C68F009402A3 /* gangfeng.json */; }; + E3A13E0428C9C68F009402A3 /* ziyun.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF228C9C68F009402A3 /* ziyun.json */; }; + E3A13E0528C9C68F009402A3 /* chaomo.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF328C9C68F009402A3 /* chaomo.json */; }; + E3A13E0628C9C68F009402A3 /* nuandong.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF428C9C68F009402A3 /* nuandong.json */; }; + E3A13E0728C9C68F009402A3 /* yanshimao.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF528C9C68F009402A3 /* yanshimao.json */; }; + E3A13E0828C9C68F009402A3 /* qianzhihe.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF628C9C68F009402A3 /* qianzhihe.json */; }; + E3A13E0928C9C68F009402A3 /* hongfeng.json in Resources */ = {isa = PBXBuildFile; fileRef = E3A13DF728C9C68F009402A3 /* hongfeng.json */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + E31FC58928CB290200A90560 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FUMakeupComponent.strings; sourceTree = ""; }; + E31FC58B28CB291600A90560 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FUMakeupComponent.strings"; sourceTree = ""; }; + E31FC58C28CB292900A90560 /* FUMakeupComponent.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = FUMakeupComponent.xcassets; sourceTree = ""; }; + E32A0A8F28D0244D001964E4 /* FUMakeupComponentManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupComponentManager.h; sourceTree = ""; }; + E32A0A9028D0244D001964E4 /* FUMakeupComponentManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupComponentManager.m; sourceTree = ""; }; + E32A0A9B28D04F3F001964E4 /* FUCustomizedMakeupView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUCustomizedMakeupView.m; sourceTree = ""; }; + E32A0A9C28D04F3F001964E4 /* FUCustomizedMakeupView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUCustomizedMakeupView.h; sourceTree = ""; }; + E32A0A9F28D0507E001964E4 /* FUCustomizedMakeupViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCustomizedMakeupViewModel.h; sourceTree = ""; }; + E32A0AA028D0507E001964E4 /* FUCustomizedMakeupViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCustomizedMakeupViewModel.m; sourceTree = ""; }; + E32A0AA328D0561B001964E4 /* FUCustomizedMakeupModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCustomizedMakeupModel.h; sourceTree = ""; }; + E32A0AA428D0561B001964E4 /* FUCustomizedMakeupModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCustomizedMakeupModel.m; sourceTree = ""; }; + E32A0AAD28D0588C001964E4 /* customized_makeups.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = customized_makeups.json; sourceTree = ""; }; + E32A0AAF28D1A260001964E4 /* FUCustomizedMakeupColorPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCustomizedMakeupColorPicker.h; sourceTree = ""; }; + E32A0AB028D1A260001964E4 /* FUCustomizedMakeupColorPicker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCustomizedMakeupColorPicker.m; sourceTree = ""; }; + E32A0ABE28D1C501001964E4 /* mu_style_foundation_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_foundation_01.bundle; sourceTree = ""; }; + E32A0AD328D1C5B5001964E4 /* mu_style_eyebrow_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_04.bundle; sourceTree = ""; }; + E32A0AD428D1C5B5001964E4 /* mu_style_eyebrow_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_03.bundle; sourceTree = ""; }; + E32A0AD528D1C5B5001964E4 /* mu_style_eyebrow_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_01.bundle; sourceTree = ""; }; + E32A0AD628D1C5B5001964E4 /* mu_style_eyebrow_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyebrow_02.bundle; sourceTree = ""; }; + E32A0ADB28D1C5CE001964E4 /* mu_style_highlight_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_highlight_01.bundle; sourceTree = ""; }; + E32A0ADC28D1C5CE001964E4 /* mu_style_highlight_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_highlight_02.bundle; sourceTree = ""; }; + E32A0ADF28D1C5DB001964E4 /* mu_style_eyelash_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyelash_05.bundle; sourceTree = ""; }; + E32A0AE028D1C5DB001964E4 /* mu_style_eyelash_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyelash_03.bundle; sourceTree = ""; }; + E32A0AE128D1C5DB001964E4 /* mu_style_eyelash_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyelash_01.bundle; sourceTree = ""; }; + E32A0AE228D1C5DB001964E4 /* mu_style_eyelash_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyelash_02.bundle; sourceTree = ""; }; + E32A0AE328D1C5DB001964E4 /* mu_style_eyelash_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyelash_06.bundle; sourceTree = ""; }; + E32A0AE428D1C5DB001964E4 /* mu_style_eyelash_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyelash_04.bundle; sourceTree = ""; }; + E32A0AEB28D1C5E6001964E4 /* mu_style_eyepupil_07.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_07.bundle; sourceTree = ""; }; + E32A0AEC28D1C5E6001964E4 /* mu_style_eyepupil_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_06.bundle; sourceTree = ""; }; + E32A0AED28D1C5E6001964E4 /* mu_style_eyepupil_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_01.bundle; sourceTree = ""; }; + E32A0AEE28D1C5E7001964E4 /* mu_style_eyepupil_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_05.bundle; sourceTree = ""; }; + E32A0AEF28D1C5E7001964E4 /* mu_style_eyepupil_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_04.bundle; sourceTree = ""; }; + E32A0AF028D1C5E7001964E4 /* mu_style_eyepupil_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_03.bundle; sourceTree = ""; }; + E32A0AF128D1C5E7001964E4 /* mu_style_eyepupil_08.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_08.bundle; sourceTree = ""; }; + E32A0AF228D1C5E7001964E4 /* mu_style_eyepupil_09.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyepupil_09.bundle; sourceTree = ""; }; + E32A0AFB28D1C5F7001964E4 /* mu_style_blush_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_blush_04.bundle; sourceTree = ""; }; + E32A0AFC28D1C5F7001964E4 /* mu_style_blush_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_blush_01.bundle; sourceTree = ""; }; + E32A0AFD28D1C5F7001964E4 /* mu_style_blush_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_blush_02.bundle; sourceTree = ""; }; + E32A0AFE28D1C5F7001964E4 /* mu_style_blush_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_blush_05.bundle; sourceTree = ""; }; + E32A0AFF28D1C5F7001964E4 /* mu_style_blush_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_blush_03.bundle; sourceTree = ""; }; + E32A0B0528D1C60C001964E4 /* mu_style_eyeliner_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_02.bundle; sourceTree = ""; }; + E32A0B0628D1C60C001964E4 /* mu_style_eyeliner_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_05.bundle; sourceTree = ""; }; + E32A0B0728D1C60C001964E4 /* mu_style_eyeliner_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_06.bundle; sourceTree = ""; }; + E32A0B0828D1C60C001964E4 /* mu_style_eyeliner_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_01.bundle; sourceTree = ""; }; + E32A0B0928D1C60C001964E4 /* mu_style_eyeliner_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_04.bundle; sourceTree = ""; }; + E32A0B0A28D1C60C001964E4 /* mu_style_eyeliner_07.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_07.bundle; sourceTree = ""; }; + E32A0B0B28D1C60C001964E4 /* mu_style_eyeliner_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeliner_03.bundle; sourceTree = ""; }; + E32A0B1328D1C619001964E4 /* mu_style_eyeshadow_05.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_05.bundle; sourceTree = ""; }; + E32A0B1428D1C619001964E4 /* mu_style_eyeshadow_08.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_08.bundle; sourceTree = ""; }; + E32A0B1528D1C619001964E4 /* mu_style_eyeshadow_03.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_03.bundle; sourceTree = ""; }; + E32A0B1628D1C619001964E4 /* mu_style_eyeshadow_07.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_07.bundle; sourceTree = ""; }; + E32A0B1728D1C619001964E4 /* mu_style_eyeshadow_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_01.bundle; sourceTree = ""; }; + E32A0B1828D1C619001964E4 /* mu_style_eyeshadow_02.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_02.bundle; sourceTree = ""; }; + E32A0B1928D1C619001964E4 /* mu_style_eyeshadow_04.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_04.bundle; sourceTree = ""; }; + E32A0B1A28D1C619001964E4 /* mu_style_eyeshadow_06.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_eyeshadow_06.bundle; sourceTree = ""; }; + E32A0B2328D1C621001964E4 /* mu_style_contour_01.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = mu_style_contour_01.bundle; sourceTree = ""; }; + E3381CC628DC6B53005C2E57 /* hunxue.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = hunxue.bundle; path = FUMakeupComponent/Resource/CombinationMakeup/Bundle/hunxue.bundle; sourceTree = SOURCE_ROOT; }; + E3381CC828DC6B70005C2E57 /* hunxue.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = hunxue.json; sourceTree = ""; }; + E3381CCA28DC6BA1005C2E57 /* shuirun.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = shuirun.bundle; sourceTree = ""; }; + E3381CCB28DC6BA1005C2E57 /* wumian.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = wumian.bundle; sourceTree = ""; }; + E3381CCC28DC6BA2005C2E57 /* zhuguang.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = zhuguang.bundle; sourceTree = ""; }; + E3381CCD28DC6BA2005C2E57 /* yaochun.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = yaochun.bundle; sourceTree = ""; }; + E3381CCE28DC6BA2005C2E57 /* runze.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = runze.bundle; sourceTree = ""; }; + E369F8D328D851760036AC5A /* FURenderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FURenderKit.framework; path = ../FULiveDemo/FURenderKit/FURenderKit.framework; sourceTree = ""; }; + E39B4DFF28E5A092001DC204 /* rose.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = rose.bundle; sourceTree = ""; }; + E3A13D4728C877D9009402A3 /* FUMakeupComponent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FUMakeupComponent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E3A13D4A28C877D9009402A3 /* FUMakeupComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupComponent.h; sourceTree = ""; }; + E3A13D6328C878D8009402A3 /* FUCommonUIComponent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = FUCommonUIComponent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E3A13D7428C87BB2009402A3 /* FUMakeupDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUMakeupDefine.h; sourceTree = ""; }; + E3A13D7528C87BB2009402A3 /* FUMakeupDefine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUMakeupDefine.m; sourceTree = ""; }; + E3A13D7828C87EF5009402A3 /* FUCombinationMakeupView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUCombinationMakeupView.m; sourceTree = ""; }; + E3A13D7928C87EF5009402A3 /* FUCombinationMakeupView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUCombinationMakeupView.h; sourceTree = ""; }; + E3A13D8228C885FA009402A3 /* FUCombinationMakeupModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUCombinationMakeupModel.m; sourceTree = ""; }; + E3A13D8328C885FA009402A3 /* FUCombinationMakeupModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUCombinationMakeupModel.h; sourceTree = ""; }; + E3A13D8628C88691009402A3 /* FUCombinationMakeupViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUCombinationMakeupViewModel.h; sourceTree = ""; }; + E3A13D8728C88691009402A3 /* FUCombinationMakeupViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUCombinationMakeupViewModel.m; sourceTree = ""; }; + E3A13D9028C991C5009402A3 /* FUSubMakeupModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSubMakeupModel.h; sourceTree = ""; }; + E3A13D9128C991C5009402A3 /* FUSubMakeupModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSubMakeupModel.m; sourceTree = ""; }; + E3A13DA928C9BE68009402A3 /* combination_makeups.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = combination_makeups.json; sourceTree = ""; }; + E3A13DB028C9C64E009402A3 /* chuqiu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = chuqiu.bundle; sourceTree = ""; }; + E3A13DB128C9C64E009402A3 /* jianling.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = jianling.bundle; sourceTree = ""; }; + E3A13DB228C9C64E009402A3 /* hongfeng.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hongfeng.bundle; sourceTree = ""; }; + E3A13DB328C9C64E009402A3 /* ziyun.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = ziyun.bundle; sourceTree = ""; }; + E3A13DB528C9C64E009402A3 /* gangfeng.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = gangfeng.bundle; sourceTree = ""; }; + E3A13DB628C9C64E009402A3 /* yanshimao.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = yanshimao.bundle; sourceTree = ""; }; + E3A13DB728C9C64E009402A3 /* chaomo.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = chaomo.bundle; sourceTree = ""; }; + E3A13DB828C9C64E009402A3 /* chuju.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = chuju.bundle; sourceTree = ""; }; + E3A13DB928C9C64E009402A3 /* shaonv.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = shaonv.bundle; sourceTree = ""; }; + E3A13DBA28C9C64E009402A3 /* qianzhihe.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = qianzhihe.bundle; sourceTree = ""; }; + E3A13DBC28C9C64E009402A3 /* guofeng.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = guofeng.bundle; sourceTree = ""; }; + E3A13DBD28C9C64E009402A3 /* dongling.bundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dongling.bundle; sourceTree = ""; }; + E3A13DBE28C9C64E009402A3 /* renyu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = renyu.bundle; sourceTree = ""; }; + E3A13DBF28C9C64E009402A3 /* nuandong.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = nuandong.bundle; sourceTree = ""; }; + E3A13DC028C9C64E009402A3 /* diadiatu.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = diadiatu.bundle; sourceTree = ""; }; + E3A13DD228C9C65D009402A3 /* oumei.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = oumei.bundle; sourceTree = ""; }; + E3A13DD328C9C65D009402A3 /* tianmei.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = tianmei.bundle; sourceTree = ""; }; + E3A13DD428C9C65D009402A3 /* linjia.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = linjia.bundle; sourceTree = ""; }; + E3A13DD528C9C65D009402A3 /* wumei.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = wumei.bundle; sourceTree = ""; }; + E3A13DD628C9C65D009402A3 /* xinggan.bundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = xinggan.bundle; sourceTree = ""; }; + E3A13DDC28C9C673009402A3 /* xinggan.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = xinggan.json; sourceTree = ""; }; + E3A13DDD28C9C673009402A3 /* tianmei.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tianmei.json; sourceTree = ""; }; + E3A13DDE28C9C673009402A3 /* oumei.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = oumei.json; sourceTree = ""; }; + E3A13DDF28C9C673009402A3 /* wumei.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = wumei.json; sourceTree = ""; }; + E3A13DE028C9C673009402A3 /* linjia.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = linjia.json; sourceTree = ""; }; + E3A13DE628C9C68E009402A3 /* diadiatu.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = diadiatu.json; sourceTree = ""; }; + E3A13DE728C9C68E009402A3 /* rose.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = rose.json; sourceTree = ""; }; + E3A13DE928C9C68E009402A3 /* jianling.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = jianling.json; sourceTree = ""; }; + E3A13DEA28C9C68E009402A3 /* shaonv.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = shaonv.json; sourceTree = ""; }; + E3A13DEB28C9C68E009402A3 /* chuqiu.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chuqiu.json; sourceTree = ""; }; + E3A13DED28C9C68E009402A3 /* renyu.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = renyu.json; sourceTree = ""; }; + E3A13DEE28C9C68E009402A3 /* chuju.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chuju.json; sourceTree = ""; }; + E3A13DEF28C9C68E009402A3 /* guofeng.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = guofeng.json; sourceTree = ""; }; + E3A13DF028C9C68F009402A3 /* dongling.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dongling.json; sourceTree = ""; }; + E3A13DF128C9C68F009402A3 /* gangfeng.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = gangfeng.json; sourceTree = ""; }; + E3A13DF228C9C68F009402A3 /* ziyun.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ziyun.json; sourceTree = ""; }; + E3A13DF328C9C68F009402A3 /* chaomo.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chaomo.json; sourceTree = ""; }; + E3A13DF428C9C68F009402A3 /* nuandong.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = nuandong.json; sourceTree = ""; }; + E3A13DF528C9C68F009402A3 /* yanshimao.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = yanshimao.json; sourceTree = ""; }; + E3A13DF628C9C68F009402A3 /* qianzhihe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = qianzhihe.json; sourceTree = ""; }; + E3A13DF728C9C68F009402A3 /* hongfeng.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = hongfeng.json; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E3A13D4428C877D9009402A3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E369F8D428D851760036AC5A /* FURenderKit.framework in Frameworks */, + E3A13D6428C878D8009402A3 /* FUCommonUIComponent.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + E31FC58528CB26A000A90560 /* CustomizedMakeup */ = { + isa = PBXGroup; + children = ( + E32A0ABD28D1C4F3001964E4 /* Foundataion */, + E32A0AC028D1C503001964E4 /* Lip */, + E32A0AD228D1C565001964E4 /* Blusher */, + E32A0ACC28D1C532001964E4 /* Eyebrow */, + E32A0ACD28D1C539001964E4 /* EyeShadow */, + E32A0ACE28D1C540001964E4 /* Eyeliner */, + E32A0ACF28D1C54C001964E4 /* Eyelash */, + E32A0ACB28D1C528001964E4 /* Highlight */, + E32A0AD028D1C552001964E4 /* Shadow */, + E32A0AD128D1C55A001964E4 /* Pupil */, + E32A0AAD28D0588C001964E4 /* customized_makeups.json */, + ); + path = CustomizedMakeup; + sourceTree = ""; + }; + E32A0ABD28D1C4F3001964E4 /* Foundataion */ = { + isa = PBXGroup; + children = ( + E32A0ABE28D1C501001964E4 /* mu_style_foundation_01.bundle */, + ); + path = Foundataion; + sourceTree = ""; + }; + E32A0AC028D1C503001964E4 /* Lip */ = { + isa = PBXGroup; + children = ( + E3381CCE28DC6BA2005C2E57 /* runze.bundle */, + E3381CCA28DC6BA1005C2E57 /* shuirun.bundle */, + E3381CCB28DC6BA1005C2E57 /* wumian.bundle */, + E3381CCD28DC6BA2005C2E57 /* yaochun.bundle */, + E3381CCC28DC6BA2005C2E57 /* zhuguang.bundle */, + ); + path = Lip; + sourceTree = ""; + }; + E32A0ACB28D1C528001964E4 /* Highlight */ = { + isa = PBXGroup; + children = ( + E32A0ADB28D1C5CE001964E4 /* mu_style_highlight_01.bundle */, + E32A0ADC28D1C5CE001964E4 /* mu_style_highlight_02.bundle */, + ); + path = Highlight; + sourceTree = ""; + }; + E32A0ACC28D1C532001964E4 /* Eyebrow */ = { + isa = PBXGroup; + children = ( + E32A0AD528D1C5B5001964E4 /* mu_style_eyebrow_01.bundle */, + E32A0AD628D1C5B5001964E4 /* mu_style_eyebrow_02.bundle */, + E32A0AD428D1C5B5001964E4 /* mu_style_eyebrow_03.bundle */, + E32A0AD328D1C5B5001964E4 /* mu_style_eyebrow_04.bundle */, + ); + path = Eyebrow; + sourceTree = ""; + }; + E32A0ACD28D1C539001964E4 /* EyeShadow */ = { + isa = PBXGroup; + children = ( + E32A0B1728D1C619001964E4 /* mu_style_eyeshadow_01.bundle */, + E32A0B1828D1C619001964E4 /* mu_style_eyeshadow_02.bundle */, + E32A0B1528D1C619001964E4 /* mu_style_eyeshadow_03.bundle */, + E32A0B1928D1C619001964E4 /* mu_style_eyeshadow_04.bundle */, + E32A0B1328D1C619001964E4 /* mu_style_eyeshadow_05.bundle */, + E32A0B1A28D1C619001964E4 /* mu_style_eyeshadow_06.bundle */, + E32A0B1628D1C619001964E4 /* mu_style_eyeshadow_07.bundle */, + E32A0B1428D1C619001964E4 /* mu_style_eyeshadow_08.bundle */, + ); + path = EyeShadow; + sourceTree = ""; + }; + E32A0ACE28D1C540001964E4 /* Eyeliner */ = { + isa = PBXGroup; + children = ( + E32A0B0828D1C60C001964E4 /* mu_style_eyeliner_01.bundle */, + E32A0B0528D1C60C001964E4 /* mu_style_eyeliner_02.bundle */, + E32A0B0B28D1C60C001964E4 /* mu_style_eyeliner_03.bundle */, + E32A0B0928D1C60C001964E4 /* mu_style_eyeliner_04.bundle */, + E32A0B0628D1C60C001964E4 /* mu_style_eyeliner_05.bundle */, + E32A0B0728D1C60C001964E4 /* mu_style_eyeliner_06.bundle */, + E32A0B0A28D1C60C001964E4 /* mu_style_eyeliner_07.bundle */, + ); + path = Eyeliner; + sourceTree = ""; + }; + E32A0ACF28D1C54C001964E4 /* Eyelash */ = { + isa = PBXGroup; + children = ( + E32A0AE128D1C5DB001964E4 /* mu_style_eyelash_01.bundle */, + E32A0AE228D1C5DB001964E4 /* mu_style_eyelash_02.bundle */, + E32A0AE028D1C5DB001964E4 /* mu_style_eyelash_03.bundle */, + E32A0AE428D1C5DB001964E4 /* mu_style_eyelash_04.bundle */, + E32A0ADF28D1C5DB001964E4 /* mu_style_eyelash_05.bundle */, + E32A0AE328D1C5DB001964E4 /* mu_style_eyelash_06.bundle */, + ); + path = Eyelash; + sourceTree = ""; + }; + E32A0AD028D1C552001964E4 /* Shadow */ = { + isa = PBXGroup; + children = ( + E32A0B2328D1C621001964E4 /* mu_style_contour_01.bundle */, + ); + path = Shadow; + sourceTree = ""; + }; + E32A0AD128D1C55A001964E4 /* Pupil */ = { + isa = PBXGroup; + children = ( + E32A0AED28D1C5E6001964E4 /* mu_style_eyepupil_01.bundle */, + E32A0AF028D1C5E7001964E4 /* mu_style_eyepupil_03.bundle */, + E32A0AEF28D1C5E7001964E4 /* mu_style_eyepupil_04.bundle */, + E32A0AEE28D1C5E7001964E4 /* mu_style_eyepupil_05.bundle */, + E32A0AEC28D1C5E6001964E4 /* mu_style_eyepupil_06.bundle */, + E32A0AEB28D1C5E6001964E4 /* mu_style_eyepupil_07.bundle */, + E32A0AF128D1C5E7001964E4 /* mu_style_eyepupil_08.bundle */, + E32A0AF228D1C5E7001964E4 /* mu_style_eyepupil_09.bundle */, + ); + path = Pupil; + sourceTree = ""; + }; + E32A0AD228D1C565001964E4 /* Blusher */ = { + isa = PBXGroup; + children = ( + E32A0AFC28D1C5F7001964E4 /* mu_style_blush_01.bundle */, + E32A0AFD28D1C5F7001964E4 /* mu_style_blush_02.bundle */, + E32A0AFF28D1C5F7001964E4 /* mu_style_blush_03.bundle */, + E32A0AFB28D1C5F7001964E4 /* mu_style_blush_04.bundle */, + E32A0AFE28D1C5F7001964E4 /* mu_style_blush_05.bundle */, + ); + path = Blusher; + sourceTree = ""; + }; + E3A13D3D28C877D9009402A3 = { + isa = PBXGroup; + children = ( + E3A13D4928C877D9009402A3 /* FUMakeupComponent */, + E3A13D4828C877D9009402A3 /* Products */, + E3A13D5E28C878D0009402A3 /* Frameworks */, + ); + sourceTree = ""; + }; + E3A13D4828C877D9009402A3 /* Products */ = { + isa = PBXGroup; + children = ( + E3A13D4728C877D9009402A3 /* FUMakeupComponent.framework */, + ); + name = Products; + sourceTree = ""; + }; + E3A13D4928C877D9009402A3 /* FUMakeupComponent */ = { + isa = PBXGroup; + children = ( + E3A13D7328C87B75009402A3 /* Model */, + E3A13D7228C87B71009402A3 /* View */, + E3A13D7128C87B6C009402A3 /* ViewModel */, + E3A13D7028C87B66009402A3 /* Resource */, + E3A13D4A28C877D9009402A3 /* FUMakeupComponent.h */, + E3A13D7428C87BB2009402A3 /* FUMakeupDefine.h */, + E3A13D7528C87BB2009402A3 /* FUMakeupDefine.m */, + E32A0A8F28D0244D001964E4 /* FUMakeupComponentManager.h */, + E32A0A9028D0244D001964E4 /* FUMakeupComponentManager.m */, + ); + path = FUMakeupComponent; + sourceTree = ""; + }; + E3A13D5E28C878D0009402A3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E3A13D6328C878D8009402A3 /* FUCommonUIComponent.framework */, + E369F8D328D851760036AC5A /* FURenderKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E3A13D7028C87B66009402A3 /* Resource */ = { + isa = PBXGroup; + children = ( + E31FC58528CB26A000A90560 /* CustomizedMakeup */, + E3A13DAD28C9C43A009402A3 /* CombinationMakeup */, + E31FC58A28CB290200A90560 /* FUMakeupComponent.strings */, + E31FC58C28CB292900A90560 /* FUMakeupComponent.xcassets */, + ); + path = Resource; + sourceTree = ""; + }; + E3A13D7128C87B6C009402A3 /* ViewModel */ = { + isa = PBXGroup; + children = ( + E3A13D8628C88691009402A3 /* FUCombinationMakeupViewModel.h */, + E3A13D8728C88691009402A3 /* FUCombinationMakeupViewModel.m */, + E32A0A9F28D0507E001964E4 /* FUCustomizedMakeupViewModel.h */, + E32A0AA028D0507E001964E4 /* FUCustomizedMakeupViewModel.m */, + ); + path = ViewModel; + sourceTree = ""; + }; + E3A13D7228C87B71009402A3 /* View */ = { + isa = PBXGroup; + children = ( + E3A13D7928C87EF5009402A3 /* FUCombinationMakeupView.h */, + E3A13D7828C87EF5009402A3 /* FUCombinationMakeupView.m */, + E32A0A9C28D04F3F001964E4 /* FUCustomizedMakeupView.h */, + E32A0A9B28D04F3F001964E4 /* FUCustomizedMakeupView.m */, + E32A0AAF28D1A260001964E4 /* FUCustomizedMakeupColorPicker.h */, + E32A0AB028D1A260001964E4 /* FUCustomizedMakeupColorPicker.m */, + ); + path = View; + sourceTree = ""; + }; + E3A13D7328C87B75009402A3 /* Model */ = { + isa = PBXGroup; + children = ( + E3A13D8328C885FA009402A3 /* FUCombinationMakeupModel.h */, + E3A13D8228C885FA009402A3 /* FUCombinationMakeupModel.m */, + E32A0AA328D0561B001964E4 /* FUCustomizedMakeupModel.h */, + E32A0AA428D0561B001964E4 /* FUCustomizedMakeupModel.m */, + E3A13D9028C991C5009402A3 /* FUSubMakeupModel.h */, + E3A13D9128C991C5009402A3 /* FUSubMakeupModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E3A13DAD28C9C43A009402A3 /* CombinationMakeup */ = { + isa = PBXGroup; + children = ( + E3A13DA928C9BE68009402A3 /* combination_makeups.json */, + E3A13DAF28C9C44E009402A3 /* JSON */, + E3A13DAE28C9C447009402A3 /* Bundle */, + ); + path = CombinationMakeup; + sourceTree = ""; + }; + E3A13DAE28C9C447009402A3 /* Bundle */ = { + isa = PBXGroup; + children = ( + E3A13DD428C9C65D009402A3 /* linjia.bundle */, + E3A13DD228C9C65D009402A3 /* oumei.bundle */, + E3A13DD328C9C65D009402A3 /* tianmei.bundle */, + E3A13DD528C9C65D009402A3 /* wumei.bundle */, + E3A13DD628C9C65D009402A3 /* xinggan.bundle */, + E3A13DB728C9C64E009402A3 /* chaomo.bundle */, + E3A13DB828C9C64E009402A3 /* chuju.bundle */, + E3A13DB028C9C64E009402A3 /* chuqiu.bundle */, + E3A13DC028C9C64E009402A3 /* diadiatu.bundle */, + E3A13DBD28C9C64E009402A3 /* dongling.bundle */, + E3A13DB528C9C64E009402A3 /* gangfeng.bundle */, + E3A13DBC28C9C64E009402A3 /* guofeng.bundle */, + E3A13DB228C9C64E009402A3 /* hongfeng.bundle */, + E3381CC628DC6B53005C2E57 /* hunxue.bundle */, + E3A13DB128C9C64E009402A3 /* jianling.bundle */, + E3A13DBF28C9C64E009402A3 /* nuandong.bundle */, + E3A13DBA28C9C64E009402A3 /* qianzhihe.bundle */, + E39B4DFF28E5A092001DC204 /* rose.bundle */, + E3A13DBE28C9C64E009402A3 /* renyu.bundle */, + E3A13DB928C9C64E009402A3 /* shaonv.bundle */, + E3A13DB628C9C64E009402A3 /* yanshimao.bundle */, + E3A13DB328C9C64E009402A3 /* ziyun.bundle */, + ); + path = Bundle; + sourceTree = ""; + }; + E3A13DAF28C9C44E009402A3 /* JSON */ = { + isa = PBXGroup; + children = ( + E3A13DF328C9C68F009402A3 /* chaomo.json */, + E3A13DEE28C9C68E009402A3 /* chuju.json */, + E3A13DEB28C9C68E009402A3 /* chuqiu.json */, + E3A13DE628C9C68E009402A3 /* diadiatu.json */, + E3A13DF028C9C68F009402A3 /* dongling.json */, + E3A13DF128C9C68F009402A3 /* gangfeng.json */, + E3A13DEF28C9C68E009402A3 /* guofeng.json */, + E3381CC828DC6B70005C2E57 /* hunxue.json */, + E3A13DF728C9C68F009402A3 /* hongfeng.json */, + E3A13DE928C9C68E009402A3 /* jianling.json */, + E3A13DF428C9C68F009402A3 /* nuandong.json */, + E3A13DF628C9C68F009402A3 /* qianzhihe.json */, + E3A13DED28C9C68E009402A3 /* renyu.json */, + E3A13DE728C9C68E009402A3 /* rose.json */, + E3A13DEA28C9C68E009402A3 /* shaonv.json */, + E3A13DF528C9C68F009402A3 /* yanshimao.json */, + E3A13DF228C9C68F009402A3 /* ziyun.json */, + E3A13DE028C9C673009402A3 /* linjia.json */, + E3A13DDE28C9C673009402A3 /* oumei.json */, + E3A13DDD28C9C673009402A3 /* tianmei.json */, + E3A13DDF28C9C673009402A3 /* wumei.json */, + E3A13DDC28C9C673009402A3 /* xinggan.json */, + ); + path = JSON; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + E3A13D4228C877D9009402A3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A13D8828C88691009402A3 /* FUCombinationMakeupViewModel.h in Headers */, + E3A13D9228C991C5009402A3 /* FUSubMakeupModel.h in Headers */, + E32A0A9128D0244D001964E4 /* FUMakeupComponentManager.h in Headers */, + E32A0AA528D0561B001964E4 /* FUCustomizedMakeupModel.h in Headers */, + E3A13D4B28C877D9009402A3 /* FUMakeupComponent.h in Headers */, + E3A13D7B28C87EF5009402A3 /* FUCombinationMakeupView.h in Headers */, + E32A0AB128D1A260001964E4 /* FUCustomizedMakeupColorPicker.h in Headers */, + E3A13D8528C885FA009402A3 /* FUCombinationMakeupModel.h in Headers */, + E32A0A9E28D04F3F001964E4 /* FUCustomizedMakeupView.h in Headers */, + E3A13D7628C87BB2009402A3 /* FUMakeupDefine.h in Headers */, + E32A0AA128D0507E001964E4 /* FUCustomizedMakeupViewModel.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + E3A13D4628C877D9009402A3 /* FUMakeupComponent */ = { + isa = PBXNativeTarget; + buildConfigurationList = E3A13D4E28C877D9009402A3 /* Build configuration list for PBXNativeTarget "FUMakeupComponent" */; + buildPhases = ( + E3A13D4228C877D9009402A3 /* Headers */, + E3A13D4328C877D9009402A3 /* Sources */, + E3A13D4428C877D9009402A3 /* Frameworks */, + E3A13D4528C877D9009402A3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FUMakeupComponent; + productName = FUMakeupComponent; + productReference = E3A13D4728C877D9009402A3 /* FUMakeupComponent.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E3A13D3E28C877D9009402A3 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1340; + TargetAttributes = { + E3A13D4628C877D9009402A3 = { + CreatedOnToolsVersion = 13.4.1; + }; + }; + }; + buildConfigurationList = E3A13D4128C877D9009402A3 /* Build configuration list for PBXProject "FUMakeupComponent" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + "zh-Hans", + ); + mainGroup = E3A13D3D28C877D9009402A3; + productRefGroup = E3A13D4828C877D9009402A3 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E3A13D4628C877D9009402A3 /* FUMakeupComponent */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E3A13D4528C877D9009402A3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A13E0528C9C68F009402A3 /* chaomo.json in Resources */, + E3A13DE428C9C673009402A3 /* wumei.json in Resources */, + E3A13DFB28C9C68F009402A3 /* jianling.json in Resources */, + E32A0AD728D1C5B5001964E4 /* mu_style_eyebrow_04.bundle in Resources */, + E32A0B1228D1C60C001964E4 /* mu_style_eyeliner_03.bundle in Resources */, + E3A13E0428C9C68F009402A3 /* ziyun.json in Resources */, + E3A13DC428C9C64E009402A3 /* ziyun.bundle in Resources */, + E32A0B0328D1C5F7001964E4 /* mu_style_blush_05.bundle in Resources */, + E3381CC928DC6B70005C2E57 /* hunxue.json in Resources */, + E3A13DC728C9C64E009402A3 /* yanshimao.bundle in Resources */, + E32A0AAE28D0588C001964E4 /* customized_makeups.json in Resources */, + E32A0B1128D1C60C001964E4 /* mu_style_eyeliner_07.bundle in Resources */, + E32A0B0228D1C5F7001964E4 /* mu_style_blush_02.bundle in Resources */, + E3A13DC228C9C64E009402A3 /* jianling.bundle in Resources */, + E32A0AF728D1C5E7001964E4 /* mu_style_eyepupil_04.bundle in Resources */, + E3A13E0028C9C68F009402A3 /* chuju.json in Resources */, + E32A0AE528D1C5DB001964E4 /* mu_style_eyelash_05.bundle in Resources */, + E32A0B1E28D1C619001964E4 /* mu_style_eyeshadow_07.bundle in Resources */, + E3A13E0228C9C68F009402A3 /* dongling.json in Resources */, + E3A13DCA28C9C64E009402A3 /* shaonv.bundle in Resources */, + E32A0AE928D1C5DB001964E4 /* mu_style_eyelash_06.bundle in Resources */, + E3A13DDA28C9C65D009402A3 /* wumei.bundle in Resources */, + E32A0AD828D1C5B5001964E4 /* mu_style_eyebrow_03.bundle in Resources */, + E32A0AF528D1C5E7001964E4 /* mu_style_eyepupil_01.bundle in Resources */, + E32A0B0028D1C5F7001964E4 /* mu_style_blush_04.bundle in Resources */, + E32A0AE628D1C5DB001964E4 /* mu_style_eyelash_03.bundle in Resources */, + E3A13DFD28C9C68F009402A3 /* chuqiu.json in Resources */, + E32A0AEA28D1C5DB001964E4 /* mu_style_eyelash_04.bundle in Resources */, + E32A0B2428D1C621001964E4 /* mu_style_contour_01.bundle in Resources */, + E32A0AF828D1C5E7001964E4 /* mu_style_eyepupil_03.bundle in Resources */, + E3A13DCB28C9C64E009402A3 /* qianzhihe.bundle in Resources */, + E32A0AF928D1C5E7001964E4 /* mu_style_eyepupil_08.bundle in Resources */, + E32A0ADE28D1C5CF001964E4 /* mu_style_highlight_02.bundle in Resources */, + E3A13DE128C9C673009402A3 /* xinggan.json in Resources */, + E32A0B0F28D1C60C001964E4 /* mu_style_eyeliner_01.bundle in Resources */, + E3A13DF928C9C68F009402A3 /* rose.json in Resources */, + E3A13DE328C9C673009402A3 /* oumei.json in Resources */, + E32A0B0E28D1C60C001964E4 /* mu_style_eyeliner_06.bundle in Resources */, + E3A13DF828C9C68F009402A3 /* diadiatu.json in Resources */, + E3381CD128DC6BA2005C2E57 /* zhuguang.bundle in Resources */, + E3A13DD728C9C65D009402A3 /* oumei.bundle in Resources */, + E31FC58D28CB292900A90560 /* FUMakeupComponent.xcassets in Resources */, + E3381CC728DC6B53005C2E57 /* hunxue.bundle in Resources */, + E3A13DCF28C9C64E009402A3 /* renyu.bundle in Resources */, + E32A0AF328D1C5E7001964E4 /* mu_style_eyepupil_07.bundle in Resources */, + E3A13DD828C9C65D009402A3 /* tianmei.bundle in Resources */, + E32A0B1B28D1C619001964E4 /* mu_style_eyeshadow_05.bundle in Resources */, + E3A13DDB28C9C65D009402A3 /* xinggan.bundle in Resources */, + E3A13DC128C9C64E009402A3 /* chuqiu.bundle in Resources */, + E32A0B1028D1C60C001964E4 /* mu_style_eyeliner_04.bundle in Resources */, + E3A13DC928C9C64E009402A3 /* chuju.bundle in Resources */, + E3381CD328DC6BA2005C2E57 /* runze.bundle in Resources */, + E32A0AF628D1C5E7001964E4 /* mu_style_eyepupil_05.bundle in Resources */, + E3A13DD128C9C64E009402A3 /* diadiatu.bundle in Resources */, + E32A0B1F28D1C619001964E4 /* mu_style_eyeshadow_01.bundle in Resources */, + E32A0B0128D1C5F7001964E4 /* mu_style_blush_01.bundle in Resources */, + E3A13DC828C9C64E009402A3 /* chaomo.bundle in Resources */, + E32A0B2228D1C619001964E4 /* mu_style_eyeshadow_06.bundle in Resources */, + E32A0B2028D1C619001964E4 /* mu_style_eyeshadow_02.bundle in Resources */, + E32A0B0428D1C5F7001964E4 /* mu_style_blush_03.bundle in Resources */, + E3A13E0128C9C68F009402A3 /* guofeng.json in Resources */, + E3A13DAA28C9BE68009402A3 /* combination_makeups.json in Resources */, + E31FC58828CB290200A90560 /* FUMakeupComponent.strings in Resources */, + E32A0ADA28D1C5B5001964E4 /* mu_style_eyebrow_02.bundle in Resources */, + E3A13DC328C9C64E009402A3 /* hongfeng.bundle in Resources */, + E3381CCF28DC6BA2005C2E57 /* shuirun.bundle in Resources */, + E32A0ABF28D1C501001964E4 /* mu_style_foundation_01.bundle in Resources */, + E32A0ADD28D1C5CF001964E4 /* mu_style_highlight_01.bundle in Resources */, + E3A13E0928C9C68F009402A3 /* hongfeng.json in Resources */, + E3A13DE228C9C673009402A3 /* tianmei.json in Resources */, + E3381CD028DC6BA2005C2E57 /* wumian.bundle in Resources */, + E3A13E0628C9C68F009402A3 /* nuandong.json in Resources */, + E32A0AE728D1C5DB001964E4 /* mu_style_eyelash_01.bundle in Resources */, + E32A0B0D28D1C60C001964E4 /* mu_style_eyeliner_05.bundle in Resources */, + E3A13DFC28C9C68F009402A3 /* shaonv.json in Resources */, + E3A13E0828C9C68F009402A3 /* qianzhihe.json in Resources */, + E32A0B1D28D1C619001964E4 /* mu_style_eyeshadow_03.bundle in Resources */, + E3A13E0728C9C68F009402A3 /* yanshimao.json in Resources */, + E3381CD228DC6BA2005C2E57 /* yaochun.bundle in Resources */, + E32A0B0C28D1C60C001964E4 /* mu_style_eyeliner_02.bundle in Resources */, + E3A13DE528C9C673009402A3 /* linjia.json in Resources */, + E39B4E0028E5A092001DC204 /* rose.bundle in Resources */, + E3A13DC628C9C64E009402A3 /* gangfeng.bundle in Resources */, + E3A13E0328C9C68F009402A3 /* gangfeng.json in Resources */, + E32A0AD928D1C5B5001964E4 /* mu_style_eyebrow_01.bundle in Resources */, + E3A13DD928C9C65D009402A3 /* linjia.bundle in Resources */, + E32A0B2128D1C619001964E4 /* mu_style_eyeshadow_04.bundle in Resources */, + E3A13DD028C9C64E009402A3 /* nuandong.bundle in Resources */, + E3A13DFF28C9C68F009402A3 /* renyu.json in Resources */, + E3A13DCE28C9C64E009402A3 /* dongling.bundle in Resources */, + E3A13DCD28C9C64E009402A3 /* guofeng.bundle in Resources */, + E32A0AF428D1C5E7001964E4 /* mu_style_eyepupil_06.bundle in Resources */, + E32A0B1C28D1C619001964E4 /* mu_style_eyeshadow_08.bundle in Resources */, + E32A0AE828D1C5DB001964E4 /* mu_style_eyelash_02.bundle in Resources */, + E32A0AFA28D1C5E7001964E4 /* mu_style_eyepupil_09.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E3A13D4328C877D9009402A3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A13D7A28C87EF5009402A3 /* FUCombinationMakeupView.m in Sources */, + E32A0AA228D0507E001964E4 /* FUCustomizedMakeupViewModel.m in Sources */, + E3A13D8428C885FA009402A3 /* FUCombinationMakeupModel.m in Sources */, + E32A0AA628D0561B001964E4 /* FUCustomizedMakeupModel.m in Sources */, + E32A0A9D28D04F3F001964E4 /* FUCustomizedMakeupView.m in Sources */, + E3A13D8928C88691009402A3 /* FUCombinationMakeupViewModel.m in Sources */, + E32A0A9228D0244D001964E4 /* FUMakeupComponentManager.m in Sources */, + E3A13D7728C87BB2009402A3 /* FUMakeupDefine.m in Sources */, + E32A0AB228D1A260001964E4 /* FUCustomizedMakeupColorPicker.m in Sources */, + E3A13D9328C991C5009402A3 /* FUSubMakeupModel.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + E31FC58A28CB290200A90560 /* FUMakeupComponent.strings */ = { + isa = PBXVariantGroup; + children = ( + E31FC58928CB290200A90560 /* en */, + E31FC58B28CB291600A90560 /* zh-Hans */, + ); + name = FUMakeupComponent.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E3A13D4C28C877D9009402A3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E3A13D4D28C877D9009402A3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E3A13D4F28C877D9009402A3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 35A6KD62ZJ; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../FULiveDemo/FURenderKit", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = faceunity.FUMakeupComponent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E3A13D5028C877D9009402A3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 35A6KD62ZJ; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../FULiveDemo/FURenderKit", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = faceunity.FUMakeupComponent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E3A13D4128C877D9009402A3 /* Build configuration list for PBXProject "FUMakeupComponent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3A13D4C28C877D9009402A3 /* Debug */, + E3A13D4D28C877D9009402A3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E3A13D4E28C877D9009402A3 /* Build configuration list for PBXNativeTarget "FUMakeupComponent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3A13D4F28C877D9009402A3 /* Debug */, + E3A13D5028C877D9009402A3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E3A13D3E28C877D9009402A3 /* Project object */; +} diff --git a/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/FUMakeupComponent/FUMakeupComponent/FUMakeupComponent.h b/FUMakeupComponent/FUMakeupComponent/FUMakeupComponent.h new file mode 100644 index 00000000..e0515e08 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/FUMakeupComponent.h @@ -0,0 +1,19 @@ +// +// FUMakeupComponent.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/7. +// + +#import +#import "FUMakeupComponentManager.h" + +//! Project version number for FUMakeupComponent. +FOUNDATION_EXPORT double FUMakeupComponentVersionNumber; + +//! Project version string for FUMakeupComponent. +FOUNDATION_EXPORT const unsigned char FUMakeupComponentVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/FUMakeupComponent/FUMakeupComponent/FUMakeupComponentManager.h b/FUMakeupComponent/FUMakeupComponent/FUMakeupComponentManager.h new file mode 100644 index 00000000..6db36788 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/FUMakeupComponentManager.h @@ -0,0 +1,42 @@ +// +// FUMakeupComponentManager.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUMakeupComponentDelegate + +@optional +- (void)makeupComponentViewHeightDidChange:(CGFloat)height; +/// 提示 +- (void)makeupComponentNeedsDisplayPromptContent:(NSString *)content; + +@end + +@interface FUMakeupComponentManager : NSObject + +@property (nonatomic, weak) id delegate; + +/// 美妆视图总高度 +@property (nonatomic, assign, readonly) CGFloat componentViewHeight; + ++ (instancetype)sharedManager; + +/// 销毁 ++ (void)destory; + +/// 在目标视图中添加美妆组件视图(固定位置为目标视图底部) +/// @param view 目标视图 +- (void)addComponentViewToView:(UIView *)view; + +/// 在父视图中移除美妆组件视图 +- (void)removeComponentView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/FUMakeupComponentManager.m b/FUMakeupComponent/FUMakeupComponent/FUMakeupComponentManager.m new file mode 100644 index 00000000..67b125a0 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/FUMakeupComponentManager.m @@ -0,0 +1,202 @@ +// +// FUMakeupComponentManager.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/13. +// + +#import "FUMakeupComponentManager.h" +#import "FUMakeupDefine.h" + +#import "FUCombinationMakeupView.h" +#import "FUCustomizedMakeupView.h" +#import "FUCustomizedMakeupColorPicker.h" + +#import + +static FUMakeupComponentManager *makeupComponentManager = nil; +static dispatch_once_t onceToken; + +@interface FUMakeupComponentManager () + +@property (nonatomic, weak) UIView *targetView; + +@property (nonatomic, strong) FUCombinationMakeupView *combinationMakeupView; +@property (nonatomic, strong) FUCustomizedMakeupView *customizedMakeupView; +@property (nonatomic, strong) FUCustomizedMakeupColorPicker *colorPicker; + +@property (nonatomic, strong) FUCombinationMakeupViewModel *combinationMakeupViewModel; +@property (nonatomic, strong) FUCustomizedMakeupViewModel *customizedMakeupViewModel; + +@end + +@implementation FUMakeupComponentManager + +#pragma mark - Class methods + ++ (instancetype)sharedManager { + dispatch_once(&onceToken, ^{ + makeupComponentManager = [[FUMakeupComponentManager alloc] init]; + }); + return makeupComponentManager; +} + ++ (void)destory { + onceToken = 0; + makeupComponentManager = nil; +} + +#pragma mark - Instance methods + +- (void)addComponentViewToView:(UIView *)view { + NSAssert(view != nil, @"FUMakeupComponent: view can not be nil!"); + self.targetView = view; + [self.targetView addSubview:self.combinationMakeupView]; + [self.targetView addSubview:self.customizedMakeupView]; + [self.targetView addSubview:self.colorPicker]; +} + +- (void)removeComponentView { + if (self.combinationMakeupView.superview) { + [self.combinationMakeupView removeFromSuperview]; + } + if (self.customizedMakeupView.superview) { + [self.customizedMakeupView removeFromSuperview]; + } + if (self.colorPicker.superview) { + [self.colorPicker removeFromSuperview]; + } +} + +#pragma mark - Private methods + +// 组合妆的各个子妆是否被自定义改变 +- (BOOL)combinationMakeupIsChangedByCustoming { + for (NSUInteger index = FUSubMakeupTypeFoundation; index <= FUSubMakeupTypePupil; index++) { + + NSUInteger index1 = [self.combinationMakeupViewModel subMakeupIndexOfSelectedCombinationMakeupWithType:index]; + NSUInteger index2 = [self.customizedMakeupViewModel subMakeupIndexWithType:index]; + + double value1 = [self.combinationMakeupViewModel subMakeupValueOfSelectedCombinationMakeupWithType:index]; + double value2 = [self.customizedMakeupViewModel subMakeupValueWithType:index]; + + NSUInteger colorIndex1 = [self.combinationMakeupViewModel subMakeupColorIndexOfSelectedCombinationMakeupWithType:index]; + NSUInteger colorIndex2 = [self.customizedMakeupViewModel subMakeupColorIndexWithType:index]; + + BOOL isSameIndex = index1 == index2; + BOOL isSameValue = fabs(value1 - value2) <= 0.01; + BOOL isSameColor = colorIndex1 == colorIndex2; + + if (!isSameIndex || !isSameValue || !isSameColor) { + return YES; + } + } + return NO; +} + +#pragma mark - FUCombinationMakeupViewDelegate + +- (void)combinationMakeupViewDidClickCustomize { + // 自定义默认从第一项开始 + self.customizedMakeupViewModel.selectedCategoryIndex = 0; + if (self.combinationMakeupViewModel.selectedIndex >= 0) { + // 自定义前遍历更新各个子妆 + for (NSUInteger index = FUSubMakeupTypeFoundation; index <= FUSubMakeupTypePupil; index++) { + [self.customizedMakeupViewModel updateCustomizedMakeupsWithSubMakeupType:index selectedSubMakeupIndex:[self.combinationMakeupViewModel subMakeupIndexOfSelectedCombinationMakeupWithType:index] selectedSubMakeupValue:[self.combinationMakeupViewModel subMakeupValueOfSelectedCombinationMakeupWithType:index] selectedColorIndex:[self.combinationMakeupViewModel subMakeupColorIndexOfSelectedCombinationMakeupWithType:index]]; + } + } + [self.combinationMakeupView dismiss]; + [self.customizedMakeupView show]; + [self customizedMakeupViewDidChangeSubMakeup:self.customizedMakeupViewModel.selectedSubMakeupTitle]; + + if (self.delegate && [self.delegate respondsToSelector:@selector(makeupComponentViewHeightDidChange:)]) { + [self.delegate makeupComponentViewHeightDidChange:FUMakeupHeightIncludeBottomSafeArea(190)]; + } +} + +#pragma mark - FUCustomizedMakeupViewDelegate + +- (void)customizedMakeupViewDidClickBack { + // 返回组合妆时需要判断子妆是否变化 + if ([self combinationMakeupIsChangedByCustoming]) { + [self.combinationMakeupView deselectCurrentCombinationMakeup]; + } + self.colorPicker.hidden = YES; + [self.customizedMakeupView dismiss]; + [self.combinationMakeupView show]; + + if (self.delegate && [self.delegate respondsToSelector:@selector(makeupComponentViewHeightDidChange:)]) { + [self.delegate makeupComponentViewHeightDidChange:FUMakeupHeightIncludeBottomSafeArea(144)]; + } +} + +- (void)customizedMakeupViewDidChangeSubMakeup:(NSString *)title { + self.colorPicker.hidden = !self.customizedMakeupViewModel.needsColorPicker; + if (!self.colorPicker.hidden) { + self.colorPicker.colors = self.customizedMakeupViewModel.currentColors; + [self.colorPicker selectAtIndex:self.customizedMakeupViewModel.selectedColorIndex]; + } + if (self.delegate && [self.delegate respondsToSelector:@selector(makeupComponentNeedsDisplayPromptContent:)]) { + [self.delegate makeupComponentNeedsDisplayPromptContent:title]; + } +} + +#pragma mark - FUCustomizedMakeupColorPickerDelegate + +- (void)colorPickerDidSelectColorAtIndex:(NSUInteger)index { + self.customizedMakeupViewModel.selectedColorIndex = index; +} + +#pragma mark - Getters + +- (FUCombinationMakeupView *)combinationMakeupView { + if (!_combinationMakeupView) { + _combinationMakeupView = [[FUCombinationMakeupView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.targetView.bounds) - FUMakeupHeightIncludeBottomSafeArea(144), CGRectGetWidth(self.targetView.bounds), FUMakeupHeightIncludeBottomSafeArea(144)) viewModel:self.combinationMakeupViewModel]; + _combinationMakeupView.delegate = self; + } + return _combinationMakeupView; +} + +- (FUCustomizedMakeupView *)customizedMakeupView { + if (!_customizedMakeupView) { + _customizedMakeupView = [[FUCustomizedMakeupView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.targetView.bounds) - FUMakeupHeightIncludeBottomSafeArea(190), CGRectGetWidth(self.targetView.bounds), FUMakeupHeightIncludeBottomSafeArea(190)) viewModel:self.customizedMakeupViewModel]; + // 自定义美妆视图默认隐藏 + _customizedMakeupView.transform = CGAffineTransformMakeTranslation(0, FUMakeupHeightIncludeBottomSafeArea(190)); + _customizedMakeupView.hidden = YES; + _customizedMakeupView.delegate = self; + } + return _customizedMakeupView; +} + +- (FUCustomizedMakeupColorPicker *)colorPicker { + if (!_colorPicker) { + _colorPicker = [[FUCustomizedMakeupColorPicker alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.targetView.bounds) - 75, CGRectGetHeight(self.targetView.bounds) - FUMakeupHeightIncludeBottomSafeArea(192) - 250, 60, 250)]; + _colorPicker.hidden = YES; + _colorPicker.delegate = self; + } + return _colorPicker; +} + +- (FUCombinationMakeupViewModel *)combinationMakeupViewModel { + if (!_combinationMakeupViewModel) { + _combinationMakeupViewModel = [[FUCombinationMakeupViewModel alloc] init]; + } + return _combinationMakeupViewModel; +} + +- (FUCustomizedMakeupViewModel *)customizedMakeupViewModel { + if (!_customizedMakeupViewModel) { + _customizedMakeupViewModel = [[FUCustomizedMakeupViewModel alloc] init]; + } + return _customizedMakeupViewModel; +} + +- (CGFloat)componentViewHeight { + if (self.combinationMakeupView.hidden) { + return FUMakeupHeightIncludeBottomSafeArea(190); + } else { + return FUMakeupHeightIncludeBottomSafeArea(144); + } +} + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/FUMakeupDefine.h b/FUMakeupComponent/FUMakeupComponent/FUMakeupDefine.h new file mode 100644 index 00000000..69e71fb7 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/FUMakeupDefine.h @@ -0,0 +1,61 @@ +// +// FUMakeupDefine.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/7. +// + +#import +#import + +#ifndef FUMakeupDefine_h +#define FUMakeupDefine_h + +#pragma mark - ENUM + +/// 子妆容类型 +typedef NS_ENUM(NSUInteger, FUSubMakeupType) { + FUSubMakeupTypeFoundation, // 粉底 + FUSubMakeupTypeLip, // 口红 + FUSubMakeupTypeBlusher, // 腮红 + FUSubMakeupTypeEyebrow, // 眉毛 + FUSubMakeupTypeEyeShadow, // 眼影 + FUSubMakeupTypeEyeliner, // 眼线 + FUSubMakeupTypeEyelash, // 睫毛 + FUSubMakeupTypeHighlight, // 高光 + FUSubMakeupTypeShadow, // 阴影 + FUSubMakeupTypePupil // 美瞳 +}; + +#pragma mark - Inline methods + +static inline CGFloat FUMakeupHeightIncludeBottomSafeArea(CGFloat height) { + if (@available(iOS 11.0, *)) { + height += [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom; + } + return height; +} + +static inline UIImage * FUMakeupImageNamed(NSString *name) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"FUMakeupComponent" ofType:@"framework" inDirectory:@"Frameworks"]; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + return [UIImage imageNamed:name inBundle:bundle compatibleWithTraitCollection:nil];; +} + +static inline NSString * FUMakeupStringWithKey(NSString *key) { + NSString *framePath = [[NSBundle mainBundle] pathForResource:@"FUMakeupComponent" ofType:@"framework" inDirectory:@"Frameworks"]; + NSBundle *frameBundle = [NSBundle bundleWithPath:framePath]; + NSArray *languages = [NSLocale preferredLanguages]; + NSString *currentLanguage = languages.firstObject; + if ([currentLanguage hasPrefix:@"zh-Hans"]) { + currentLanguage =@"zh-Hans"; + } else { + currentLanguage = @"en"; + } + NSString *path = [frameBundle pathForResource:currentLanguage ofType:@"lproj"]; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + NSString *value = [bundle localizedStringForKey:key value:nil table:@"FUMakeupComponent"]; + return value; +} + +#endif /* FUMakeupDefine_h */ diff --git a/FUMakeupComponent/FUMakeupComponent/FUMakeupDefine.m b/FUMakeupComponent/FUMakeupComponent/FUMakeupDefine.m new file mode 100644 index 00000000..4c89dd34 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/FUMakeupDefine.m @@ -0,0 +1,8 @@ +// +// FUMakeupDefine.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/7. +// + +#import "FUMakeupDefine.h" diff --git a/FUMakeupComponent/FUMakeupComponent/Model/FUCombinationMakeupModel.h b/FUMakeupComponent/FUMakeupComponent/Model/FUCombinationMakeupModel.h new file mode 100644 index 00000000..95a04877 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Model/FUCombinationMakeupModel.h @@ -0,0 +1,56 @@ +// +// FUCombinationMakeupModel.h +// FUMakeupComponent +// +// Created by 项林平 on 2021/11/11. +// Copyright © 2021 FaceUnity. All rights reserved. +// +// 组合妆模型 + +#import +#import "FUSubMakeupModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUCombinationMakeupModel : NSObject + +/// 名称 +@property (nonatomic, copy) NSString *name; +/// icon +@property (nonatomic, copy) NSString *icon; +/// 当前程度值 +@property (nonatomic, assign) double value; +/// 滤镜名称(v8.0.0之后不需要) +@property (nonatomic, copy, nullable) NSString *selectedFilter; +/// 滤镜程度 +@property (nonatomic, assign) double selectedFilterLevel; +/// bundle名称 +@property (nonatomic, copy) NSString *bundleName; +/// 是否允许自定义 +@property (nonatomic, assign) BOOL isAllowedEdit; +/// 是否v8.0.0之后新组合妆(只用一个bundle) +@property (nonatomic, assign) BOOL isCombined; +/// 粉底 +@property (nonatomic, strong) FUSubMakeupModel *foundationModel; +/// 口红 +@property (nonatomic, strong) FULipstickModel *lipstickModel; +/// 腮红 +@property (nonatomic, strong) FUSubMakeupModel *blusherModel; +/// 眉毛 +@property (nonatomic, strong) FUEyebrowModel *eyebrowModel; +/// 眼影 +@property (nonatomic, strong) FUSubMakeupModel *eyeShadowModel; +/// 眼线 +@property (nonatomic, strong) FUSubMakeupModel *eyelinerModel; +/// 睫毛 +@property (nonatomic, strong) FUSubMakeupModel *eyelashModel; +/// 高光 +@property (nonatomic, strong) FUSubMakeupModel *highlightModel; +/// 阴影 +@property (nonatomic, strong) FUSubMakeupModel *shadowModel; +/// 美瞳 +@property (nonatomic, strong) FUSubMakeupModel *pupilModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/Model/FUCombinationMakeupModel.m b/FUMakeupComponent/FUMakeupComponent/Model/FUCombinationMakeupModel.m new file mode 100644 index 00000000..2c19fa5f --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Model/FUCombinationMakeupModel.m @@ -0,0 +1,13 @@ +// +// FUCombinationMakeupModel.m +// FUMakeupComponent +// +// Created by 项林平 on 2021/11/11. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUCombinationMakeupModel.h" + +@implementation FUCombinationMakeupModel + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/Model/FUCustomizedMakeupModel.h b/FUMakeupComponent/FUMakeupComponent/Model/FUCustomizedMakeupModel.h new file mode 100644 index 00000000..162ffc22 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Model/FUCustomizedMakeupModel.h @@ -0,0 +1,23 @@ +// +// FUCustomizedMakeupModel.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/13. +// + +#import +#import "FUSubMakeupModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUCustomizedMakeupModel : NSObject + +@property (nonatomic, copy) NSString *name; + +@property (nonatomic, copy) NSArray *subMakeups; +/// 当前子妆类型选中的单个子妆索引 +@property (nonatomic, assign) NSInteger selectedSubMakeupIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/Model/FUCustomizedMakeupModel.m b/FUMakeupComponent/FUMakeupComponent/Model/FUCustomizedMakeupModel.m new file mode 100644 index 00000000..1a657bc6 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Model/FUCustomizedMakeupModel.m @@ -0,0 +1,12 @@ +// +// FUCustomizedMakeupModel.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/13. +// + +#import "FUCustomizedMakeupModel.h" + +@implementation FUCustomizedMakeupModel + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/Model/FUSubMakeupModel.h b/FUMakeupComponent/FUMakeupComponent/Model/FUSubMakeupModel.h new file mode 100644 index 00000000..e10bf1d5 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Model/FUSubMakeupModel.h @@ -0,0 +1,57 @@ +// +// FUSubMakeupModel.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/8. +// +// 子妆模型 + +#import +#import "FUMakeupDefine.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FUSubMakeupModel : NSObject + +/// 类型 +@property (nonatomic, assign) FUSubMakeupType type; +/// icon +@property (nonatomic, copy) NSString *icon; +/// 标题 +@property (nonatomic, copy) NSString *title; +/// 子妆bundle名 +@property (nonatomic, copy) NSString *bundleName; +/// 妆容程度值 +@property (nonatomic, assign) double value; +/// 子妆当前颜色 +@property (nonatomic, copy, nullable) NSArray *color; +/// 可选颜色数组 +@property (nonatomic, copy, nullable) NSArray *> *colors; +/// 默认选择颜色索引 +@property (nonatomic, assign) NSInteger defaultColorIndex; +/// 子妆在自定义子妆可选列表中的索引 +@property (nonatomic, assign) NSInteger index; + +@end + +@interface FULipstickModel : FUSubMakeupModel + +/// 是否双色口红 +@property (nonatomic, assign) BOOL isTwoColorLipstick; +/// 口红类型 +@property (nonatomic, assign) NSInteger lipstickType; + +@end + +@interface FUEyebrowModel : FUSubMakeupModel + +/// 是否使用眉毛变形 +@property (nonatomic, assign) BOOL isBrowWarp; + +/// 眉毛类型(0柳叶眉 1上挑眉 2一字眉 3英气眉 4远山眉 5标准眉 6扶形眉 7剑眉 8日常风 9日系风) +/// @note 当isBrowWarp为NO时,设置眉毛类型无效果 +@property (nonatomic, assign) NSInteger browWarpType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/Model/FUSubMakeupModel.m b/FUMakeupComponent/FUMakeupComponent/Model/FUSubMakeupModel.m new file mode 100644 index 00000000..1bef1065 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Model/FUSubMakeupModel.m @@ -0,0 +1,20 @@ +// +// FUSubMakeupModel.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/8. +// + +#import "FUSubMakeupModel.h" + +@implementation FUSubMakeupModel + +@end + +@implementation FULipstickModel + +@end + +@implementation FUEyebrowModel + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chaomo.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chaomo.bundle new file mode 100644 index 00000000..de79a1ce Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chaomo.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chuju.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chuju.bundle new file mode 100644 index 00000000..0fe53059 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chuju.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chuqiu.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chuqiu.bundle new file mode 100644 index 00000000..cb539048 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/chuqiu.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/diadiatu.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/diadiatu.bundle new file mode 100644 index 00000000..31d40c1b Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/diadiatu.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/dongling.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/dongling.bundle new file mode 100644 index 00000000..e7c281b6 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/dongling.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/gangfeng.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/gangfeng.bundle new file mode 100644 index 00000000..2b2fe51b Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/gangfeng.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/guofeng.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/guofeng.bundle new file mode 100644 index 00000000..df998706 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/guofeng.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/hongfeng.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/hongfeng.bundle new file mode 100644 index 00000000..bcb2c5b2 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/hongfeng.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/hunxue.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/hunxue.bundle new file mode 100644 index 00000000..c9337091 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/hunxue.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/jianling.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/jianling.bundle new file mode 100644 index 00000000..a8809b42 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/jianling.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/linjia.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/linjia.bundle new file mode 100644 index 00000000..957e74fa Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/linjia.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/nuandong.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/nuandong.bundle new file mode 100644 index 00000000..94e6a108 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/nuandong.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/oumei.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/oumei.bundle new file mode 100644 index 00000000..e9f68f62 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/oumei.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/qianzhihe.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/qianzhihe.bundle new file mode 100644 index 00000000..4f3ad3f5 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/qianzhihe.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/renyu.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/renyu.bundle new file mode 100644 index 00000000..1552575a Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/renyu.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/rose.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/rose.bundle new file mode 100644 index 00000000..d9133de1 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/rose.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/shaonv.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/shaonv.bundle new file mode 100644 index 00000000..c2ced5e7 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/shaonv.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/tianmei.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/tianmei.bundle new file mode 100644 index 00000000..37e59930 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/tianmei.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/wumei.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/wumei.bundle new file mode 100644 index 00000000..00652b19 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/wumei.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/xinggan.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/xinggan.bundle new file mode 100644 index 00000000..af7709da Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/xinggan.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/yanshimao.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/yanshimao.bundle new file mode 100644 index 00000000..9493f488 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/yanshimao.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/ziyun.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/ziyun.bundle new file mode 100644 index 00000000..dfeb40a7 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/Bundle/ziyun.bundle differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/chaomo.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/chaomo.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/chaomo.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/chaomo.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/chuju.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/chuju.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/chuju.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/chuju.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/chuqiu.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/chuqiu.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/chuqiu.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/chuqiu.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/diadiatu.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/diadiatu.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/diadiatu.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/diadiatu.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/dongling.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/dongling.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/dongling.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/dongling.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/gangfeng.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/gangfeng.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/gangfeng.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/gangfeng.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/guofeng.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/guofeng.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/guofeng.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/guofeng.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/hongfeng.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/hongfeng.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/hongfeng.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/hongfeng.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/hunxie.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/hunxue.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/hunxie.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/hunxue.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/jianling.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/jianling.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/jianling.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/jianling.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/linjia.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/linjia.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/linjia.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/linjia.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/nuandong.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/nuandong.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/nuandong.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/nuandong.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/oumei.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/oumei.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/oumei.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/oumei.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/qianzhihe.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/qianzhihe.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/qianzhihe.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/qianzhihe.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/renyu.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/renyu.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/renyu.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/renyu.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/Rose.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/rose.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/Rose.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/rose.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/shaonv.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/shaonv.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/shaonv.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/shaonv.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/tianmei.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/tianmei.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/tianmei.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/tianmei.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/wumei.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/wumei.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/wumei.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/wumei.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/xinggan.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/xinggan.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\346\227\245\345\270\270\345\246\206/json/xinggan.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/xinggan.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/yanshimao.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/yanshimao.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/yanshimao.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/yanshimao.json diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/ziyun.json" b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/ziyun.json similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\344\270\273\351\242\230\345\246\206/json/ziyun.json" rename to FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/JSON/ziyun.json diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/combination_makeups.json b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/combination_makeups.json new file mode 100644 index 00000000..abdcbb11 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/CombinationMakeup/combination_makeups.json @@ -0,0 +1,173 @@ +[ + { + "name": "卸妆", + "icon": "makeup_noitem", + "value": 0.0, + "bundleName": "xiezhuan", + "isAllowedEdit" : true + }, + { + "name": "嗲嗲兔", + "icon": "demo_combination_rabbit", + "value": 0.7, + "bundleName": "diadiatu", + "isCombined" : true, + "selectedFilterLevel" : 0.68 + }, + { + "name": "冻龄", + "icon": "demo_combination_freezing_age", + "value": 0.7, + "bundleName": "dongling", + "isCombined" : true, + "selectedFilterLevel" : 0.68 + }, + { + "name": "国风", + "icon": "demo_combination_guo_feng", + "value": 0.7, + "bundleName": "guofeng", + "isCombined" : true, + "selectedFilterLevel" : 0.6 + }, + { + "name": "混血", + "icon": "demo_combination_mixed_race", + "value": 0.7, + "bundleName": "hunxue", + "isCombined" : true, + "selectedFilterLevel" : 0.6 + }, + { + "name": "减龄", + "icon": "demo_combination_age", + "value": 0.7, + "bundleName": "jianling", + "selectedFilter":"zhiganhui1" + }, + { + "name": "暖冬", + "icon": "demo_combination_warm_winter", + "value": 0.7, + "bundleName": "nuandong", + "selectedFilter":"zhiganhui2" + }, + { + "name": "红枫", + "icon": "demo_combination_red_maple", + "value": 0.7, + "bundleName": "hongfeng", + "selectedFilter":"zhiganhui3" + }, + { + "name": "Rose", + "icon": "demo_combination_rose", + "value": 0.7, + "bundleName": "rose", + "selectedFilter":"zhiganhui2" + }, + { + "name": "少女", + "icon": "demo_combination_girl", + "value": 0.7, + "bundleName": "shaonv", + "selectedFilter":"zhiganhui4" + }, + { + "name": "紫韵", + "icon": "demo_combination_purple_rhyme", + "value": 0.7, + "bundleName": "ziyun", + "selectedFilter":"zhiganhui1" + }, + { + "name": "厌世猫", + "icon": "demo_combination_bored_cat", + "value": 0.7, + "bundleName": "yanshimao", + "selectedFilter":"zhiganhui5" + }, + { + "name": "人鱼", + "icon": "demo_combination_mermaid", + "value": 0.7, + "bundleName": "renyu", + "selectedFilter":"zhiganhui1" + }, + { + "name": "初秋", + "icon": "demo_combination_early_autumn", + "value": 0.7, + "bundleName": "chuqiu", + "selectedFilter":"zhiganhui6" + }, + { + "name": "千纸鹤", + "icon": "demo_combination_paper_cranes", + "value": 0.7, + "bundleName": "qianzhihe", + "selectedFilter":"zhiganhui2" + }, + { + "name": "超模", + "icon": "demo_combination_supermodel", + "value": 0.7, + "bundleName": "chaomo", + "selectedFilter":"zhiganhui7" + }, + { + "name": "雏菊", + "icon": "demo_combination_daisy", + "value": 0.7, + "bundleName": "chuju", + "selectedFilter":"zhiganhui8" + }, + { + "name": "港风", + "icon": "demo_combination_harbour_wind", + "value": 0.7, + "bundleName": "gangfeng", + "selectedFilter":"ziran8" + }, + { + "name": "性感", + "icon": "demo_combination_sexy", + "value": 0.7, + "bundleName": "xinggan", + "selectedFilter":"ziran4", + "isAllowedEdit" : true + }, + { + "name": "甜美", + "icon": "demo_combination_sweet", + "value": 0.7, + "bundleName": "tianmei", + "selectedFilter":"ziran4", + "isAllowedEdit" : true + }, + { + "name": "邻家", + "icon": "demo_combination_neighbor_girl", + "value": 0.7, + "bundleName": "linjia", + "selectedFilter":"ziran4", + "isAllowedEdit" : true + }, + { + "name": "欧美", + "icon": "demo_combination_occident", + "value": 0.7, + "bundleName": "oumei", + "selectedFilter":"ziran4", + "isAllowedEdit" : true + }, + { + "name": "妩媚", + "icon": "demo_combination_charming", + "value": 0.7, + "bundleName": "wumei", + "selectedFilter":"ziran4", + "isAllowedEdit" : true + } + +] diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_02.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_02.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_02.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_03.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_03.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_03.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_03.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_04.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_04.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_04.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_04.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_05.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_05.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\350\205\256\347\272\242/mu_style_blush_05.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Blusher/mu_style_blush_05.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_02.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_02.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_02.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_03.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_03.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_03.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_03.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_04.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_04.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_04.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_04.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_05.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_05.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_05.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_05.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_06.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_06.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_06.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_06.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_07.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_07.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_07.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_07.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_08.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_08.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\345\275\261/mu_style_eyeshadow_08.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/EyeShadow/mu_style_eyeshadow_08.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_02.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_02.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_02.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_03.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_03.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_03.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_03.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_04.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_04.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\211\346\257\233/mu_style_eyebrow_04.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyebrow/mu_style_eyebrow_04.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_02.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_02.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_02.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_03.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_03.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_03.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_03.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_04.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_04.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_04.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_04.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_05.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_05.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_05.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_05.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_06.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_06.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\235\253\346\257\233/mu_style_eyelash_06.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyelash/mu_style_eyelash_06.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_02.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_02.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_02.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_03.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_03.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_03.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_03.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_04.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_04.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_04.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_04.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_05.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_05.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_05.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_05.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_06.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_06.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_06.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_06.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_07.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_07.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\234\274\347\272\277/mu_style_eyeliner_07.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Eyeliner/mu_style_eyeliner_07.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\262\211\345\272\225/mu_style_foundation_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Foundataion/mu_style_foundation_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\262\211\345\272\225/mu_style_foundation_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Foundataion/mu_style_foundation_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\351\253\230\345\205\211/mu_style_highlight_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Highlight/mu_style_highlight_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\351\253\230\345\205\211/mu_style_highlight_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Highlight/mu_style_highlight_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\351\253\230\345\205\211/mu_style_highlight_02.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Highlight/mu_style_highlight_02.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\351\253\230\345\205\211/mu_style_highlight_02.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Highlight/mu_style_highlight_02.bundle diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/runze.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/runze.bundle new file mode 100644 index 00000000..5f5eaeef Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/runze.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/shuirun.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/shuirun.bundle new file mode 100644 index 00000000..b0ff5bba Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/shuirun.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/wumian.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/wumian.bundle new file mode 100644 index 00000000..36aecd1c Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/wumian.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/yaochun.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/yaochun.bundle new file mode 100644 index 00000000..bcb0b539 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/yaochun.bundle differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/zhuguang.bundle b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/zhuguang.bundle new file mode 100644 index 00000000..d7527c90 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Lip/zhuguang.bundle differ diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_01.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_03.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_03.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_03.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_03.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_04.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_04.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_04.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_04.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_05.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_05.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_05.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_05.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_06.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_06.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_06.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_06.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_07.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_07.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_07.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_07.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_08.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_08.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_08.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_08.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_09.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_09.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\347\276\216\347\236\263/mu_style_eyepupil_09.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Pupil/mu_style_eyepupil_09.bundle diff --git "a/FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\351\230\264\345\275\261/mu_style_contour_01.bundle" b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Shadow/mu_style_contour_01.bundle similarity index 100% rename from "FULiveDemo/Resource/items/\347\276\216\345\246\206/\345\255\220\345\246\206\345\256\271/\351\230\264\345\275\261/mu_style_contour_01.bundle" rename to FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/Shadow/mu_style_contour_01.bundle diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/customized_makeups.json b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/customized_makeups.json new file mode 100644 index 00000000..1ffdce64 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/CustomizedMakeup/customized_makeups.json @@ -0,0 +1,2010 @@ +[ + { + "name": "粉底", + "sgArr": [ + { + "type": 0, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 0, + "icon": "mu_style_foundation_01", + "bundleName": "mu_style_foundation_01", + "value": 1.0, + "colors": [ + [ + 0.82, + 0.71, + 0.62, + 1.0 + ], + [ + 0.87, + 0.74, + 0.69, + 1.0 + ], + [ + 0.91, + 0.81, + 0.74, + 1.0 + ], + [ + 0.8, + 0.74, + 0.65, + 1.0 + ], + [ + 0.74, + 0.62, + 0.56, + 1.0 + ] + ], + "defaultColorIndex": 0 + }, + { + "type": 0, + "icon": "mu_style_foundation_01", + "bundleName": "mu_style_foundation_01", + "value": 1.0, + "colors": [ + [ + 0.82, + 0.71, + 0.62, + 1.0 + ], + [ + 0.87, + 0.74, + 0.69, + 1.0 + ], + [ + 0.91, + 0.81, + 0.74, + 1.0 + ], + [ + 0.8, + 0.74, + 0.65, + 1.0 + ], + [ + 0.74, + 0.62, + 0.56, + 1.0 + ] + ], + "defaultColorIndex": 1 + }, + { + "type": 0, + "icon": "mu_style_foundation_01", + "bundleName": "mu_style_foundation_01", + "value": 1.0, + "colors": [ + [ + 0.82, + 0.71, + 0.62, + 1.0 + ], + [ + 0.87, + 0.74, + 0.69, + 1.0 + ], + [ + 0.91, + 0.81, + 0.74, + 1.0 + ], + [ + 0.8, + 0.74, + 0.65, + 1.0 + ], + [ + 0.74, + 0.62, + 0.56, + 1.0 + ] + ], + "defaultColorIndex": 2 + }, + { + "type": 0, + "icon": "mu_style_foundation_01", + "bundleName": "mu_style_foundation_01", + "value": 1.0, + "colors": [ + [ + 0.82, + 0.71, + 0.62, + 1.0 + ], + [ + 0.87, + 0.74, + 0.69, + 1.0 + ], + [ + 0.91, + 0.81, + 0.74, + 1.0 + ], + [ + 0.8, + 0.74, + 0.65, + 1.0 + ], + [ + 0.74, + 0.62, + 0.56, + 1.0 + ] + ], + "defaultColorIndex": 3 + }, + { + "type": 0, + "icon": "mu_style_foundation_01", + "bundleName": "mu_style_foundation_01", + "value": 1.0, + "colors": [ + [ + 0.82, + 0.71, + 0.62, + 1.0 + ], + [ + 0.87, + 0.74, + 0.69, + 1.0 + ], + [ + 0.91, + 0.81, + 0.74, + 1.0 + ], + [ + 0.8, + 0.74, + 0.65, + 1.0 + ], + [ + 0.74, + 0.62, + 0.56, + 1.0 + ] + ], + "defaultColorIndex": 4 + } + ] + }, + { + "name": "口红", + "sgArr": [ + { + "type": 1, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 1, + "icon": "demo_style_lip_01", + "bundleName": "wumian", + "isTwoColorLipstick": 0, + "lipstickType": 0, + "value": 1.0, + "colors": [ + [ + 0.60, + 0.16, + 0.16, + 1.0 + ], + [ + 0.84, + 0.16, + 0.27, + 1.0 + ], + [ + 0.84, + 0.26, + 0.16, + 1.0 + ], + [ + 0.60, + 0.11, + 0.23, + 1.0 + ], + [ + 0.81, + 0.31, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "雾面" + }, + { + "type": 1, + "icon": "demo_style_lip_03", + "bundleName": "runze", + "lipstickType": 2, + "value": 1.0, + "colors": [ + [ + 0.60, + 0.16, + 0.16, + 1.0 + ], + [ + 0.84, + 0.16, + 0.27, + 1.0 + ], + [ + 0.84, + 0.26, + 0.16, + 1.0 + ], + [ + 0.60, + 0.11, + 0.23, + 1.0 + ], + [ + 0.81, + 0.31, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "润泽Ⅰ" + }, + { + "type": 1, + "icon": "demo_style_lip_02", + "bundleName": "shuirun", + "isTwoColorLipstick": 0, + "lipstickType": 7, + "value": 1.0, + "colors": [ + [ + 0.60, + 0.16, + 0.16, + 1.0 + ], + [ + 0.84, + 0.16, + 0.27, + 1.0 + ], + [ + 0.84, + 0.26, + 0.16, + 1.0 + ], + [ + 0.60, + 0.11, + 0.23, + 1.0 + ], + [ + 0.81, + 0.31, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "润泽Ⅱ" + }, + { + "type": 1, + "icon": "demo_style_lip_04", + "bundleName": "zhuguang", + "lipstickType": 3, + "value": 1.0, + "colors": [ + [ + 0.60, + 0.16, + 0.16, + 1.0 + ], + [ + 0.84, + 0.16, + 0.27, + 1.0 + ], + [ + 0.84, + 0.26, + 0.16, + 1.0 + ], + [ + 0.60, + 0.11, + 0.23, + 1.0 + ], + [ + 0.81, + 0.31, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "珠光" + }, + { + "type": 1, + "icon": "demo_style_lip_05", + "bundleName": "yaochun", + "lipstickType": 0, + "isTwoColorLipstick": 1, + "value": 1.0, + "colors": [ + [ + 0.60, + 0.16, + 0.16, + 1.0 + ], + [ + 0.84, + 0.16, + 0.27, + 1.0 + ], + [ + 0.84, + 0.26, + 0.16, + 1.0 + ], + [ + 0.60, + 0.11, + 0.23, + 1.0 + ], + [ + 0.81, + 0.31, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "咬唇" + } + ] + }, + { + "name": "腮红", + "sgArr": [ + { + "type": 2, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 2, + "icon": "demo_style_blush_01", + "bundleName": "mu_style_blush_01", + "value": 1.0, + "colors": [ + [ + 0.96, + 0.44, + 0.42, + 1.0 + ], + [ + 0.93, + 0.35, + 0.43, + 1.0 + ], + [ + 0.89, + 0.26, + 0.28, + 1.0 + ], + [ + 0.89, + 0.26, + 0.40, + 1.0 + ], + [ + 1.0, + 0.39, + 0.32, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "苹果肌" + }, + { + "type": 2, + "icon": "demo_style_blush_02", + "bundleName": "mu_style_blush_02", + "value": 1.0, + "colors": [ + [ + 0.96, + 0.44, + 0.42, + 1.0 + ], + [ + 0.93, + 0.35, + 0.43, + 1.0 + ], + [ + 0.89, + 0.26, + 0.28, + 1.0 + ], + [ + 0.89, + 0.26, + 0.40, + 1.0 + ], + [ + 1.0, + 0.39, + 0.32, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "扇形" + }, + { + "type": 2, + "icon": "demo_style_blush_03", + "bundleName": "mu_style_blush_03", + "value": 1.0, + "colors": [ + [ + 0.96, + 0.44, + 0.42, + 1.0 + ], + [ + 0.93, + 0.35, + 0.43, + 1.0 + ], + [ + 0.89, + 0.26, + 0.28, + 1.0 + ], + [ + 0.89, + 0.26, + 0.40, + 1.0 + ], + [ + 1.0, + 0.39, + 0.32, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "眼角" + }, + { + "type": 2, + "icon": "demo_style_blush_04", + "bundleName": "mu_style_blush_04", + "value": 1.0, + "colors": [ + [ + 0.96, + 0.44, + 0.42, + 1.0 + ], + [ + 0.93, + 0.35, + 0.43, + 1.0 + ], + [ + 0.89, + 0.26, + 0.28, + 1.0 + ], + [ + 0.89, + 0.26, + 0.40, + 1.0 + ], + [ + 1.0, + 0.39, + 0.32, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "微醺" + } + ] + }, + { + "name": "眉毛", + "sgArr": [ + { + "type": 3, + "icon": "makeup_noitem", + "isBrowWarp": 0, + "value": 0.0 + }, + { + "type": 3, + "icon": "demo_style_eyebrow_01", + "bundleName": "mu_style_eyebrow_01", + "isBrowWarp": 0, + "browWarpType": 0, + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "柳叶眉" + }, + { + "type": 3, + "icon": "demo_style_eyebrow_08", + "bundleName": "mu_style_eyebrow_02", + "isBrowWarp": 0, + "browWarpType": 1, + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "野生眉" + }, + { + "type": 3, + "icon": "demo_style_eyebrow_09", + "bundleName": "mu_style_eyebrow_03", + "isBrowWarp": 0, + "browWarpType": 2, + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "古典眉" + }, + { + "type": 3, + "icon": "demo_style_eyebrow_02", + "bundleName": "mu_style_eyebrow_04", + "isBrowWarp": 0, + "browWarpType": 3, + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "标准眉" + } + ] + }, + { + "name": "眼影", + "sgArr": [ + { + "type": 4, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 4, + "icon": "demo_style_eyeshadow_01", + "bundleName": "mu_style_eyeshadow_01", + "value": 1.0, + "colors": [ + [ + 1.0, + 0.43, + 0.44, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.88, + 0.32, + 0.32, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.90, + 0.55, + 0.36, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.78, + 0.24, + 0.37, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 1.0, + 0.42, + 0.49, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0 + ] + ], + "defaultColorIndex": 0, + "title": "单色眼影" + }, + { + "type": 4, + "icon": "demo_style_eyeshadow_02", + "bundleName": "mu_style_eyeshadow_02", + "value": 1.0, + "colors": [ + [ + 1.0, + 0.72, + 0.36, + 1.0, + 0.93, + 0.45, + 0.25, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.89, + 0.61, + 0.41, + 1.0, + 0.86, + 0.26, + 0.07, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.98, + 0.75, + 0.52, + 1.0, + 0.66, + 0.28, + 0.23, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 1.0, + 0.58, + 0.40, + 1.0, + 0.72, + 0.38, + 0.14, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 1.0, + 0.62, + 0.55, + 1.0, + 0.56, + 0.17, + 0.17, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ] + ], + "defaultColorIndex": 0, + "title": "双色眼影Ⅰ" + }, + { + "type": 4, + "icon": "demo_style_eyeshadow_03", + "bundleName": "mu_style_eyeshadow_03", + "value": 1.0, + "colors": [ + [ + 1.0, + 0.72, + 0.36, + 1.0, + 0.93, + 0.45, + 0.25, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.89, + 0.61, + 0.41, + 1.0, + 0.86, + 0.26, + 0.07, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.98, + 0.75, + 0.52, + 1.0, + 0.66, + 0.28, + 0.23, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 1.0, + 0.58, + 0.40, + 1.0, + 0.72, + 0.38, + 0.14, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 1.0, + 0.62, + 0.55, + 1.0, + 0.56, + 0.17, + 0.17, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ] + ], + "defaultColorIndex": 0, + "title": "双色眼影Ⅱ" + }, + { + "type": 4, + "icon": "demo_style_eyeshadow_04", + "bundleName": "mu_style_eyeshadow_04", + "value": 1.0, + "colors": [ + [ + 0.82, + 0.15, + 0.24, + 1.0, + 1.0, + 0.92, + 0.74, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.88, + 0.32, + 0.32, + 1.0, + 0.97, + 0.86, + 0.78, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.90, + 0.55, + 0.36, + 1.0, + 0.98, + 0.8, + 0.76, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.78, + 0.24, + 0.37, + 1.0, + 0.92, + 0.91, + 0.84, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 1.0, + 0.43, + 0.44, + 1.0, + 0.99, + 0.78, + 0.84, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0 + ] + ], + "defaultColorIndex": 0, + "title": "双色眼影Ⅲ" + }, + { + "type": 4, + "icon": "demo_style_eyeshadow_05", + "bundleName": "mu_style_eyeshadow_05", + "value": 1.0, + "colors": [ + [ + 1.0, + 0.72, + 0.36, + 1.0, + 1.0, + 0.43, + 0.44, + 1.0, + 0.72, + 0.38, + 0.15, + 1.0 + ], + [ + 0.89, + 0.61, + 0.41, + 1.0, + 0.78, + 0.24, + 0.37, + 1.0, + 0.56, + 0.17, + 0.17, + 1.0 + ], + [ + 0.98, + 0.75, + 0.52, + 1.0, + 0.90, + 0.55, + 0.36, + 1.0, + 0.93, + 0.45, + 0.25, + 1.0 + ], + [ + 1.0, + 0.58, + 0.40, + 1.0, + 0.88, + 0.32, + 0.32, + 1.0, + 0.66, + 0.28, + 0.23, + 1.0 + ], + [ + 1.0, + 0.62, + 0.55, + 1.0, + 1.0, + 0.42, + 0.49, + 1.0, + 0.86, + 0.26, + 0.07, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "三色眼影Ⅰ" + }, + { + "type": 4, + "icon": "demo_style_eyeshadow_06", + "bundleName": "mu_style_eyeshadow_06", + "value": 1.0, + "colors": [ + [ + 1.0, + 0.43, + 0.44, + 1.0, + 0.66, + 0.28, + 0.23, + 1.0, + 1.0, + 0.92, + 0.74, + 1.0 + ], + [ + 0.88, + 0.32, + 0.32, + 1.0, + 0.69, + 0.25, + 0.25, + 1.0, + 0.98, + 0.8, + 0.76, + 1.0 + ], + [ + 0.90, + 0.55, + 0.36, + 1.0, + 0.72, + 0.38, + 0.15, + 1.0, + 0.97, + 0.86, + 0.78, + 1.0 + ], + [ + 1.0, + 0.58, + 0.40, + 1.0, + 0.56, + 0.17, + 0.17, + 1.0, + 0.99, + 0.78, + 0.84, + 1.0 + ], + [ + 1.0, + 0.62, + 0.55, + 1.0, + 0.86, + 0.26, + 0.07, + 1.0, + 0.92, + 0.91, + 0.84, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "三色眼影Ⅱ" + } + ] + }, + { + "name": "眼线", + "sgArr": [ + { + "type": 5, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 5, + "icon": "demo_style_eyeliner_01", + "bundleName": "mu_style_eyeliner_01", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "猫眼" + }, + { + "type": 5, + "icon": "demo_style_eyeliner_02", + "bundleName": "mu_style_eyeliner_02", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "下垂眼" + }, + { + "type": 5, + "icon": "demo_style_eyeliner_03", + "bundleName": "mu_style_eyeliner_03", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "拉开眼距" + }, + { + "type": 5, + "icon": "demo_style_eyeliner_04", + "bundleName": "mu_style_eyeliner_04", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "拉近眼距" + }, + { + "type": 5, + "icon": "demo_style_eyeliner_05", + "bundleName": "mu_style_eyeliner_05", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "长眼" + }, + { + "type": 5, + "icon": "demo_style_eyeliner_06", + "bundleName": "mu_style_eyeliner_06", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "圆眼" + } + ] + }, + { + "name": "睫毛", + "sgArr": [ + { + "type": 6, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 6, + "icon": "demo_style_eyelash_01", + "bundleName": "mu_style_eyelash_01", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "自然型Ⅰ" + }, + { + "type": 6, + "icon": "demo_style_eyelash_02", + "bundleName": "mu_style_eyelash_02", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "自然型Ⅱ" + }, + { + "type": 6, + "icon": "demo_style_eyelash_03", + "bundleName": "mu_style_eyelash_03", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "浓密型Ⅰ" + }, + { + "type": 6, + "icon": "demo_style_eyelash_04", + "bundleName": "mu_style_eyelash_04", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "浓密型Ⅱ" + }, + { + "type": 6, + "icon": "demo_style_eyelash_05", + "bundleName": "mu_style_eyelash_05", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "夸张型Ⅰ" + }, + { + "type": 6, + "icon": "demo_style_eyelash_06", + "bundleName": "mu_style_eyelash_06", + "value": 1.0, + "colors": [ + [ + 0.36, + 0.10, + 0.10, + 1.0 + ], + [ + 0.33, + 0.09, + 0.18, + 1.0 + ], + [ + 0.28, + 0.16, + 0.08, + 1.0 + ], + [ + 0.21, + 0.05, + 0.02, + 1.0 + ], + [ + 0.31, + 0.17, + 0.22, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "夸张型Ⅱ" + } + ] + }, + { + "name": "高光", + "sgArr": [ + { + "type": 7, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 7, + "icon": "demo_style_highlight_01", + "bundleName": "mu_style_highlight_01", + "value": 1.0, + "colors": [ + [ + 0.98, + 0.95, + 0.94, + 1.0 + ], + [ + 1.0, + 0.97, + 0.93, + 1.0 + ], + [ + 1.0, + 0.96, + 0.93, + 1.0 + ], + [ + 0.97, + 0.95, + 0.95, + 1.0 + ], + [ + 0.99, + 0.98, + 0.95, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "高光Ⅰ" + }, + { + "type": 7, + "icon": "demo_style_highlight_02", + "bundleName": "mu_style_highlight_02", + "value": 1.0, + "colors": [ + [ + 0.98, + 0.95, + 0.94, + 1.0 + ], + [ + 1.0, + 0.97, + 0.93, + 1.0 + ], + [ + 1.0, + 0.96, + 0.93, + 1.0 + ], + [ + 0.97, + 0.95, + 0.95, + 1.0 + ], + [ + 0.99, + 0.98, + 0.95, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "高光Ⅱ" + } + ] + }, + { + "name": "阴影", + "sgArr": [ + { + "type": 8, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 8, + "icon": "demo_style_contour_01", + "bundleName": "mu_style_contour_01", + "value": 1.0, + "colors": [ + [ + 0.33, + 0.16, + 0.09, + 1.0 + ], + [ + 0.41, + 0.22, + 0.15, + 1.0 + ], + [ + 0.34, + 0.1, + 0.1, + 1.0 + ], + [ + 0.4, + 0.12, + 0.18, + 1.0 + ], + [ + 0.32, + 0.23, + 0.16, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "阴影Ⅰ" + } + ] + }, + { + "name": "美瞳", + "sgArr": [ + { + "type": 9, + "icon": "makeup_noitem", + "value": 0.0 + }, + { + "type": 9, + "icon": "demo_style_eyepupil_01", + "bundleName": "mu_style_eyepupil_01", + "value": 1.0, + "colors": [ + [ + 0.33, + 0.13, + 0.06, + 1.0 + ], + [ + 0.61, + 0.18, + 0.25, + 1.0 + ], + [ + 0.73, + 0.51, + 0.11, + 1.0 + ], + [ + 0.13, + 0.72, + 0.72, + 1.0 + ], + [ + 0.39, + 0.64, + 0.43, + 1.0 + ] + ], + "defaultColorIndex": 0, + "title": "蜜糖" + },{ + "type": 9, + "icon": "demo_style_eyepupil_03", + "bundleName": "mu_style_eyepupil_03", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "奶茶" + },{ + "type": 9, + "icon": "demo_style_eyepupil_04", + "bundleName": "mu_style_eyepupil_04", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "水波" + },{ + "type": 9, + "icon": "demo_style_eyepupil_05", + "bundleName": "mu_style_eyepupil_05", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "鎏金" + },{ + "type": 9, + "icon": "demo_style_eyepupil_06", + "bundleName": "mu_style_eyepupil_06", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "孔雀" + },{ + "type": 9, + "icon": "demo_style_eyepupil_07", + "bundleName": "mu_style_eyepupil_07", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "星河" + },{ + "type": 9, + "icon": "demo_style_eyepupil_08", + "bundleName": "mu_style_eyepupil_08", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "落目" + },{ + "type": 9, + "icon": "demo_style_eyepupil_09", + "bundleName": "mu_style_eyepupil_09", + "value": 1.0, + "colors": [], + "defaultColorIndex": 0, + "title": "极光" + } + ] + } +] diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/Contents.json new file mode 100644 index 00000000..d5068ee7 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_age.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_age@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_age@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/demo_combination_age.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/demo_combination_age.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/demo_combination_age.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/demo_combination_age.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/demo_combination_age@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/demo_combination_age@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/demo_combination_age@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/demo_combination_age@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/demo_combination_age@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/demo_combination_age@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_age.imageset/demo_combination_age@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_age.imageset/demo_combination_age@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/Contents.json new file mode 100644 index 00000000..f90096d1 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_bored_cat.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_bored_cat@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_bored_cat@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/demo_combination_bored_cat.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/demo_combination_bored_cat.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/demo_combination_bored_cat.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/demo_combination_bored_cat.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/demo_combination_bored_cat@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/demo_combination_bored_cat@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/demo_combination_bored_cat@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/demo_combination_bored_cat@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/demo_combination_bored_cat@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/demo_combination_bored_cat@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_bored_cat.imageset/demo_combination_bored_cat@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_bored_cat.imageset/demo_combination_bored_cat@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/Contents.json new file mode 100644 index 00000000..4539e8b0 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_charming.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_charming@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_charming@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/demo_combination_charming.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/demo_combination_charming.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/demo_combination_charming.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/demo_combination_charming.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/demo_combination_charming@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/demo_combination_charming@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/demo_combination_charming@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/demo_combination_charming@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/demo_combination_charming@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/demo_combination_charming@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_charming.imageset/demo_combination_charming@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_charming.imageset/demo_combination_charming@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/Contents.json new file mode 100644 index 00000000..c19c8539 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_daisy.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_daisy@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_daisy@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/demo_combination_daisy.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/demo_combination_daisy.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/demo_combination_daisy.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/demo_combination_daisy.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/demo_combination_daisy@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/demo_combination_daisy@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/demo_combination_daisy@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/demo_combination_daisy@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/demo_combination_daisy@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/demo_combination_daisy@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_daisy.imageset/demo_combination_daisy@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_daisy.imageset/demo_combination_daisy@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/Contents.json new file mode 100644 index 00000000..dec55f2e --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_early_autumn.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_early_autumn@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_early_autumn@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/demo_combination_early_autumn.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/demo_combination_early_autumn.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/demo_combination_early_autumn.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/demo_combination_early_autumn.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/demo_combination_early_autumn@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/demo_combination_early_autumn@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/demo_combination_early_autumn@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/demo_combination_early_autumn@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/demo_combination_early_autumn@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/demo_combination_early_autumn@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_early_autumn.imageset/demo_combination_early_autumn@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_early_autumn.imageset/demo_combination_early_autumn@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/demo_combination_freezing_age.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/demo_combination_freezing_age.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/demo_combination_freezing_age.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/demo_combination_freezing_age.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/demo_combination_freezing_age@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/demo_combination_freezing_age@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/demo_combination_freezing_age@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/demo_combination_freezing_age@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/demo_combination_freezing_age@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/demo_combination_freezing_age@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_freezing_age.imageset/demo_combination_freezing_age@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_freezing_age.imageset/demo_combination_freezing_age@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/Contents.json new file mode 100644 index 00000000..e0559e16 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_girl.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_girl@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_girl@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/demo_combination_girl.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/demo_combination_girl.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/demo_combination_girl.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/demo_combination_girl.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/demo_combination_girl@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/demo_combination_girl@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/demo_combination_girl@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/demo_combination_girl@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/demo_combination_girl@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/demo_combination_girl@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_girl.imageset/demo_combination_girl@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_girl.imageset/demo_combination_girl@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/demo_combination_guo_feng.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/demo_combination_guo_feng.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/demo_combination_guo_feng.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/demo_combination_guo_feng.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/demo_combination_guo_feng@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/demo_combination_guo_feng@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/demo_combination_guo_feng@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/demo_combination_guo_feng@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/demo_combination_guo_feng@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/demo_combination_guo_feng@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_guo_feng.imageset/demo_combination_guo_feng@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_guo_feng.imageset/demo_combination_guo_feng@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/Contents.json new file mode 100644 index 00000000..b6fce226 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_harbour_wind.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_harbour_wind@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_harbour_wind@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_harbour_wind.imageset/demo_combination_harbour_wind@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/Contents.json new file mode 100644 index 00000000..83a0febd --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_mermaid.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_mermaid@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_mermaid@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/demo_combination_mermaid.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/demo_combination_mermaid.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/demo_combination_mermaid.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/demo_combination_mermaid.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/demo_combination_mermaid@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/demo_combination_mermaid@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/demo_combination_mermaid@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/demo_combination_mermaid@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/demo_combination_mermaid@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/demo_combination_mermaid@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mermaid.imageset/demo_combination_mermaid@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mermaid.imageset/demo_combination_mermaid@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/Contents.json new file mode 100644 index 00000000..e5e56b80 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_mixed_race.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_mixed_race@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_mixed_race@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/demo_combination_mixed_race.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/demo_combination_mixed_race.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/demo_combination_mixed_race.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/demo_combination_mixed_race.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/demo_combination_mixed_race@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/demo_combination_mixed_race@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/demo_combination_mixed_race@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/demo_combination_mixed_race@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/demo_combination_mixed_race@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/demo_combination_mixed_race@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_mixed_race.imageset/demo_combination_mixed_race@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_mixed_race.imageset/demo_combination_mixed_race@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/Contents.json new file mode 100644 index 00000000..6f7131b0 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_neighbor_girl.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_neighbor_girl@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_neighbor_girl@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_neighbor_girl.imageset/demo_combination_neighbor_girl@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/Contents.json new file mode 100644 index 00000000..3246e5f8 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_occident.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_occident@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_occident@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/demo_combination_occident.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/demo_combination_occident.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/demo_combination_occident.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/demo_combination_occident.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/demo_combination_occident@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/demo_combination_occident@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/demo_combination_occident@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/demo_combination_occident@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/demo_combination_occident@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/demo_combination_occident@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_occident.imageset/demo_combination_occident@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_occident.imageset/demo_combination_occident@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/Contents.json new file mode 100644 index 00000000..f0364395 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_paper_cranes.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_paper_cranes@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_paper_cranes@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_paper_cranes.imageset/demo_combination_paper_cranes@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/Contents.json new file mode 100644 index 00000000..637dfd03 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_purple_rhyme.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_purple_rhyme@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_purple_rhyme@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_purple_rhyme.imageset/demo_combination_purple_rhyme@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/demo_combination_rabbit.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/demo_combination_rabbit.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/demo_combination_rabbit.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/demo_combination_rabbit.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/demo_combination_rabbit@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/demo_combination_rabbit@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/demo_combination_rabbit@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/demo_combination_rabbit@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/demo_combination_rabbit@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/demo_combination_rabbit@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rabbit.imageset/demo_combination_rabbit@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rabbit.imageset/demo_combination_rabbit@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/Contents.json new file mode 100644 index 00000000..e0915f2f --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_red_maple.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_red_maple@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_red_maple@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/demo_combination_red_maple.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/demo_combination_red_maple.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/demo_combination_red_maple.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/demo_combination_red_maple.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/demo_combination_red_maple@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/demo_combination_red_maple@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/demo_combination_red_maple@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/demo_combination_red_maple@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/demo_combination_red_maple@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/demo_combination_red_maple@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_red_maple.imageset/demo_combination_red_maple@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_red_maple.imageset/demo_combination_red_maple@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/Contents.json new file mode 100644 index 00000000..55a26f56 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_rose.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_rose@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_rose@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/demo_combination_rose.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/demo_combination_rose.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/demo_combination_rose.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/demo_combination_rose.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/demo_combination_rose@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/demo_combination_rose@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/demo_combination_rose@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/demo_combination_rose@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/demo_combination_rose@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/demo_combination_rose@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_rose.imageset/demo_combination_rose@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_rose.imageset/demo_combination_rose@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/Contents.json new file mode 100644 index 00000000..d696a562 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_sexy.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_sexy@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_sexy@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/demo_combination_sexy.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/demo_combination_sexy.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/demo_combination_sexy.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/demo_combination_sexy.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/demo_combination_sexy@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/demo_combination_sexy@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/demo_combination_sexy@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/demo_combination_sexy@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/demo_combination_sexy@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/demo_combination_sexy@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sexy.imageset/demo_combination_sexy@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sexy.imageset/demo_combination_sexy@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/Contents.json new file mode 100644 index 00000000..0a514117 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_supermodel.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_supermodel@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_supermodel@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/demo_combination_supermodel.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/demo_combination_supermodel.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/demo_combination_supermodel.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/demo_combination_supermodel.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/demo_combination_supermodel@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/demo_combination_supermodel@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/demo_combination_supermodel@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/demo_combination_supermodel@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/demo_combination_supermodel@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/demo_combination_supermodel@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_supermodel.imageset/demo_combination_supermodel@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_supermodel.imageset/demo_combination_supermodel@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/Contents.json new file mode 100644 index 00000000..59cb61a3 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_sweet.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_sweet@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_sweet@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/demo_combination_sweet.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/demo_combination_sweet.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/demo_combination_sweet.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/demo_combination_sweet.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/demo_combination_sweet@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/demo_combination_sweet@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/demo_combination_sweet@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/demo_combination_sweet@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/demo_combination_sweet@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/demo_combination_sweet@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_sweet.imageset/demo_combination_sweet@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_sweet.imageset/demo_combination_sweet@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/Contents.json new file mode 100644 index 00000000..e4bdebf0 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_combination_warm_winter.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_combination_warm_winter@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_combination_warm_winter@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/demo_combination_warm_winter.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/demo_combination_warm_winter.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/demo_combination_warm_winter.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/demo_combination_warm_winter.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/demo_combination_warm_winter@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/demo_combination_warm_winter@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/demo_combination_warm_winter@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/demo_combination_warm_winter@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/demo_combination_warm_winter@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/demo_combination_warm_winter@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/Makeup_whole/demo_combination_warm_winter.imageset/demo_combination_warm_winter@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/CombinationMakeup/demo_combination_warm_winter.imageset/demo_combination_warm_winter@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/Contents.json new file mode 100644 index 00000000..8d0b670c --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "makeup_return_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "makeup_return_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "makeup_return_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/makeup_return_nor.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/makeup_return_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/makeup_return_nor.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/makeup_return_nor.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/makeup_return_nor@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/makeup_return_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/makeup_return_nor@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/makeup_return_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/makeup_return_nor@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/makeup_return_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_return_nor.imageset/makeup_return_nor@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_back.imageset/makeup_return_nor@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/Contents.json new file mode 100644 index 00000000..0349eba8 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "makeup_custom_nor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "makeup_custom_nor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "makeup_custom_nor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/makeup_custom_nor.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/makeup_custom_nor.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/makeup_custom_nor.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/makeup_custom_nor.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/makeup_custom_nor@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/makeup_custom_nor@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/makeup_custom_nor@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/makeup_custom_nor@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/makeup_custom_nor@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/makeup_custom_nor@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/makeup_custom_nor.imageset/makeup_custom_nor@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_custom.imageset/makeup_custom_nor@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/Contents.json new file mode 100644 index 00000000..be68c999 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "makeup_noitem.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "makeup_noitem@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "makeup_noitem@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem.png new file mode 100644 index 00000000..ed379cd8 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem.png differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem@2x.png new file mode 100644 index 00000000..b50d1400 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem@2x.png differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem@3x.png new file mode 100644 index 00000000..6c8f45a0 Binary files /dev/null and b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/Others/makeup_noitem.imageset/makeup_noitem@3x.png differ diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/Contents.json new file mode 100644 index 00000000..28197a95 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_blush_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_blush_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_blush_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/demo_style_blush_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/demo_style_blush_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/demo_style_blush_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/demo_style_blush_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/demo_style_blush_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/demo_style_blush_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/demo_style_blush_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/demo_style_blush_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/demo_style_blush_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/demo_style_blush_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_01.imageset/demo_style_blush_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_01.imageset/demo_style_blush_01@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/Contents.json new file mode 100644 index 00000000..082bf242 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_blush_02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_blush_02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_blush_02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/demo_style_blush_02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/demo_style_blush_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/demo_style_blush_02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/demo_style_blush_02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/demo_style_blush_02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/demo_style_blush_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/demo_style_blush_02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/demo_style_blush_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/demo_style_blush_02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/demo_style_blush_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_02.imageset/demo_style_blush_02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_02.imageset/demo_style_blush_02@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/Contents.json new file mode 100644 index 00000000..71775135 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_blush_03.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_blush_03@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_blush_03@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/demo_style_blush_03.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/demo_style_blush_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/demo_style_blush_03.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/demo_style_blush_03.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/demo_style_blush_03@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/demo_style_blush_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/demo_style_blush_03@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/demo_style_blush_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/demo_style_blush_03@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/demo_style_blush_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_03.imageset/demo_style_blush_03@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_03.imageset/demo_style_blush_03@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/Contents.json new file mode 100644 index 00000000..29a53cfe --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_blush_04.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_blush_04@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_blush_04@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/demo_style_blush_04.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/demo_style_blush_04.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/demo_style_blush_04.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/demo_style_blush_04.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/demo_style_blush_04@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/demo_style_blush_04@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/demo_style_blush_04@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/demo_style_blush_04@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/demo_style_blush_04@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/demo_style_blush_04@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_blush_04.imageset/demo_style_blush_04@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_blush_04.imageset/demo_style_blush_04@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/Contents.json new file mode 100644 index 00000000..60f162e0 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_contour _01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_contour _01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_contour _01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/demo_style_contour _01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/demo_style_contour _01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/demo_style_contour _01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/demo_style_contour _01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/demo_style_contour _01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/demo_style_contour _01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/demo_style_contour _01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/demo_style_contour _01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/demo_style_contour _01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/demo_style_contour _01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_contour_01.imageset/demo_style_contour _01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_contour_01.imageset/demo_style_contour _01@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_01.imageset/demo_style_eyebrow_01@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/Contents.json new file mode 100644 index 00000000..2392fbb7 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyebrow_02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyebrow_02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyebrow_02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_02.imageset/demo_style_eyebrow_02@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_08.imageset/demo_style_eyebrow_08@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyebrow_09.imageset/demo_style_eyebrow_09@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/Contents.json new file mode 100644 index 00000000..54f36c12 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyelash_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyelash_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyelash_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_01.imageset/demo_style_eyelash_01@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/Contents.json new file mode 100644 index 00000000..633f9d9e --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyelash_02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyelash_02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyelash_02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_02.imageset/demo_style_eyelash_02@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/Contents.json new file mode 100644 index 00000000..0143b2b4 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyelash_03.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyelash_03@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyelash_03@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_03.imageset/demo_style_eyelash_03@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/Contents.json new file mode 100644 index 00000000..fff23e4f --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyelash_04.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyelash_04@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyelash_04@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_04.imageset/demo_style_eyelash_04@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/Contents.json new file mode 100644 index 00000000..28e9f26f --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyelash_05.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyelash_05@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyelash_05@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_05.imageset/demo_style_eyelash_05@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/Contents.json new file mode 100644 index 00000000..9169bcb1 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyelash_06.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyelash_06@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyelash_06@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyelash_06.imageset/demo_style_eyelash_06@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/Contents.json new file mode 100644 index 00000000..799d5ebd --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeliner_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeliner_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeliner_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_01.imageset/demo_style_eyeliner_01@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/Contents.json new file mode 100644 index 00000000..42899035 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeliner_02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeliner_02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeliner_02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_02.imageset/demo_style_eyeliner_02@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/Contents.json new file mode 100644 index 00000000..0356a3bc --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeliner_03.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeliner_03@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeliner_03@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_03.imageset/demo_style_eyeliner_03@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/Contents.json new file mode 100644 index 00000000..f5e982f9 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeliner_04.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeliner_04@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeliner_04@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_04.imageset/demo_style_eyeliner_04@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/Contents.json new file mode 100644 index 00000000..bf5d5760 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeliner_05.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeliner_05@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeliner_05@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_05.imageset/demo_style_eyeliner_05@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/Contents.json new file mode 100644 index 00000000..b896962f --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeliner_06.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeliner_06@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeliner_06@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeliner_06.imageset/demo_style_eyeliner_06@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/Contents.json new file mode 100644 index 00000000..aa4d8424 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyepupil_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyepupil_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyepupil_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_01.imageset/demo_style_eyepupil_01@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_03.imageset/demo_style_eyepupil_03@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_04.imageset/demo_style_eyepupil_04@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_05.imageset/demo_style_eyepupil_05@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_06.imageset/demo_style_eyepupil_06@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_07.imageset/demo_style_eyepupil_07@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_08.imageset/demo_style_eyepupil_08@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyepupil_09.imageset/demo_style_eyepupil_09@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/Contents.json new file mode 100644 index 00000000..6aaeea33 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeshadow_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeshadow_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeshadow_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_01.imageset/demo_style_eyeshadow_01@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/Contents.json new file mode 100644 index 00000000..4aca085a --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeshadow_02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeshadow_02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeshadow_02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_02.imageset/demo_style_eyeshadow_02@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/Contents.json new file mode 100644 index 00000000..72023950 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeshadow_03.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeshadow_03@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeshadow_03@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_03.imageset/demo_style_eyeshadow_03@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/Contents.json new file mode 100644 index 00000000..3e8a73b4 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeshadow_04.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeshadow_04@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeshadow_04@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_04.imageset/demo_style_eyeshadow_04@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/Contents.json new file mode 100644 index 00000000..3b414c26 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeshadow_05.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeshadow_05@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeshadow_05@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_05.imageset/demo_style_eyeshadow_05@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/Contents.json new file mode 100644 index 00000000..659b5fbc --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_eyeshadow_06.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_eyeshadow_06@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_eyeshadow_06@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_eyeshadow_06.imageset/demo_style_eyeshadow_06@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/Contents.json new file mode 100644 index 00000000..9e92f6dd --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_highlight _01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_highlight _01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_highlight _01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/demo_style_highlight _01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/demo_style_highlight _01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/demo_style_highlight _01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/demo_style_highlight _01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/demo_style_highlight _01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/demo_style_highlight _01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/demo_style_highlight _01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/demo_style_highlight _01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/demo_style_highlight _01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/demo_style_highlight _01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_01.imageset/demo_style_highlight _01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_01.imageset/demo_style_highlight _01@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/Contents.json new file mode 100644 index 00000000..c26469c7 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_highlight _02.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_highlight _02@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_highlight _02@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/demo_style_highlight _02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/demo_style_highlight _02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/demo_style_highlight _02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/demo_style_highlight _02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/demo_style_highlight _02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/demo_style_highlight _02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/demo_style_highlight _02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/demo_style_highlight _02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/demo_style_highlight _02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/demo_style_highlight _02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_highlight_02.imageset/demo_style_highlight _02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_highlight_02.imageset/demo_style_highlight _02@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/Contents.json new file mode 100644 index 00000000..c4813271 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_lip_01.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_lip_01@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_lip_01@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/demo_style_lip_01.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/demo_style_lip_01.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/demo_style_lip_01.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/demo_style_lip_01.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/demo_style_lip_01@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/demo_style_lip_01@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/demo_style_lip_01@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/demo_style_lip_01@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/demo_style_lip_01@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/demo_style_lip_01@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_01.imageset/demo_style_lip_01@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_01.imageset/demo_style_lip_01@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/demo_style_lip_03.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/demo_style_lip_03.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/demo_style_lip_03.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/demo_style_lip_03.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/demo_style_lip_03@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/demo_style_lip_03@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/demo_style_lip_03@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/demo_style_lip_03@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/demo_style_lip_03@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/demo_style_lip_03@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_03.imageset/demo_style_lip_03@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_02.imageset/demo_style_lip_03@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/demo_style_lip_02.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/demo_style_lip_02.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/demo_style_lip_02.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/demo_style_lip_02.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/demo_style_lip_02@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/demo_style_lip_02@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/demo_style_lip_02@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/demo_style_lip_02@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/demo_style_lip_02@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/demo_style_lip_02@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_02.imageset/demo_style_lip_02@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_03.imageset/demo_style_lip_02@3x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/Contents.json similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/Contents.json rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/Contents.json diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/demo_style_lip_04.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/demo_style_lip_04.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/demo_style_lip_04.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/demo_style_lip_04.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/demo_style_lip_04@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/demo_style_lip_04@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/demo_style_lip_04@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/demo_style_lip_04@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/demo_style_lip_04@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/demo_style_lip_04@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_04.imageset/demo_style_lip_04@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_04.imageset/demo_style_lip_04@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/Contents.json b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/Contents.json new file mode 100644 index 00000000..d40326ea --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "demo_style_lip_05.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "demo_style_lip_05@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "demo_style_lip_05@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/demo_style_lip_05.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/demo_style_lip_05.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/demo_style_lip_05.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/demo_style_lip_05.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/demo_style_lip_05@2x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/demo_style_lip_05@2x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/demo_style_lip_05@2x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/demo_style_lip_05@2x.png diff --git a/FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/demo_style_lip_05@3x.png b/FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/demo_style_lip_05@3x.png similarity index 100% rename from FULiveDemo/Assets.xcassets/Makeup/demo_style_lip_05.imageset/demo_style_lip_05@3x.png rename to FUMakeupComponent/FUMakeupComponent/Resource/FUMakeupComponent.xcassets/SubMakeup/demo_style_lip_05.imageset/demo_style_lip_05@3x.png diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/en.lproj/FUMakeupComponent.strings b/FUMakeupComponent/FUMakeupComponent/Resource/en.lproj/FUMakeupComponent.strings new file mode 100644 index 00000000..305e6d51 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/en.lproj/FUMakeupComponent.strings @@ -0,0 +1,98 @@ +/* + FUMakeupComponent.strings + FUMakeupComponent + + Created by 项林平 on 2022/9/9. + +*/ + +"自定义" = "Custom"; +"卸妆" = "Remove"; + +"嗲嗲兔" = "Rabbit"; +"冻龄" = "Freezing Age"; +"国风" = "Chinese Style"; +"混血" = "Mixed Race"; +"减龄" = "Tender"; +"暖冬" = "Warm"; +"红枫" = "Maple"; +"Rose" = "Rose"; +"少女" = "Maiden"; +"紫韵" = "Purple"; +"厌世猫" = "Cat"; +"人鱼" = "Mermaid"; +"初秋" = "Autumn"; +"千纸鹤" = "Crane"; +"超模" = "Model"; +"雏菊" = "Daisy"; +"港风" = "HK Style"; +"性感" = "Sexy"; +"甜美" = "Sweet"; +"邻家" = "Next-door"; +"欧美" = "European"; +"妩媚" = "Charming"; + +"粉底" = "Foundation"; +"口红" = "Lipstick"; +"腮红" = "Blusher"; +"眉毛" = "Eyebrow"; +"眼影" = "Eye Shadow"; +"眼线" = "Eyeliner"; +"睫毛" = "Eyelash"; +"高光" = "Highlight"; +"阴影" = "Shadow"; +"美瞳" = "Contact Lens"; + +"雾面" = "Matte"; +"润泽Ⅰ" = "Moist Ⅰ"; +"润泽Ⅱ" = "Moist Ⅱ"; +"珠光" = "Pearl"; +"咬唇" = "Bite Lip"; + +"苹果肌" = "Apple Muscle"; +"扇形" = "Sector"; +"眼角" = "Canthus"; +"微醺" = "Tipsy"; + +"柳叶眉" = "Willow"; +"野生眉" = "Wild"; +"古典眉" = "Classical"; +"标准眉" = "Standard"; + +"单色眼影" = "Monochrome"; +"双色眼影Ⅰ" = "Dichromatic Ⅰ"; +"双色眼影Ⅱ" = "Dichromatic Ⅱ"; +"双色眼影Ⅲ" = "Dichromatic Ⅲ"; +"三色眼影Ⅰ" = "Tricolor Ⅰ"; +"三色眼影Ⅱ" = "Tricolor Ⅱ"; +"三色眼影Ⅲ" = "Tricolor Ⅲ"; + +"猫眼" = "Cats Eye"; +"下垂眼" = "Drooping Eye"; +"拉开眼距" = "Expand Eye Distance"; +"拉近眼距" = "Shorten Eye Distance"; +"长眼" = "Long Eye"; +"圆眼" = "Round Eye"; + +"自然型Ⅰ" = "Natural Ⅰ"; +"自然型Ⅱ" = "Natural Ⅱ"; +"浓密型Ⅰ" = "Denseness Ⅰ"; +"浓密型Ⅱ" = "Denseness Ⅱ"; +"夸张型Ⅰ" = "Hyperbole Ⅰ"; +"夸张型Ⅱ" = "Hyperbole Ⅱ"; + +"高光Ⅰ" = "Highlight I"; +"高光Ⅱ" = "Highlight Ⅱ"; + +"阴影Ⅰ" = "Shadow I"; + +"蜜糖" = "Honey"; +"奶茶" = "Milk Tea"; +"水波" = "Ripple"; +"鎏金" = "Gilding"; +"孔雀" = "Peacock"; +"星河" = "Milky Way"; +"落目" = "Curtain"; +"极光" = "Aurora"; + + diff --git a/FUMakeupComponent/FUMakeupComponent/Resource/zh-Hans.lproj/FUMakeupComponent.strings b/FUMakeupComponent/FUMakeupComponent/Resource/zh-Hans.lproj/FUMakeupComponent.strings new file mode 100644 index 00000000..ff79c968 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/Resource/zh-Hans.lproj/FUMakeupComponent.strings @@ -0,0 +1,96 @@ +/* + FUMakeupComponent.strings + FUMakeupComponent + + Created by 项林平 on 2022/9/9. + +*/ + +"自定义" = "自定义"; +"卸妆" = "卸妆"; + +"嗲嗲兔" = "嗲嗲兔"; +"冻龄" = "冻龄"; +"国风" = "国风"; +"混血" = "混血"; +"减龄" = "减龄"; +"暖冬" = "暖冬"; +"红枫" = "红枫"; +"Rose" = "Rose"; +"少女" = "少女"; +"紫韵" = "紫韵"; +"厌世猫" = "厌世猫"; +"人鱼" = "人鱼"; +"初秋" = "初秋"; +"千纸鹤" = "千纸鹤"; +"超模" = "超模"; +"雏菊" = "雏菊"; +"港风" = "港风"; +"性感" = "性感"; +"甜美" = "甜美"; +"邻家" = "邻家"; +"欧美" = "欧美"; +"妩媚" = "妩媚"; + +"粉底" = "粉底"; +"口红" = "口红"; +"腮红" = "腮红"; +"眉毛" = "眉毛"; +"眼影" = "眼影"; +"眼线" = "眼线"; +"睫毛" = "睫毛"; +"高光" = "高光"; +"阴影" = "阴影"; +"美瞳" = "美瞳"; + +"雾面" = "雾面"; +"润泽Ⅰ" = "润泽Ⅰ"; +"润泽Ⅱ" = "润泽Ⅱ"; +"珠光" = "珠光"; +"咬唇" = "咬唇"; + +"苹果肌" = "苹果肌"; +"扇形" = "扇形"; +"眼角" = "眼角"; +"微醺" = "微醺"; + +"柳叶眉" = "柳叶眉"; +"野生眉" = "野生眉"; +"古典眉" = "古典眉"; +"标准眉" = "标准眉"; + +"单色眼影" = "单色眼影"; +"双色眼影Ⅰ" = "双色眼影 Ⅰ"; +"双色眼影Ⅱ" = "双色眼影 Ⅱ"; +"双色眼影Ⅲ" = "双色眼影 Ⅲ"; +"三色眼影Ⅰ" = "三色眼影 Ⅰ"; +"三色眼影Ⅱ" = "三色眼影 Ⅱ"; +"三色眼影Ⅲ" = "三色眼影 Ⅲ"; + +"猫眼" = "猫眼"; +"下垂眼" = "下垂眼"; +"拉开眼距" = "拉开眼距"; +"拉近眼距" = "拉进眼距"; +"长眼" = "长眼"; +"圆眼" = "圆眼"; + +"自然型Ⅰ" = "自然型 Ⅰ"; +"自然型Ⅱ" = "自然型 Ⅱ"; +"浓密型Ⅰ" = "浓密型 Ⅰ"; +"浓密型Ⅱ" = "浓密型 Ⅱ"; +"夸张型Ⅰ" = "夸张型 Ⅰ"; +"夸张型Ⅱ" = "夸张型 Ⅱ"; + +"高光Ⅰ" = "高光I"; +"高光Ⅱ" = "高光Ⅱ"; + +"阴影Ⅰ" = "阴影Ⅰ"; + +"蜜糖" = "蜜糖"; +"奶茶" = "奶茶"; +"水波" = "水波"; +"鎏金" = "鎏金"; +"孔雀" = "孔雀"; +"星河" = "星河"; +"落目" = "落目"; +"极光" = "极光"; diff --git a/FUMakeupComponent/FUMakeupComponent/View/FUCombinationMakeupView.h b/FUMakeupComponent/FUMakeupComponent/View/FUCombinationMakeupView.h new file mode 100644 index 00000000..fc9c1058 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/View/FUCombinationMakeupView.h @@ -0,0 +1,50 @@ +// +// FUCombinationMakeupView.h +// FUMakeupComponent +// +// Created by 项林平 on 2021/11/12. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import +#import "FUCombinationMakeupViewModel.h" + +@class FUCombinationMakeupModel, FUCombinationMakeupView; + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUCombinationMakeupViewDelegate + +/// 自定义妆容 +- (void)combinationMakeupViewDidClickCustomize; + +@end + +@interface FUCombinationMakeupView : UIView + +@property (nonatomic, strong, readonly) FUCombinationMakeupViewModel *viewModel; + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUCombinationMakeupViewModel *)viewModel; + +/// 取消选中当前组合妆 +- (void)deselectCurrentCombinationMakeup; + +- (void)show; + +- (void)dismiss; + +@end + +@interface FUCombinationMakeupCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *fuImageView; + +@property (nonatomic, strong, readonly) UILabel *fuTitleLabel; + +@property (nonatomic, strong, readonly) UIActivityIndicatorView *indicatorView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/View/FUCombinationMakeupView.m b/FUMakeupComponent/FUMakeupComponent/View/FUCombinationMakeupView.m new file mode 100644 index 00000000..5002f7f7 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/View/FUCombinationMakeupView.m @@ -0,0 +1,307 @@ +// +// FUCombinationMakeupView.m +// FUMakeupComponent +// +// Created by 项林平 on 2021/11/12. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUCombinationMakeupView.h" +#import "FUCombinationMakeupViewModel.h" +#import "FUMakeupDefine.h" + +#import + +static NSString * const kFUCombinationMakeupCellIdentifierKey = @"FUCombinationMakeupCell"; + +@interface FUCombinationMakeupView () + +@property (nonatomic, strong) UICollectionView *collectionView; + +@property (nonatomic, strong) FUSlider *slider; +/// 自定义按钮 +@property (nonatomic, strong) FUSquareButton *customizeButton; + +@property (nonatomic, strong) FUCombinationMakeupViewModel *viewModel; + +@end + +@implementation FUCombinationMakeupView + +#pragma mark - Initializer + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame viewModel:[[FUCombinationMakeupViewModel alloc] init]]; +} + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUCombinationMakeupViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + self.backgroundColor = [UIColor clearColor]; + [self configureUI]; + // 默认选中 + [self.collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + [self refreshSubviews]; + } + return self; +} + +#pragma mark - UI + +- (void)configureUI { + // 毛玻璃效果 + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + [self addSubview:self.customizeButton]; + NSLayoutConstraint *buttonBottom = [NSLayoutConstraint constraintWithItem:self.customizeButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:-FUMakeupHeightIncludeBottomSafeArea(18)]; + NSLayoutConstraint *buttonLeading = [NSLayoutConstraint constraintWithItem:self.customizeButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:16]; + NSLayoutConstraint *buttonWidth = [NSLayoutConstraint constraintWithItem:self.customizeButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:54]; + NSLayoutConstraint *buttonHeight = [NSLayoutConstraint constraintWithItem:self.customizeButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:70]; + [self addConstraints:@[buttonBottom, buttonLeading]]; + [self.customizeButton addConstraints:@[buttonWidth, buttonHeight]]; + + UIView *line = [[UIView alloc] init]; + line.backgroundColor = [UIColor colorWithRed:229/255.0 green:229/255.0 blue:229/255.0 alpha:0.2]; + line.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:line]; + NSLayoutConstraint *lineBottom = [NSLayoutConstraint constraintWithItem:line attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:-FUMakeupHeightIncludeBottomSafeArea(33)]; + NSLayoutConstraint *lineLeading = [NSLayoutConstraint constraintWithItem:line attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:85]; + NSLayoutConstraint *lineWidth = [NSLayoutConstraint constraintWithItem:line attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:1]; + NSLayoutConstraint *lineHeight = [NSLayoutConstraint constraintWithItem:line attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:40]; + [self addConstraints:@[lineBottom, lineLeading]]; + [line addConstraints:@[lineWidth, lineHeight]]; + + [self addSubview:self.collectionView]; + NSLayoutConstraint *collectionBottom = [NSLayoutConstraint constraintWithItem:self.collectionView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:-FUMakeupHeightIncludeBottomSafeArea(4)]; + NSLayoutConstraint *collectionLeading = [NSLayoutConstraint constraintWithItem:self.collectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:line attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *collectionTrailing = [NSLayoutConstraint constraintWithItem:self.collectionView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + NSLayoutConstraint *collectionHeight = [NSLayoutConstraint constraintWithItem:self.collectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:98]; + [self addConstraints:@[collectionBottom, collectionLeading, collectionTrailing]]; + [self.collectionView addConstraint:collectionHeight]; + + [self addSubview:self.slider]; + NSLayoutConstraint *sliderLeading = [NSLayoutConstraint constraintWithItem:self.slider attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1 constant:34]; + NSLayoutConstraint *sliderTrailing = [NSLayoutConstraint constraintWithItem:self.slider attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1 constant:-34]; + NSLayoutConstraint *sliderBottom = [NSLayoutConstraint constraintWithItem:self.slider attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.collectionView attribute:NSLayoutAttributeTop multiplier:1 constant:-6]; + [self addConstraints:@[sliderLeading, sliderTrailing, sliderBottom]]; +} + +#pragma mark - Instance methos + +- (void)deselectCurrentCombinationMakeup { + if (self.viewModel.selectedIndex < 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView deselectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedIndex inSection:0] animated:NO]; + [self.viewModel selectCombinationMakeupAtIndex:-1 complectionHandler:nil]; + [self refreshSubviews]; + }); +} + +- (void)show { + self.hidden = NO; + [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ + self.transform = CGAffineTransformIdentity; + } completion:^(BOOL finished) { + }]; +} + +- (void)dismiss { + [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ + self.transform = CGAffineTransformMakeTranslation(0, CGRectGetHeight(self.bounds)); + } completion:^(BOOL finished) { + self.hidden = YES; + }]; +} + +#pragma mark - Private methods + +- (void)refreshSubviews { + if (self.viewModel.selectedIndex <= 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + // 自定义按钮状态 + self.customizeButton.enabled = YES; + // slider状态 + self.slider.hidden = YES; + }); + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + // 自定义按钮状态 + self.customizeButton.enabled = self.viewModel.isSelectedMakeupAllowedEdit; + // slider状态 + self.slider.hidden = NO; + self.slider.value = self.viewModel.selectedMakeupValue; + }); + } +} + +#pragma mark - Event response + +- (void)customizeAction { + if (self.delegate && [self.delegate respondsToSelector:@selector(combinationMakeupViewDidClickCustomize)]) { + [self.delegate combinationMakeupViewDidClickCustomize]; + } +} + +- (void)sliderValueChangedAction { + self.viewModel.selectedMakeupValue = self.slider.value; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.viewModel.combinationMakeups.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUCombinationMakeupCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCombinationMakeupCellIdentifierKey forIndexPath:indexPath]; + cell.fuImageView.image = [self.viewModel combinationMakeupIconAtIndex:indexPath.item]; + cell.fuTitleLabel.text = [self.viewModel combinationMakeupNameAtIndex:indexPath.item]; + return cell; +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + collectionView.userInteractionEnabled = NO; + self.slider.userInteractionEnabled = NO; + FUCombinationMakeupCell *selectedCell = (FUCombinationMakeupCell *)[self.collectionView cellForItemAtIndexPath:indexPath]; + [selectedCell.indicatorView startAnimating]; + [self.viewModel selectCombinationMakeupAtIndex:indexPath.item complectionHandler:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + [selectedCell.indicatorView stopAnimating]; + [self refreshSubviews]; + collectionView.userInteractionEnabled = YES; + self.slider.userInteractionEnabled = YES; + }); + }]; +} + +#pragma mark - Collection view delegate flow layout + +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { + return (UIEdgeInsets){0, 16, 0, 16}; +} + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + return (CGSize){54, 70}; +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { + return 16; +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { + return 16; +} + +#pragma mark - Getters + +- (UICollectionView *)collectionView { + if (!_collectionView) { + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.showsHorizontalScrollIndicator = NO; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.translatesAutoresizingMaskIntoConstraints = NO; + [_collectionView registerClass:[FUCombinationMakeupCell class] forCellWithReuseIdentifier:kFUCombinationMakeupCellIdentifierKey]; + } + return _collectionView; +} + +- (FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectZero]; + [_slider addTarget:self action:@selector(sliderValueChangedAction) forControlEvents:UIControlEventValueChanged]; + _slider.translatesAutoresizingMaskIntoConstraints = NO; + _slider.hidden = YES; + } + return _slider; +} + +- (FUSquareButton *)customizeButton { + if (!_customizeButton) { + _customizeButton = [[FUSquareButton alloc] initWithFrame:CGRectMake(0, 0, 54, 70) interval:6]; + _customizeButton.translatesAutoresizingMaskIntoConstraints = NO; + [_customizeButton setImage:FUMakeupImageNamed(@"makeup_custom") forState:UIControlStateNormal]; + [_customizeButton setTitle:FUMakeupStringWithKey(@"自定义") forState:UIControlStateNormal]; + [_customizeButton setTitleColor:[UIColor colorWithWhite:1 alpha:0.5] forState:UIControlStateDisabled]; + [_customizeButton addTarget:self action:@selector(customizeAction) forControlEvents:UIControlEventTouchUpInside]; + _customizeButton.enabled = NO; + } + return _customizeButton; +} + +@end + +@interface FUCombinationMakeupCell () + +@property (nonatomic, strong) UIImageView *fuImageView; +@property (nonatomic, strong) UILabel *fuTitleLabel; +@property (nonatomic, strong) UIActivityIndicatorView *indicatorView; + +@end + +@implementation FUCombinationMakeupCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + [self.contentView addSubview:self.fuImageView]; + [self.contentView addSubview:self.fuTitleLabel]; + [self.contentView addSubview:self.indicatorView]; + NSLayoutConstraint *centerYConstraint = [NSLayoutConstraint constraintWithItem:self.indicatorView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.fuImageView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]; + NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem:self.indicatorView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + [self.contentView addConstraints:@[centerXConstraint, centerYConstraint]]; + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.fuImageView.layer.borderWidth = selected ? 3 : 0; + self.fuImageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1].CGColor : [UIColor clearColor].CGColor; + self.fuTitleLabel.textColor = selected ? [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1] : [UIColor whiteColor]; +} + +#pragma mark - Getters + +- (UIImageView *)fuImageView { + if (!_fuImageView) { + _fuImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetWidth(self.frame))]; + _fuImageView.layer.masksToBounds = YES; + _fuImageView.layer.cornerRadius = 3; + } + return _fuImageView; +} + +- (UILabel *)fuTitleLabel { + if (!_fuTitleLabel) { + _fuTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.frame) - 11, CGRectGetWidth(self.frame), 11)]; + _fuTitleLabel.font = [UIFont systemFontOfSize:10]; + _fuTitleLabel.textColor = [UIColor whiteColor]; + _fuTitleLabel.textAlignment = NSTextAlignmentCenter; + _fuTitleLabel.adjustsFontSizeToFitWidth = YES; + } + return _fuTitleLabel; +} + +- (UIActivityIndicatorView *)indicatorView { + if (!_indicatorView) { + _indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + _indicatorView.hidesWhenStopped = YES; + _indicatorView.translatesAutoresizingMaskIntoConstraints = NO; + } + return _indicatorView; +} + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupColorPicker.h b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupColorPicker.h new file mode 100644 index 00000000..9ba44890 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupColorPicker.h @@ -0,0 +1,39 @@ +// +// FUCustomizedMakeupColorPicker.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUCustomizedMakeupColorPickerDelegate + +- (void)colorPickerDidSelectColorAtIndex:(NSUInteger)index; + +@end + +@interface FUCustomizedMakeupColorPicker : UIView + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, copy) NSArray *> *colors; + +- (void)selectAtIndex:(NSUInteger)index; + +@end + +@interface FUCustomizedMakeupColorCell : UICollectionViewCell + +@property (nonatomic, copy) NSArray *color; + +@end + + +@interface FUCustomizedMakeupColorFlowLayout : UICollectionViewFlowLayout + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupColorPicker.m b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupColorPicker.m new file mode 100644 index 00000000..9755df6a --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupColorPicker.m @@ -0,0 +1,292 @@ +// +// FUCustomizedMakeupColorPicker.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/14. +// + +#import "FUCustomizedMakeupColorPicker.h" + +static NSString * const kFUCustomizedMakeupColorCellIdentifier = @"FUCustomizedMakeupColorCell"; + +@interface FUCustomizedMakeupColorPicker () + +@property (nonatomic, strong) UICollectionView *collectionView; + +@end + +@implementation FUCustomizedMakeupColorPicker + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.collectionView]; + + // 中间指示圈 + CAShapeLayer *layer = [CAShapeLayer new]; + layer.lineWidth = 4; + layer.strokeColor = [UIColor whiteColor].CGColor; + layer.fillColor = [UIColor clearColor].CGColor; + CGFloat radius = 22; + UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:self.collectionView.center radius:radius startAngle:0 endAngle:2.0f*M_PI clockwise:NO]; + layer.path = [path CGPath]; + [self.layer addSublayer:layer]; + } + return self; +} + +- (void)selectAtIndex:(NSUInteger)index { + dispatch_async(dispatch_get_main_queue(), ^{ + CGFloat y = index * 50 + 20 - CGRectGetHeight(self.collectionView.frame) / 2.0; + CGPoint offset = CGPointMake(0, y); + [self.collectionView setContentOffset:offset animated:YES]; + }); +} + +- (void)setColors:(NSArray *> *)colors { + _colors = colors; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + }); +} + +#pragma mark - UICollectionViewDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.colors.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + FUCustomizedMakeupColorCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCustomizedMakeupColorCellIdentifier forIndexPath:indexPath]; + cell.color = self.colors[indexPath.row]; + return cell; +} + +#pragma mark - UICollectionViewDelegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + [self selectAtIndex:indexPath.item]; + if (self.delegate && [self.delegate respondsToSelector:@selector(colorPickerDidSelectColorAtIndex:)]) { + [self.delegate colorPickerDidSelectColorAtIndex:indexPath.item]; + } +} + +#pragma mark - UICollectionViewDelegateFlowLayout + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + return CGSizeMake(40, 40); +} + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ + NSUInteger index = (scrollView.contentOffset.y + CGRectGetHeight(self.collectionView.frame)/2.0 - 20)/50.0; + if (self.delegate && [self.delegate respondsToSelector:@selector(colorPickerDidSelectColorAtIndex:)]) { + [self.delegate colorPickerDidSelectColorAtIndex:index]; + } +} + +- (UICollectionView *)collectionView { + if (!_collectionView) { + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.frame) - 40) / 2.0, 0, 40, CGRectGetHeight(self.frame)) collectionViewLayout:[[FUCustomizedMakeupColorFlowLayout alloc] init]]; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.delegate = self; + _collectionView.dataSource = self; + _collectionView.showsVerticalScrollIndicator = NO; + [_collectionView setContentInset:UIEdgeInsetsMake(CGRectGetHeight(_collectionView.bounds)/2.0, 0, CGRectGetHeight(_collectionView.bounds)/2.0, 0)]; + [_collectionView registerClass:[FUCustomizedMakeupColorCell class] forCellWithReuseIdentifier:kFUCustomizedMakeupColorCellIdentifier]; + } + return _collectionView; +} + +@end + +@implementation FUCustomizedMakeupColorCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.layer.cornerRadius = frame.size.width / 2; + self.layer.masksToBounds = YES; + [self setupSubviews]; + } + return self; +} + +-(void)setupSubviews { + float h1 = self.frame.size.width; + float h2 = self.frame.size.width / 2; + float h3 = self.frame.size.width / 3; + + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0 * h2, 0 * h2, h2, h2)]; + view.tag = 400; + [self.contentView addSubview:view]; + UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0 * h2, 1 * h2, h2, h2)]; + view1.tag = 401; + [self.contentView addSubview:view1]; + UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(1 * h2, 0 * h2, h2, h2)]; + view2.tag = 402; + [self.contentView addSubview:view2]; + UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(1 * h2, 1 * h2, h2, h2)]; + view3.tag = 403; + [self.contentView addSubview:view3]; + + UIView *view4 = [[UIView alloc] initWithFrame:CGRectMake(0 ,0 * h3, h1, h3)]; + view4.tag = 300; + [self.contentView addSubview:view4]; + UIView *view5 = [[UIView alloc] initWithFrame:CGRectMake(0, 1 * h3, h1, h3)]; + view5.tag = 301; + [self.contentView addSubview:view5]; + UIView *view6 = [[UIView alloc] initWithFrame:CGRectMake(0, 2 * h3, h1, h3)]; + view6.tag = 302; + [self.contentView addSubview:view6]; + + UIView *view7 = [[UIView alloc] initWithFrame:CGRectMake(0 ,0 * h2, h1, h2)]; + view7.tag = 200; + [self.contentView addSubview:view7]; + UIView *view8 = [[UIView alloc] initWithFrame:CGRectMake(0, 1 * h2, h1, h2)]; + view8.tag = 201; + [self.contentView addSubview:view8]; +} + +- (void)setColor:(NSArray *)color { + for (UIView *view in self.contentView.subviews) { + view.hidden = YES; + } + self.contentView.backgroundColor = [UIColor clearColor]; + + NSMutableArray *mutArray = [NSMutableArray array]; + int colorNum = (int)color.count / 4; + + for (int i = 0; i < colorNum; i ++) { + if([color[i * 4 + 3] intValue] == 1){ + [mutArray addObject:color[i * 4]]; + [mutArray addObject:color[i * 4 + 1]]; + [mutArray addObject:color[i * 4 + 2]]; + [mutArray addObject:color[i * 4 + 3]]; + } + } + + int alphaNum = (int)mutArray.count / 4; + if (alphaNum == 4) { + for (int i = 0; i < 4; i ++) { + float R = [color[i * 4 ] floatValue]; + float G = [color[i * 4 + 1] floatValue]; + float B = [color[i * 4 + 2] floatValue]; + float A = [color[i * 4 + 3] floatValue]; + + UIView *view = [self.contentView viewWithTag:400 + i]; + view.hidden = NO; + view.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; + [self.contentView bringSubviewToFront:view]; + } + } + + + if (alphaNum == 3) { + for (int i = 0; i < 3; i ++) { + float R = [color[i * 4 ] floatValue]; + float G = [color[i * 4 + 1] floatValue]; + float B = [color[i * 4 + 2] floatValue]; + float A = [color[i * 4 + 3] floatValue]; + + UIView *view = [self.contentView viewWithTag:300 + i]; + view.hidden = NO; + view.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; + [self.contentView bringSubviewToFront:view]; + } + } + + if (alphaNum == 2) { + for (int i = 0; i < 3; i ++) { + float R = [color[i * 4 ] floatValue]; + float G = [color[i * 4 + 1] floatValue]; + float B = [color[i * 4 + 2] floatValue]; + float A = [color[i * 4 + 3] floatValue]; + + UIView *view = [self.contentView viewWithTag:200 + i]; + view.hidden = NO; + view.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; + [self.contentView bringSubviewToFront:view]; + } + } + + if (alphaNum == 1) { + float R = [color[0] floatValue]; + float G = [color[1] floatValue]; + float B = [color[2] floatValue]; + float A = [color[3] floatValue]; + + self.contentView.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A]; + } +} + +@end + +@implementation FUCustomizedMakeupColorFlowLayout + +//当布局刷新的时候会自动调用这个方法 +-(void)prepareLayout{ + [super prepareLayout]; + //修改滚动方向 为水平方向来滚动 + self.scrollDirection = UICollectionViewScrollDirectionVertical; + //获取对应UICollectionView的Size + CGSize collectionSize = self.collectionView.frame.size; + + //定义显示ITEM的 宽 高 + CGFloat itemWidth = collectionSize.width*0.6; + CGFloat itemHeight = collectionSize.width*0.6; + + //修改ITEM大小 + self.itemSize = CGSizeMake(itemWidth, itemHeight); +} + +//返回所的有的Item对应的属性设置 +-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ + //取出所有的Item对应的属性 + NSArray *superAttributesArray = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:rect] copyItems:YES]; + + //计算中心点 + CGFloat screenCenter = self.collectionView.contentOffset.y+self.collectionView.frame.size.height/2; + //循环设置Item 的属性 + + for (UICollectionViewLayoutAttributes *attributes in superAttributesArray) { + //计算 差值 + CGFloat deltaMargin = ABS(screenCenter - attributes.center.y); + //计算放大比例 + CGFloat scale = 1 - deltaMargin/(self.collectionView.frame.size.height/2+attributes.size.height) * 0.9; + //设置 + attributes.transform = CGAffineTransformMakeScale(scale, scale); + } + return superAttributesArray; +} + +//当手指离开屏幕时会调用此方法 +-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{ + //取出屏幕的中心点 + CGFloat screenCenter = proposedContentOffset.y +self.collectionView.frame.size.height/2; + //取出可见范围内的Cell + CGRect visibleRect = CGRectZero; + visibleRect.size = self.collectionView.frame.size; + visibleRect.origin = proposedContentOffset; + + NSArray *visibleArray = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:visibleRect] copyItems:YES]; + + CGFloat minMargin = MAXFLOAT; + + for (UICollectionViewLayoutAttributes *attributes in visibleArray) { + CGFloat deltaMargin = attributes.center.y - screenCenter; + if (ABS(minMargin)>ABS(deltaMargin)) { + minMargin = deltaMargin; + } + } + return CGPointMake(proposedContentOffset.x, proposedContentOffset.y + minMargin); +} + +//当屏幕的可见范围发生变化 的时候 +//重新刷新视图 +-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ + return YES; +} + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupView.h b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupView.h new file mode 100644 index 00000000..575289fa --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupView.h @@ -0,0 +1,53 @@ +// +// FUCustomizedMakeupView.h +// FUMakeupComponent +// +// Created by 项林平 on 2021/11/19. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import +#import "FUCustomizedMakeupViewModel.h" + +@class FUCustomizedMakeupView; + +NS_ASSUME_NONNULL_BEGIN + +@protocol FUCustomizedMakeupViewDelegate + +/// 自定义子妆容变化 +- (void)customizedMakeupViewDidChangeSubMakeup:(NSString *)title; +/// 自定义点击返回 +- (void)customizedMakeupViewDidClickBack; + +@end + +@interface FUCustomizedMakeupView : UIView + +@property (nonatomic, strong, readonly) FUCustomizedMakeupViewModel *viewModel; + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUCustomizedMakeupViewModel *)viewModel; + +- (void)show; + +- (void)dismiss; + +@end + +@interface FUCustomizedMakeupCategoryCell : UICollectionViewCell + +/// 蓝点提示 +@property (nonatomic, strong, readonly) UIView *tipView; +@property (nonatomic, strong, readonly) UILabel *categoryNameLabel; + +@end + +@interface FUCustomizedMakeupItemCell : UICollectionViewCell + +@property (nonatomic, strong, readonly) UIImageView *fuImageView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupView.m b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupView.m new file mode 100644 index 00000000..4cd1e06c --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/View/FUCustomizedMakeupView.m @@ -0,0 +1,361 @@ +// +// FUCustomizedMakeupView.m +// FUMakeupComponent +// +// Created by 项林平 on 2021/11/19. +// Copyright © 2021 FaceUnity. All rights reserved. +// + +#import "FUCustomizedMakeupView.h" + +#import "FUMakeupDefine.h" + +#import + +static NSString * const kFUCustomizedMakeupItemCellIdentifierKey = @"FUCustomizedMakeupItemCell"; +static NSString * const kFUCustomizedMakeupCategoryCellIdentifierKey = @"FUCustomizedMakeupCategoryCell"; + +@interface FUCustomizedMakeupView () + +@property (nonatomic, strong) UICollectionView *categoriesCollectionView; +@property (nonatomic, strong) UICollectionView *itemsCollectionView; +@property (nonatomic, strong) FUSlider *slider; + +@property (nonatomic, strong) FUCustomizedMakeupViewModel *viewModel; + +@end + +@implementation FUCustomizedMakeupView + +#pragma mark - Initializer + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame viewModel:[[FUCustomizedMakeupViewModel alloc] init]]; +} + +- (instancetype)initWithFrame:(CGRect)frame viewModel:(FUCustomizedMakeupViewModel *)viewModel { + self = [super initWithFrame:frame]; + if (self) { + self.viewModel = viewModel; + self.backgroundColor = [UIColor clearColor]; + [self configureUI]; + + [self refreshCategoryCollectionView]; + [self refreshItemsCollectionView]; + [self refreshSubviews]; + + } + return self; +} + +#pragma mark - UI + +- (void)configureUI { + // 毛玻璃效果 + UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur]; + effectView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); + [self addSubview:effectView]; + + UIView *categoryView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.frame) - FUMakeupHeightIncludeBottomSafeArea(49), CGRectGetWidth(self.frame), FUMakeupHeightIncludeBottomSafeArea(49))]; + categoryView.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:1.0]; + [self addSubview:categoryView]; + + [categoryView addSubview:self.categoriesCollectionView]; + self.categoriesCollectionView.frame = CGRectMake(0, 0, CGRectGetWidth(categoryView.frame), 49); + + UIView *horizontalLine = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(categoryView.frame) - 0.5, CGRectGetWidth(self.frame), 0.5)]; + horizontalLine.backgroundColor = [UIColor colorWithWhite:1 alpha:0.2]; + [self addSubview:horizontalLine]; + + UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + backButton.frame = CGRectMake(16, CGRectGetMinY(horizontalLine.frame) - 76, 54, 54); + [backButton setImage:FUMakeupImageNamed(@"makeup_back") forState:UIControlStateNormal]; + [backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:backButton]; + + UIView *line = [[UIView alloc] initWithFrame:CGRectMake(85, CGRectGetMinY(horizontalLine.frame) - 69, 1, 40)]; + line.backgroundColor = [UIColor colorWithRed:229/255.0 green:229/255.0 blue:229/255.0 alpha:0.2]; + [self addSubview:line]; + + [self addSubview:self.itemsCollectionView]; + self.itemsCollectionView.frame = CGRectMake(86, CGRectGetMinY(horizontalLine.frame) - 90, CGRectGetWidth(self.frame) - 86, 82); + + [self addSubview:self.slider]; + self.slider.frame = CGRectMake(34, CGRectGetMinY(self.itemsCollectionView.frame) - 30, CGRectGetWidth(self.frame) - 68, 30); +} + +#pragma mark - Instance methods + +- (void)show { + // 先刷新界面 + [self refreshCategoryCollectionView]; + [self refreshItemsCollectionView]; + [self refreshSubviews]; + self.hidden = NO; + [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ + self.transform = CGAffineTransformIdentity; + } completion:^(BOOL finished) { + }]; +} + +- (void)dismiss { + [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ + self.transform = CGAffineTransformMakeTranslation(0, CGRectGetHeight(self.bounds)); + } completion:^(BOOL finished) { + self.hidden = YES; + }]; +} + +#pragma mark - Private methods + +- (void)refreshCategoryCollectionView { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.categoriesCollectionView reloadData]; + [self.categoriesCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedCategoryIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + }); +} + +- (void)refreshItemsCollectionView { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.itemsCollectionView reloadData]; + // 当前类型选中的单个子妆 + [self.itemsCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedSubMakeupIndex inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally]; + }); +} + +- (void)refreshSubviews { + dispatch_async(dispatch_get_main_queue(), ^{ + self.slider.hidden = self.viewModel.selectedSubMakeupIndex == 0; + self.slider.value = self.viewModel.selectedSubMakeupValue; + }); +} + +#pragma mark - Event response + +- (void)backAction:(UIButton *)sender { + if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupViewDidClickBack)]) { + [self.delegate customizedMakeupViewDidClickBack]; + } +} + +- (void)sliderValueChangedAction { + self.viewModel.selectedSubMakeupValue = self.slider.value; +} + +- (void)sliderChangeEnded { + [self refreshCategoryCollectionView]; +} + +#pragma mark - Collection view data source + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return collectionView == self.categoriesCollectionView ? self.viewModel.customizedMakeups.count : self.viewModel.selectedSubMakeups.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.categoriesCollectionView) { + FUCustomizedMakeupCategoryCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCustomizedMakeupCategoryCellIdentifierKey forIndexPath:indexPath]; + cell.categoryNameLabel.text = [self.viewModel categoryNameAtIndex:indexPath.item]; + cell.tipView.hidden = ![self.viewModel hasValidValueAtCategoryIndex:indexPath.item]; + return cell; + } else { + FUCustomizedMakeupItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kFUCustomizedMakeupItemCellIdentifierKey forIndexPath:indexPath]; + cell.fuImageView.backgroundColor = [self.viewModel subMakeupBackgroundColorAtIndex:indexPath.item]; + cell.fuImageView.image = [self.viewModel subMakeupImageAtIndex:indexPath.item]; + return cell; + } +} + +#pragma mark - Collection view delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.categoriesCollectionView) { + if (self.viewModel.selectedCategoryIndex == indexPath.item) { + return; + } + self.viewModel.selectedCategoryIndex = indexPath.item; + if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupViewDidChangeSubMakeup:)]) { + [self.delegate customizedMakeupViewDidChangeSubMakeup:self.viewModel.selectedSubMakeupTitle]; + } + [self refreshItemsCollectionView]; + [self refreshSubviews]; + } else { + if (indexPath.item == self.viewModel.selectedSubMakeupIndex) { + return; + } + self.viewModel.selectedSubMakeupIndex = indexPath.item; + if (self.delegate && [self.delegate respondsToSelector:@selector(customizedMakeupViewDidChangeSubMakeup:)]) { + [self.delegate customizedMakeupViewDidChangeSubMakeup:self.viewModel.selectedSubMakeupTitle]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [self.categoriesCollectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:self.viewModel.selectedCategoryIndex inSection:0]]]; + [self.categoriesCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:self.viewModel.selectedCategoryIndex inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone]; + [self refreshSubviews]; + }); + } +} + +#pragma mark - Collection view delegate flow layout + +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { + return collectionView == self.itemsCollectionView ? (UIEdgeInsets){0, 16, 0, 16} : UIEdgeInsetsZero; +} + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + if (collectionView == self.itemsCollectionView) { + return (CGSize){54, 54}; + } else { + NSString *titleString = [self.viewModel categoryNameAtIndex:indexPath.item]; + CGFloat titleWidth = [titleString sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:13]}].width; + return CGSizeMake(titleWidth + 40, 49); + } +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { + return collectionView == self.itemsCollectionView ? 16 : 0; +} + +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { + return collectionView == self.itemsCollectionView ? 16 : 0; +} + +#pragma mark - Getters + +- (UICollectionView *)categoriesCollectionView { + if (!_categoriesCollectionView) { + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _categoriesCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; + _categoriesCollectionView.backgroundColor = [UIColor clearColor]; + _categoriesCollectionView.showsHorizontalScrollIndicator = NO; + _categoriesCollectionView.dataSource = self; + _categoriesCollectionView.delegate = self; + [_categoriesCollectionView registerClass:[FUCustomizedMakeupCategoryCell class] forCellWithReuseIdentifier:kFUCustomizedMakeupCategoryCellIdentifierKey]; + } + return _categoriesCollectionView; +} + +- (UICollectionView *)itemsCollectionView { + if (!_itemsCollectionView) { + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _itemsCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; + _itemsCollectionView.backgroundColor = [UIColor clearColor]; + _itemsCollectionView.showsHorizontalScrollIndicator = NO; + _itemsCollectionView.dataSource = self; + _itemsCollectionView.delegate = self; + [_itemsCollectionView registerClass:[FUCustomizedMakeupItemCell class] forCellWithReuseIdentifier:kFUCustomizedMakeupItemCellIdentifierKey]; + } + return _itemsCollectionView; +} + +- (FUSlider *)slider { + if (!_slider) { + _slider = [[FUSlider alloc] initWithFrame:CGRectZero]; + [_slider addTarget:self action:@selector(sliderValueChangedAction) forControlEvents:UIControlEventValueChanged]; + [_slider addTarget:self action:@selector(sliderChangeEnded) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; + _slider.hidden = YES; + } + return _slider; +} + +@end + +@interface FUCustomizedMakeupCategoryCell () + +@property (nonatomic, strong) UIView *tipView; +@property (nonatomic, strong) UILabel *categoryNameLabel; + +@end + +@implementation FUCustomizedMakeupCategoryCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.categoryNameLabel]; + NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:self.categoryNameLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]; + NSLayoutConstraint *centerY = [NSLayoutConstraint constraintWithItem:self.categoryNameLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]; + [self.contentView addConstraints:@[centerX, centerY]]; + + [self.contentView addSubview:self.tipView]; + NSLayoutConstraint *tipTrailing = [NSLayoutConstraint constraintWithItem:self.tipView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTrailing multiplier:1 constant:-4]; + NSLayoutConstraint *tipTop = [NSLayoutConstraint constraintWithItem:self.tipView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1 constant:10]; + NSLayoutConstraint *tipWidth = [NSLayoutConstraint constraintWithItem:self.tipView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:4]; + NSLayoutConstraint *tipHeight = [NSLayoutConstraint constraintWithItem:self.tipView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:4]; + [self.contentView addConstraints:@[tipTrailing, tipTop]]; + [self.tipView addConstraints:@[tipWidth, tipHeight]]; + } + return self; +} + +#pragma mark - Override methods + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.categoryNameLabel.textColor = selected ? [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1] : [UIColor whiteColor]; +} + +#pragma mark - Getters + +- (UIView *)tipView { + if (!_tipView) { + _tipView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 4, 4)]; + _tipView.backgroundColor = [UIColor colorWithRed:94/255.0 green:199/255.0 blue:254/255.0 alpha:1]; + _tipView.layer.masksToBounds = YES; + _tipView.layer.cornerRadius = 2; + _tipView.translatesAutoresizingMaskIntoConstraints = NO; + _tipView.hidden = YES; + } + return _tipView; +} + +- (UILabel *)categoryNameLabel { + if (!_categoryNameLabel) { + _categoryNameLabel = [[UILabel alloc] init]; + _categoryNameLabel.font = [UIFont systemFontOfSize:13]; + _categoryNameLabel.textColor = [UIColor whiteColor]; + _categoryNameLabel.translatesAutoresizingMaskIntoConstraints = NO; + } + return _categoryNameLabel; +} + +@end + + +@interface FUCustomizedMakeupItemCell () + +@property (nonatomic, strong) UIImageView *fuImageView; + +@end + +@implementation FUCustomizedMakeupItemCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self.contentView addSubview:self.fuImageView]; + + } + return self; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + self.fuImageView.layer.borderWidth = selected ? 3 : 0; + self.fuImageView.layer.borderColor = selected ? [UIColor colorWithRed:94/255.f green:199/255.f blue:254/255.f alpha:1].CGColor : [UIColor clearColor].CGColor; +} + +#pragma mark - Getters + +- (UIImageView *)fuImageView { + if (!_fuImageView) { + _fuImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetWidth(self.frame))]; + _fuImageView.layer.masksToBounds = YES; + _fuImageView.layer.cornerRadius = 3; + } + return _fuImageView; +} + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCombinationMakeupViewModel.h b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCombinationMakeupViewModel.h new file mode 100644 index 00000000..81946c0d --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCombinationMakeupViewModel.h @@ -0,0 +1,58 @@ +// +// FUCombinationMakeupViewModel.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/7. +// + +#import +#import + +#import "FUMakeupDefine.h" + +@class FUCombinationMakeupModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUCombinationMakeupViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *combinationMakeups; + +/// 当前选中组合妆是否允许自定义 +@property (nonatomic, assign, readonly) BOOL isSelectedMakeupAllowedEdit; + +/// 当前选中组合妆索引 +/// @note 0表示卸载状态,-1表示未选中状态 +@property (nonatomic, assign, readonly) NSInteger selectedIndex; + +/// 当前选中组合妆程度值 +@property (nonatomic, assign) double selectedMakeupValue; + +/// 选择组合妆,异步加载 +/// @param index 组合妆索引,0为卸载,-1为未选中状态 +/// @param complection 完成回调 +- (void)selectCombinationMakeupAtIndex:(NSInteger)index complectionHandler:(nullable void (^)(void))complection; + +/// 组合妆名称 +/// @param index 索引 +- (NSString *)combinationMakeupNameAtIndex:(NSUInteger)index; + +/// 组合妆icon +/// @param index 索引 +- (UIImage *)combinationMakeupIconAtIndex:(NSUInteger)index; + +/// 选中组合妆中指定类型子妆的索引 +/// @note 未选中组合妆时返回默认值0 +- (NSUInteger)subMakeupIndexOfSelectedCombinationMakeupWithType:(FUSubMakeupType)type; + +/// 选中组合妆中指定类型子妆的程度值 +/// @note 未选中组合妆时返回默认值1.0 +- (double)subMakeupValueOfSelectedCombinationMakeupWithType:(FUSubMakeupType)type; + +/// 选中组合妆中指定类型子妆的颜色索引 +/// @note 未选中组合妆时返回默认值0 +- (NSUInteger)subMakeupColorIndexOfSelectedCombinationMakeupWithType:(FUSubMakeupType)type; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCombinationMakeupViewModel.m b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCombinationMakeupViewModel.m new file mode 100644 index 00000000..42ecd03c --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCombinationMakeupViewModel.m @@ -0,0 +1,490 @@ +// +// FUCombinationMakeupViewModel.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/7. +// + +#import "FUCombinationMakeupViewModel.h" +#import "FUCombinationMakeupModel.h" + +#import + +@interface FUCombinationMakeupViewModel () + +@property (nonatomic, copy) NSArray *combinationMakeups; + +@property (nonatomic, strong) dispatch_queue_t loadingQueue; + +@property (nonatomic, assign) NSInteger selectedIndex; + +@end + +@implementation FUCombinationMakeupViewModel { + void *loadingQueueKey; +} + +- (instancetype)init { + self = [super init]; + if (self) { + [self selectCombinationMakeupAtIndex:1 complectionHandler:nil]; + } + return self; +} + +#pragma mark - Instance methods + +- (void)selectCombinationMakeupAtIndex:(NSInteger)index complectionHandler:(void (^)(void))complection { + if (index == self.selectedIndex) { + !complection ?: complection(); + return; + } + if (index < 0 || index >= self.combinationMakeups.count) { + self.selectedIndex = -1; + !complection ?: complection(); + return; + } + if (index == 0) { + // 卸妆 + [FURenderKit shareRenderKit].makeup = nil; + self.selectedIndex = 0; + !complection ?: complection(); + return; + } + NSInteger currentIndex = self.selectedIndex; + self.selectedIndex = index; + dispatch_async(self.loadingQueue, ^{ + FUCombinationMakeupModel *model = self.combinationMakeups[index]; + // @note 嗲嗲兔、冻龄、国风、混血是8.0.0新加的四个组合妆,新组合妆只需要直接加载bundle,不需要绑定到face_makeup.bundle + if (model.isCombined) { + // 新组合妆,每次加载必须重新初始化 + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:model.bundleName ofType:@"bundle"]; + FUMakeup *makeup = [[FUMakeup alloc] initWithPath:path name:@"makeup"]; + // 高端机打开口红遮挡 + makeup.makeupSegmentation = [FURenderKit devicePerformanceLevel] == FUDevicePerformanceLevelHigh; + [FURenderKit shareRenderKit].makeup = makeup; + } else { + if (currentIndex == -1 || self.combinationMakeups[currentIndex].isCombined || ![FURenderKit shareRenderKit].makeup) { + // 当前选择的是新组合装或者当前未加载美妆,需要重新初始化 + NSString *path = [[NSBundle mainBundle] pathForResource:@"face_makeup" ofType:@"bundle"]; + FUMakeup *makeup = [[FUMakeup alloc] initWithPath:path name:@"makeup"]; + // 高端机打开口红遮挡 + makeup.makeupSegmentation = [FURenderKit devicePerformanceLevel] == FUDevicePerformanceLevelHigh; + [FURenderKit shareRenderKit].makeup = makeup; + } + [self bindCombinationMakeupWithBundleName:model.bundleName]; + } + [self updateFilterOfCombinationMakeup:model]; + [self updateIntensityOfCombinationMakeup:model]; + !complection ?: complection(); + }); +} + +- (NSString *)combinationMakeupNameAtIndex:(NSUInteger)index { + FUCombinationMakeupModel *model = self.combinationMakeups[index]; + return FUMakeupStringWithKey(model.name); +} + +- (UIImage *)combinationMakeupIconAtIndex:(NSUInteger)index { + FUCombinationMakeupModel *model = self.combinationMakeups[index]; + return FUMakeupImageNamed(model.icon); +} + +- (NSUInteger)subMakeupIndexOfSelectedCombinationMakeupWithType:(FUSubMakeupType)type { + if (self.selectedIndex <= 0) { + return 0; + } + FUCombinationMakeupModel *model = self.combinationMakeups[self.selectedIndex]; + NSUInteger index = 0; + switch (type) { + case FUSubMakeupTypeFoundation: + index = model.foundationModel.index; + break; + case FUSubMakeupTypeLip: + index = model.lipstickModel.index; + break; + case FUSubMakeupTypeBlusher: + index = model.blusherModel.index; + break; + case FUSubMakeupTypeEyebrow: + index = model.eyebrowModel.index; + break; + case FUSubMakeupTypeEyeShadow: + index = model.eyeShadowModel.index; + break; + case FUSubMakeupTypeEyeliner: + index = model.eyelinerModel.index; + break; + case FUSubMakeupTypeEyelash: + index = model.eyelashModel.index; + break; + case FUSubMakeupTypeHighlight: + index = model.highlightModel.index; + break; + case FUSubMakeupTypeShadow: + index = model.shadowModel.index; + break; + case FUSubMakeupTypePupil: + index = model.pupilModel.index; + break; + } + return index; +} + +- (double)subMakeupValueOfSelectedCombinationMakeupWithType:(FUSubMakeupType)type { + if (self.selectedIndex <= 0) { + return self.selectedMakeupValue; + } + FUCombinationMakeupModel *model = self.combinationMakeups[self.selectedIndex]; + double value = 0; + switch (type) { + case FUSubMakeupTypeFoundation: + value = model.foundationModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeLip: + value = model.lipstickModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeBlusher: + value = model.blusherModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeEyebrow: + value = model.eyebrowModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeEyeShadow: + value = model.eyeShadowModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeEyeliner: + value = model.eyelinerModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeEyelash: + value = model.eyelashModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeHighlight: + value = model.highlightModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypeShadow: + value = model.shadowModel.value * self.selectedMakeupValue; + break; + case FUSubMakeupTypePupil: + value = model.pupilModel.value * self.selectedMakeupValue; + break; + } + return value; +} + +- (NSUInteger)subMakeupColorIndexOfSelectedCombinationMakeupWithType:(FUSubMakeupType)type { + if (self.selectedIndex <= 0) { + return 0; + } + FUCombinationMakeupModel *model = self.combinationMakeups[self.selectedIndex]; + NSUInteger index = 0; + switch (type) { + case FUSubMakeupTypeLip: + index = model.lipstickModel.defaultColorIndex; + break; + case FUSubMakeupTypeBlusher: + index = model.blusherModel.defaultColorIndex; + break; + case FUSubMakeupTypeEyebrow: + index = model.eyebrowModel.defaultColorIndex; + break; + case FUSubMakeupTypeEyeShadow: + index = model.eyeShadowModel.defaultColorIndex; + break; + case FUSubMakeupTypeEyeliner: + index = model.eyelinerModel.defaultColorIndex; + break; + case FUSubMakeupTypeEyelash: + index = model.eyelashModel.defaultColorIndex; + break; + case FUSubMakeupTypeHighlight: + index = model.highlightModel.defaultColorIndex; + break; + case FUSubMakeupTypeShadow: + index = model.shadowModel.defaultColorIndex; + break; + case FUSubMakeupTypePupil: + index = model.pupilModel.defaultColorIndex; + break; + default: + break; + } + return index; +} + +#pragma mark - Private methods + +/// 绑定组合妆到face_makeup.bundle(老组合妆方法) +- (void)bindCombinationMakeupWithBundleName:(NSString *)bundleName { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:bundleName ofType:@"bundle"]; + FUItem *item = [[FUItem alloc] initWithPath:path name:bundleName]; + [[FURenderKit shareRenderKit].makeup updateMakeupPackage:item needCleanSubItem:YES]; +} + +- (void)updateIntensityOfCombinationMakeup:(FUCombinationMakeupModel *)model { + if (model.isCombined) { + // 新组合妆直接设置 + [FURenderKit shareRenderKit].makeup.intensity = model.value; + } else { + // 老组合妆需要设置所有子妆值,子妆实际值=组合妆值*子妆默认值 + FUMakeup *makeup = [FURenderKit shareRenderKit].makeup; + makeup.intensityFoundation = model.foundationModel.value * model.value; + makeup.lipType = model.lipstickModel.lipstickType; + makeup.isTwoColor = model.lipstickModel.isTwoColorLipstick; + makeup.intensityLip = model.lipstickModel.value * model.value; + if (makeup.lipType == FUMakeupLipTypeMoisturizing) { + // 润泽Ⅱ口红时需要开启口红高光,高光暂时为固定值 + makeup.isLipHighlightOn = YES; + makeup.intensityLipHighlight = 0.8; + } else { + makeup.isLipHighlightOn = NO; + makeup.intensityLipHighlight = 0; + } + makeup.intensityBlusher = model.blusherModel.value * model.value; + makeup.intensityEyebrow = model.eyebrowModel.value * model.value; + makeup.intensityEyeshadow = model.eyeShadowModel.value * model.value; + makeup.intensityEyeliner = model.eyelinerModel.value * model.value; + makeup.intensityEyelash = model.eyelashModel.value * model.value; + makeup.intensityHighlight = model.highlightModel.value * model.value; + makeup.intensityShadow = model.shadowModel.value * model.value; + makeup.intensityPupil = model.pupilModel.value * model.value; + } +} + +/// 更新组合妆的滤镜 +/// @note 老组合妆滤镜设置给FUBeauty实例,新组合妆滤镜直接设置给FUMakeup实例 +- (void)updateFilterOfCombinationMakeup:(FUCombinationMakeupModel *)model { + if (model.isCombined) { + // 恢复美颜滤镜为原图效果 + [FURenderKit shareRenderKit].beauty.filterName = @"origin"; + // 设置美妆滤镜值 + [FURenderKit shareRenderKit].makeup.filterIntensity = model.value * model.selectedFilterLevel; + } else { + if (![FURenderKit shareRenderKit].beauty) { + return; + } + if (!model.selectedFilter || [model.selectedFilter isEqualToString:@""]) { + // 没有滤镜则使用默认滤镜"origin" + [FURenderKit shareRenderKit].beauty.filterName = @"origin"; + [FURenderKit shareRenderKit].beauty.filterLevel = model.value; + } else { + [FURenderKit shareRenderKit].beauty.filterName = [model.selectedFilter lowercaseString]; + [FURenderKit shareRenderKit].beauty.filterLevel = model.value; + } + } +} + +#pragma mark - Setters + +- (void)setSelectedMakeupValue:(double)selectedMakeupValue { + if (self.selectedIndex < 0 || self.selectedIndex >= self.combinationMakeups.count) { + return; + } + FUCombinationMakeupModel *model = self.combinationMakeups[self.selectedIndex]; + model.value = selectedMakeupValue; + [self updateIntensityOfCombinationMakeup:model]; + [self updateFilterOfCombinationMakeup:model]; +} + +#pragma mark - Getters + +- (NSArray *)combinationMakeups { + if (!_combinationMakeups) { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:@"combination_makeups" ofType:@"json"]; + NSArray *data = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *makeups = [[NSMutableArray alloc] init]; + for (NSDictionary *dictionary in data) { + FUCombinationMakeupModel *model = [[FUCombinationMakeupModel alloc] init]; + [model setValuesForKeysWithDictionary:dictionary]; + if (![model.name isEqualToString:@"卸妆"]) { + // 解析对应组合妆的json文件 + NSString *combinationPath = [bundle pathForResource:model.bundleName ofType:@"json"]; + NSDictionary *combinationDictionary = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:combinationPath] options:NSJSONReadingMutableContainers error:nil]; + // 设置子妆内容 + FUSubMakeupModel *foundation = [[FUSubMakeupModel alloc] init]; + foundation.value = [combinationDictionary[@"makeup_intensity_foundation"] doubleValue]; + foundation.color = (NSArray *)combinationDictionary[@"makeup_foundation_color"]; + model.foundationModel = foundation; + + FULipstickModel *lip = [[FULipstickModel alloc] init]; + lip.value = [combinationDictionary[@"makeup_intensity_lip"] doubleValue]; + lip.color = (NSArray *)combinationDictionary[@"makeup_lip_color"]; + lip.isTwoColorLipstick = [combinationDictionary[@"is_two_color"] boolValue]; + lip.lipstickType = [combinationDictionary[@"lip_type"] integerValue]; + model.lipstickModel = lip; + + FUSubMakeupModel *blusher = [[FUSubMakeupModel alloc] init]; + blusher.value = [combinationDictionary[@"makeup_intensity_blusher"] doubleValue]; + blusher.color = (NSArray *)combinationDictionary[@"makeup_blusher_color"]; + model.blusherModel = blusher; + + FUEyebrowModel *eyebrow = [[FUEyebrowModel alloc] init]; + eyebrow.value = [combinationDictionary[@"makeup_intensity_eyeBrow"] doubleValue]; + eyebrow.color = (NSArray *)combinationDictionary[@"makeup_eyeBrow_color"]; + eyebrow.isBrowWarp = [combinationDictionary[@"brow_warp"] boolValue]; + eyebrow.browWarpType = [combinationDictionary[@"brow_warp_type"] integerValue]; + model.eyebrowModel = eyebrow; + + FUSubMakeupModel *eyeShadow = [[FUSubMakeupModel alloc] init]; + eyeShadow.value = [combinationDictionary[@"makeup_intensity_eye"] doubleValue]; + eyeShadow.color = (NSArray *)combinationDictionary[@"makeup_eye_color"]; + model.eyeShadowModel = eyeShadow; + + FUSubMakeupModel *eyeliner = [[FUSubMakeupModel alloc] init]; + eyeliner.value = [combinationDictionary[@"makeup_intensity_eyeLiner"] doubleValue]; + eyeliner.color = (NSArray *)combinationDictionary[@"makeup_eyeLiner_color"]; + model.eyelinerModel = eyeliner; + + FUSubMakeupModel *eyelash = [[FUSubMakeupModel alloc] init]; + eyelash.value = [combinationDictionary[@"makeup_intensity_eyelash"] doubleValue]; + eyelash.color = (NSArray *)combinationDictionary[@"makeup_eyelash_color"]; + model.eyelashModel = eyelash; + + FUSubMakeupModel *highlight = [[FUSubMakeupModel alloc] init]; + highlight.value = [combinationDictionary[@"makeup_intensity_highlight"] doubleValue]; + highlight.color = (NSArray *)combinationDictionary[@"makeup_highlight_color"]; + model.highlightModel = highlight; + + FUSubMakeupModel *shadow = [[FUSubMakeupModel alloc] init]; + shadow.value = [combinationDictionary[@"makeup_intensity_shadow"] doubleValue]; + shadow.color = (NSArray *)combinationDictionary[@"makeup_shadow_color"]; + model.shadowModel = shadow; + + FUSubMakeupModel *pupil = [[FUSubMakeupModel alloc] init]; + pupil.value = [combinationDictionary[@"makeup_intensity_pupil"] doubleValue]; + pupil.color = (NSArray *)combinationDictionary[@"makeup_pupil_color"]; + model.pupilModel = pupil; + + // 允许自定义组合妆包含的各个子妆对应自定义子妆索引和颜色索引 + if ([model.name isEqualToString:@"性感"]) { + foundation.index = 1; + lip.index = 1; + lip.defaultColorIndex = 0; + blusher.index = 2; + blusher.defaultColorIndex = 0; + eyebrow.index = 1; + eyebrow.defaultColorIndex = 0; + eyeShadow.index = 2; + eyeShadow.defaultColorIndex = 0; + eyeliner.index = 1; + eyeliner.defaultColorIndex = 0; + eyelash.index = 4; + eyelash.defaultColorIndex = 0; + highlight.index = 2; + highlight.defaultColorIndex = 0; + shadow.index = 1; + shadow.defaultColorIndex = 0; + pupil.index = 0; + pupil.defaultColorIndex = 0; + } else if ([model.name isEqualToString:@"甜美"]) { + foundation.index = 2; + lip.index = 1; + lip.defaultColorIndex = 1; + blusher.index = 4; + blusher.defaultColorIndex = 1; + eyebrow.index = 4; + eyebrow.defaultColorIndex = 0; + eyeShadow.index = 1; + eyeShadow.defaultColorIndex = 0; + eyeliner.index = 2; + eyeliner.defaultColorIndex = 1; + eyelash.index = 2; + eyelash.defaultColorIndex = 0; + highlight.index = 1; + highlight.defaultColorIndex = 1; + shadow.index = 1; + shadow.defaultColorIndex = 0; + pupil.index = 0; + pupil.defaultColorIndex = 0; + } else if ([model.name isEqualToString:@"邻家"]) { + foundation.index = 3; + lip.index = 1; + lip.defaultColorIndex = 2; + blusher.index = 1; + blusher.defaultColorIndex = 2; + eyebrow.index = 2; + eyebrow.defaultColorIndex = 0; + eyeShadow.index = 1; + eyeShadow.defaultColorIndex = 0; + eyeliner.index = 6; + eyeliner.defaultColorIndex = 2; + eyelash.index = 1; + eyelash.defaultColorIndex = 0; + highlight.index = 0; + highlight.defaultColorIndex = 0; + shadow.index = 0; + shadow.defaultColorIndex = 0; + pupil.index = 0; + pupil.defaultColorIndex = 0; + } else if ([model.name isEqualToString:@"欧美"]) { + foundation.index = 2; + lip.index = 1; + lip.defaultColorIndex = 3; + blusher.index = 2; + blusher.defaultColorIndex = 3; + eyebrow.index = 1; + eyebrow.defaultColorIndex = 0; + eyeShadow.index = 4; + eyeShadow.defaultColorIndex = 0; + eyeliner.index = 5; + eyeliner.defaultColorIndex = 3; + eyelash.index = 5; + eyelash.defaultColorIndex = 0; + highlight.index = 2; + highlight.defaultColorIndex = 3; + shadow.index = 1; + shadow.defaultColorIndex = 3; + pupil.index = 0; + pupil.defaultColorIndex = 0; + } else if ([model.name isEqualToString:@"妩媚"]) { + foundation.index = 4; + lip.index = 1; + lip.defaultColorIndex = 4; + blusher.index = 3; + blusher.defaultColorIndex = 4; + eyebrow.index = 1; + eyebrow.defaultColorIndex = 0; + eyeShadow.index = 2; + eyeShadow.defaultColorIndex = 1; + eyeliner.index = 3; + eyeliner.defaultColorIndex = 2; + eyelash.index = 3; + eyelash.defaultColorIndex = 0; + highlight.index = 1; + highlight.defaultColorIndex = 4; + shadow.index = 0; + shadow.defaultColorIndex = 0; + pupil.index = 0; + pupil.defaultColorIndex = 0; + } + } + [makeups addObject:model]; + } + _combinationMakeups = [makeups copy]; + } + return _combinationMakeups; +} + +- (BOOL)isSelectedMakeupAllowedEdit { + return self.combinationMakeups[self.selectedIndex].isAllowedEdit; +} + +- (double)selectedMakeupValue { + return self.combinationMakeups[self.selectedIndex].value; +} + +- (dispatch_queue_t)loadingQueue { + if (_loadingQueue == NULL) { + loadingQueueKey = &loadingQueueKey; + _loadingQueue = dispatch_queue_create("com.faceunity.FUMakeupComponent.loadingQueue", DISPATCH_QUEUE_SERIAL); +#if OS_OBJECT_USE_OBJC + dispatch_queue_set_specific(_loadingQueue, loadingQueueKey, (__bridge void *)self, NULL); +#endif + } + return _loadingQueue; +} + +@end diff --git a/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCustomizedMakeupViewModel.h b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCustomizedMakeupViewModel.h new file mode 100644 index 00000000..120c4461 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCustomizedMakeupViewModel.h @@ -0,0 +1,83 @@ +// +// FUCustomizedMakeupViewModel.h +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/13. +// + +#import +#import + +#import "FUMakeupDefine.h" + +@class FUCustomizedMakeupModel, FUSubMakeupModel; + +NS_ASSUME_NONNULL_BEGIN + +@interface FUCustomizedMakeupViewModel : NSObject + +@property (nonatomic, copy, readonly) NSArray *customizedMakeups; + +/// 当前自定义子妆数组 +@property (nonatomic, copy, readonly) NSArray *selectedSubMakeups; + +/// 当前自定义子妆是否需要自定义颜色选择器 +@property (nonatomic, assign, readonly) BOOL needsColorPicker; + +/// 当前自定义子妆可选颜色数组 +@property (nonatomic, copy, readonly) NSArray *> *currentColors; + +/// 当前自定义子妆标题 +@property (nonatomic, copy, readonly) NSString *selectedSubMakeupTitle; + +/// 选中类型索引,默认为0 +@property (nonatomic, assign) NSUInteger selectedCategoryIndex; + +/// 当前自定义子妆索引 +@property (nonatomic, assign) NSUInteger selectedSubMakeupIndex; + +/// 当前自定义子妆选择的颜色索引 +@property (nonatomic, assign) NSUInteger selectedColorIndex; + +/// 当前自定义子妆程度值 +@property (nonatomic, assign) double selectedSubMakeupValue; + + +/// 更新自定义妆容数据 +/// @param type 子妆类型 +/// @param index 子妆索引 +/// @param value 子妆程度值 +/// @param colorIndex 子妆颜色索引 +- (void)updateCustomizedMakeupsWithSubMakeupType:(FUSubMakeupType)type + selectedSubMakeupIndex:(NSUInteger)index + selectedSubMakeupValue:(double)value + selectedColorIndex:(NSUInteger)colorIndex; + +/// 当前自定义妆容中指定类型子妆的索引 +- (NSUInteger)subMakeupIndexWithType:(FUSubMakeupType)type; + +/// 当前自定义妆容中指定类型子妆的程度值 +- (double)subMakeupValueWithType:(FUSubMakeupType)type; + +/// 当前自定义妆容中指定类型子妆的颜色索引 +- (NSUInteger)subMakeupColorIndexWithType:(FUSubMakeupType)type; + +/// 子妆容分类名称 +/// @param index 分类索引 +- (NSString *)categoryNameAtIndex:(NSUInteger)index; + +/// 子妆容是否有值 +/// @param index 分类索引 +- (BOOL)hasValidValueAtCategoryIndex:(NSUInteger)index; + +/// 子妆容视图背景色 +/// @param index 子妆容索引 +- (UIColor *)subMakeupBackgroundColorAtIndex:(NSUInteger)index; + +/// 子妆容icon +/// @param index 子妆容索引 +- (UIImage *)subMakeupImageAtIndex:(NSUInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCustomizedMakeupViewModel.m b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCustomizedMakeupViewModel.m new file mode 100644 index 00000000..00a82f53 --- /dev/null +++ b/FUMakeupComponent/FUMakeupComponent/ViewModel/FUCustomizedMakeupViewModel.m @@ -0,0 +1,365 @@ +// +// FUCustomizedMakeupViewModel.m +// FUMakeupComponent +// +// Created by 项林平 on 2022/9/13. +// + +#import "FUCustomizedMakeupViewModel.h" +#import "FUCustomizedMakeupModel.h" + +#import + +@interface FUCustomizedMakeupViewModel () + +@property (nonatomic, copy) NSArray *customizedMakeups; + +@end + +@implementation FUCustomizedMakeupViewModel + +#pragma mark - Instance methods + +- (void)updateCustomizedMakeupsWithSubMakeupType:(FUSubMakeupType)type + selectedSubMakeupIndex:(NSUInteger)index + selectedSubMakeupValue:(double)value + selectedColorIndex:(NSUInteger)colorIndex { + FUCustomizedMakeupModel *model = self.customizedMakeups[type]; + model.selectedSubMakeupIndex = index; + FUSubMakeupModel *subModel = model.subMakeups[index]; + subModel.value = index == 0 ? 0.0 : value; + subModel.defaultColorIndex = colorIndex; +} + +- (NSUInteger)subMakeupIndexWithType:(FUSubMakeupType)type { + return self.customizedMakeups[type].selectedSubMakeupIndex; +} + +- (double)subMakeupValueWithType:(FUSubMakeupType)type { + FUCustomizedMakeupModel *model = self.customizedMakeups[type]; + FUSubMakeupModel *subModel = model.subMakeups[model.selectedSubMakeupIndex]; + return subModel.value; +} + +- (NSUInteger)subMakeupColorIndexWithType:(FUSubMakeupType)type { + FUCustomizedMakeupModel *model = self.customizedMakeups[type]; + FUSubMakeupModel *subModel = model.subMakeups[model.selectedSubMakeupIndex]; + return subModel.defaultColorIndex; +} + +- (NSString *)categoryNameAtIndex:(NSUInteger)index { + FUCustomizedMakeupModel *model = self.customizedMakeups[index]; + return FUMakeupStringWithKey(model.name); +} + +- (BOOL)hasValidValueAtCategoryIndex:(NSUInteger)index { + FUCustomizedMakeupModel *model = self.customizedMakeups[index]; + return model.selectedSubMakeupIndex > 0 && model.subMakeups[model.selectedSubMakeupIndex].value > 0; +} + +- (UIColor *)subMakeupBackgroundColorAtIndex:(NSUInteger)index { + FUCustomizedMakeupModel *model = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = model.subMakeups[index]; + if (subMakeupModel.type == FUSubMakeupTypeFoundation && index > 0) { + // 粉底只设置icon背景色 + NSArray *color = subMakeupModel.colors[subMakeupModel.defaultColorIndex]; + return [UIColor colorWithRed:[color[0] floatValue] green:[color[1] floatValue] blue:[color[2] floatValue] alpha:[color[3] floatValue]]; + } else { + return [UIColor clearColor]; + } +} + +- (UIImage *)subMakeupImageAtIndex:(NSUInteger)index { + FUCustomizedMakeupModel *model = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = model.subMakeups[index]; + if (subMakeupModel.type == FUSubMakeupTypeFoundation && index > 0) { + // 粉底不需要icon + return nil; + } else { + return FUMakeupImageNamed(subMakeupModel.icon); + } +} + +#pragma mark - Private methods + +/// 更新子妆bundle +- (void)updateSubMakeupBundle:(FUSubMakeupModel *)model { + if (!model.bundleName) { + return; + } + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + if (![FURenderKit shareRenderKit].makeup) { + NSString *path = [[NSBundle mainBundle] pathForResource:@"face_makeup" ofType:@"bundle"]; + FUMakeup *makeup = [[FUMakeup alloc] initWithPath:path name:@"makeup"]; + // 高端机打开口红遮挡 + makeup.makeupSegmentation = [FURenderKit devicePerformanceLevel] == FUDevicePerformanceLevelHigh; + [FURenderKit shareRenderKit].makeup = makeup; + } + NSString *subPath = [bundle pathForResource:model.bundleName ofType:@"bundle"]; + FUItem *item = [[FUItem alloc] initWithPath:subPath name:model.bundleName]; + switch (model.type) { + case FUSubMakeupTypeFoundation:{ + [FURenderKit shareRenderKit].makeup.subFoundation = item; + } + break; + case FUSubMakeupTypeLip:{ + [FURenderKit shareRenderKit].makeup.subLip = item; + } + break; + case FUSubMakeupTypeBlusher:{ + [FURenderKit shareRenderKit].makeup.subBlusher = item; + } + break; + case FUSubMakeupTypeEyebrow:{ + [FURenderKit shareRenderKit].makeup.subEyebrow = item; + } + break; + case FUSubMakeupTypeEyeShadow:{ + [FURenderKit shareRenderKit].makeup.subEyeshadow = item; + } + break; + case FUSubMakeupTypeEyeliner:{ + [FURenderKit shareRenderKit].makeup.subEyeliner = item; + } + break; + case FUSubMakeupTypeEyelash:{ + [FURenderKit shareRenderKit].makeup.subEyelash = item; + } + break; + case FUSubMakeupTypeHighlight:{ + [FURenderKit shareRenderKit].makeup.subHighlight = item; + } + break; + case FUSubMakeupTypeShadow:{ + [FURenderKit shareRenderKit].makeup.subShadow = item; + } + break; + case FUSubMakeupTypePupil:{ + [FURenderKit shareRenderKit].makeup.subPupil = item; + } + break; + } +} + +/// 更新子妆颜色 +- (void)updateSubMakeupColor:(FUSubMakeupModel *)model { + if (model.colors.count <= model.defaultColorIndex) { + return; + } + NSArray *colorValues = model.colors[model.defaultColorIndex]; + FUColor color = FUColorMake([colorValues[0] doubleValue], [colorValues[1] doubleValue], [colorValues[2] doubleValue], [colorValues[3] doubleValue]); + switch (model.type) { + case FUSubMakeupTypeFoundation:{ + [FURenderKit shareRenderKit].makeup.foundationColor = color; + } + break; + case FUSubMakeupTypeLip:{ + [FURenderKit shareRenderKit].makeup.lipColor = color; + } + break; + case FUSubMakeupTypeBlusher:{ + [FURenderKit shareRenderKit].makeup.blusherColor = color; + } + break; + case FUSubMakeupTypeEyebrow:{ + [FURenderKit shareRenderKit].makeup.eyebrowColor = color; + } + break; + case FUSubMakeupTypeEyeShadow:{ + NSArray *values0 = [model.colors[model.defaultColorIndex] subarrayWithRange:NSMakeRange(0, 4)]; + NSArray *values2 = [model.colors[model.defaultColorIndex] subarrayWithRange:NSMakeRange(4, 4)]; + NSArray *values3 = [model.colors[model.defaultColorIndex] subarrayWithRange:NSMakeRange(8, 4)]; + [[FURenderKit shareRenderKit].makeup setEyeColor:FUColorMake([values0[0] doubleValue], [values0[1] doubleValue], [values0[2] doubleValue], [values0[3] doubleValue]) + color1:FUColorMake(0, 0, 0, 0) + color2:FUColorMake([values2[0] doubleValue], [values2[1] doubleValue], [values2[2] doubleValue], [values2[3] doubleValue]) + color3:FUColorMake([values3[0] doubleValue], [values3[1] doubleValue], [values3[2] doubleValue], [values3[3] doubleValue])]; + } + break; + case FUSubMakeupTypeEyeliner:{ + [FURenderKit shareRenderKit].makeup.eyelinerColor = color; + } + break; + case FUSubMakeupTypeEyelash:{ + [FURenderKit shareRenderKit].makeup.eyelashColor = color; + } + break; + case FUSubMakeupTypeHighlight:{ + [FURenderKit shareRenderKit].makeup.highlightColor = color; + } + break; + case FUSubMakeupTypeShadow:{ + [FURenderKit shareRenderKit].makeup.shadowColor = color; + } + break; + case FUSubMakeupTypePupil:{ + [FURenderKit shareRenderKit].makeup.pupilColor = color; + } + break; + } +} + +- (void)updateSubMakeupIntensity:(FUSubMakeupModel *)model { + switch (model.type) { + case FUSubMakeupTypeFoundation:{ + [FURenderKit shareRenderKit].makeup.intensityFoundation = model.value; + } + break; + case FUSubMakeupTypeLip:{ + FULipstickModel *lipModel = (FULipstickModel *)model; + [FURenderKit shareRenderKit].makeup.lipType = lipModel.lipstickType; + [FURenderKit shareRenderKit].makeup.isTwoColor = lipModel.isTwoColorLipstick; + [FURenderKit shareRenderKit].makeup.intensityLip = lipModel.value; + if (lipModel.lipstickType == FUMakeupLipTypeMoisturizing) { + // 润泽Ⅱ口红时需要开启口红高光,高光暂时为固定值0.8 + [FURenderKit shareRenderKit].makeup.isLipHighlightOn = YES; + [FURenderKit shareRenderKit].makeup.intensityLipHighlight = 0.8; + } else { + [FURenderKit shareRenderKit].makeup.isLipHighlightOn = NO; + [FURenderKit shareRenderKit].makeup.intensityLipHighlight = 0; + } + } + break; + case FUSubMakeupTypeBlusher:{ + [FURenderKit shareRenderKit].makeup.intensityBlusher = model.value; + } + break; + case FUSubMakeupTypeEyebrow:{ + [FURenderKit shareRenderKit].makeup.intensityEyebrow = model.value; + } + break; + case FUSubMakeupTypeEyeShadow:{ + [FURenderKit shareRenderKit].makeup.intensityEyeshadow = model.value; + } + break; + case FUSubMakeupTypeEyeliner:{ + [FURenderKit shareRenderKit].makeup.intensityEyeliner = model.value; + } + break; + case FUSubMakeupTypeEyelash:{ + [FURenderKit shareRenderKit].makeup.intensityEyelash = model.value; + } + break; + case FUSubMakeupTypeHighlight:{ + [FURenderKit shareRenderKit].makeup.intensityHighlight = model.value; + } + break; + case FUSubMakeupTypeShadow:{ + [FURenderKit shareRenderKit].makeup.intensityShadow = model.value; + } + break; + case FUSubMakeupTypePupil:{ + [FURenderKit shareRenderKit].makeup.intensityPupil = model.value; + } + break; + } +} + +#pragma mark - Setters + +- (void)setSelectedColorIndex:(NSUInteger)selectedColorIndex { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + if (subMakeupModel.defaultColorIndex == selectedColorIndex || selectedColorIndex < 0 || selectedColorIndex >= subMakeupModel.colors.count) { + return; + } + subMakeupModel.defaultColorIndex = selectedColorIndex; + [self updateSubMakeupColor:subMakeupModel]; +} + +- (void)setSelectedSubMakeupIndex:(NSUInteger)selectedSubMakeupIndex { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + if (currentModel.selectedSubMakeupIndex == selectedSubMakeupIndex) { + return; + } + currentModel.selectedSubMakeupIndex = selectedSubMakeupIndex; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + [self updateSubMakeupBundle:subMakeupModel]; + [self updateSubMakeupColor:subMakeupModel]; + [self updateSubMakeupIntensity:subMakeupModel]; +} + +- (void)setSelectedSubMakeupValue:(double)selectedSubMakeupValue { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + subMakeupModel.value = selectedSubMakeupValue; + [self updateSubMakeupIntensity:subMakeupModel]; +} + +#pragma mark - Getters + +- (NSArray *)customizedMakeups { + if (!_customizedMakeups) { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:@"customized_makeups" ofType:@"json"]; + NSArray *data = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers error:nil]; + NSMutableArray *makeups = [[NSMutableArray alloc] init]; + [data enumerateObjectsUsingBlock:^(NSDictionary * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + FUCustomizedMakeupModel *customizedMakeupModel = [[FUCustomizedMakeupModel alloc] init]; + customizedMakeupModel.name = obj[@"name"]; + NSArray *tempArray = (NSArray *)obj[@"sgArr"]; + NSMutableArray *subMakeups = [[NSMutableArray alloc] init]; + for (NSUInteger i = 0; i < tempArray.count; i++) { + NSDictionary *dictionary = tempArray[i]; + FUSubMakeupModel *model; + if (idx == FUSubMakeupTypeLip) { + model = [[FULipstickModel alloc] init]; + } else if (idx == FUSubMakeupTypeEyebrow) { + model = [[FUEyebrowModel alloc] init]; + } else { + model = [[FUSubMakeupModel alloc] init]; + } + [model setValuesForKeysWithDictionary:dictionary]; + model.index = i; + [subMakeups addObject:model]; + } + customizedMakeupModel.subMakeups = [subMakeups copy]; + [makeups addObject:customizedMakeupModel]; + }]; + _customizedMakeups = [makeups copy]; + } + return _customizedMakeups; +} + +- (NSArray *)selectedSubMakeups { + return self.customizedMakeups[self.selectedCategoryIndex].subMakeups; +} + +- (BOOL)needsColorPicker { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + if (subMakeupModel.type != FUSubMakeupTypeFoundation && subMakeupModel.colors.count > 0) { + return YES; + } + return NO; +} + +- (NSArray *> *)currentColors { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + return subMakeupModel.colors; +} + +- (NSString *)selectedSubMakeupTitle { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + return FUMakeupStringWithKey(subMakeupModel.title); +} + +- (NSUInteger)selectedColorIndex { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + return subMakeupModel.defaultColorIndex; +} + +- (NSUInteger)selectedSubMakeupIndex { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + return currentModel.selectedSubMakeupIndex; +} + +- (double)selectedSubMakeupValue { + FUCustomizedMakeupModel *currentModel = self.customizedMakeups[self.selectedCategoryIndex]; + FUSubMakeupModel *subMakeupModel = currentModel.subMakeups[currentModel.selectedSubMakeupIndex]; + return subMakeupModel.value; +} + +@end diff --git a/FUVideoComponent/FUVideoComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist b/FUVideoComponent/FUVideoComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist index 558d3ea5..32be4db0 100644 --- a/FUVideoComponent/FUVideoComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/FUVideoComponent/FUVideoComponent.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ FUVideoComponent.xcscheme_^#shared#^_ orderHint - 8 + 4 diff --git a/FUVideoComponent/FUVideoComponent/FUVideoComponentDefines.h b/FUVideoComponent/FUVideoComponent/FUVideoComponentDefines.h index 7cadd148..bfd8ac1e 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoComponentDefines.h +++ b/FUVideoComponent/FUVideoComponent/FUVideoComponentDefines.h @@ -9,10 +9,10 @@ #define FUVideoComponentDefines_h /// 弱引用对象 -#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object; +#define FUWeakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object; /// 强引用对象 -#define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object; +#define FUStrongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object; /// 视频方向 typedef NS_ENUM(NSInteger, FUVideoOrientation) { diff --git a/FUVideoComponent/FUVideoComponent/FUVideoProcessor.h b/FUVideoComponent/FUVideoComponent/FUVideoProcessor.h index 5a279814..1d3d7fa3 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoProcessor.h +++ b/FUVideoComponent/FUVideoComponent/FUVideoProcessor.h @@ -15,7 +15,7 @@ NS_ASSUME_NONNULL_BEGIN @interface FUVideoProcessor : NSObject /// 视频帧编码前处理,不设置则直接编码 -@property (nonatomic, copy) CVPixelBufferRef (^processingVideoBufferHandler)(CVPixelBufferRef videoPixelBuffer); +@property (nonatomic, copy) CVPixelBufferRef (^processingVideoBufferHandler)(CVPixelBufferRef videoPixelBuffer, CGFloat time); /// 音频帧编码前处理,不设置则直接编码 @property (nonatomic, copy) CMSampleBufferRef (^processingAudioBufferHandler)(CMSampleBufferRef audioSampleBuffer); diff --git a/FUVideoComponent/FUVideoComponent/FUVideoProcessor.m b/FUVideoComponent/FUVideoComponent/FUVideoProcessor.m index a5168d84..418ac97d 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoProcessor.m +++ b/FUVideoComponent/FUVideoComponent/FUVideoProcessor.m @@ -56,26 +56,23 @@ - (instancetype)initWithReadingURL:(NSURL *)readingURL readerSettings:(FUVideoRe #pragma mark - Instance methods - (void)startProcessing { - @weakify(self) - [self.reader startWithCompletion:^(BOOL success) { - if (success) { - self.writer.videoInputReadyHandler = ^BOOL{ - @strongify(self) - return [self.reader readNextVideoBuffer]; - }; - self.writer.audioInputReadyHandler = ^BOOL{ - @strongify(self) - return [self.reader readNextAudioBuffer]; - }; - [self.writer start]; - } - }]; + [self.reader start]; + @FUWeakify(self) + self.writer.videoInputReadyHandler = ^BOOL{ + @FUStrongify(self) + return [self.reader readNextVideoBuffer]; + }; + self.writer.audioInputReadyHandler = ^BOOL{ + @FUStrongify(self) + return [self.reader readNextAudioBuffer]; + }; + [self.writer start]; } - (void)cancelProcessing { - [self.writer cancel]; + [self.writer stop]; self.writer = nil; - [self.reader cancel]; + [self.reader stop]; self.reader = nil; } @@ -85,7 +82,7 @@ - (void)videoReaderDidOutputVideoSampleBuffer:(CMSampleBufferRef)videoSampleBuff if (self.processingVideoBufferHandler) { CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(videoSampleBuffer); CMTime timeStamp = CMSampleBufferGetPresentationTimeStamp(videoSampleBuffer); - pixelBuffer = self.processingVideoBufferHandler(pixelBuffer); + pixelBuffer = self.processingVideoBufferHandler(pixelBuffer, CMTimeGetSeconds(timeStamp)); if (self.writer.videoInput.isReadyForMoreMediaData) { [self.writer appendPixelBuffer:pixelBuffer time:timeStamp]; } @@ -122,10 +119,11 @@ - (void)videoReaderDidFinishAudioReading { } - (void)videoReaderDidFinishReading { - [self.writer finishWritingWithCompletion:nil]; - if (self.processingFinishedHandler) { - self.processingFinishedHandler(); - } + [self.writer finishWritingWithCompletion:^{ + if (self.processingFinishedHandler) { + self.processingFinishedHandler(); + } + }]; } @end diff --git a/FUVideoComponent/FUVideoComponent/FUVideoReader.h b/FUVideoComponent/FUVideoComponent/FUVideoReader.h index 61b8ae96..9bbff4bc 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoReader.h +++ b/FUVideoComponent/FUVideoComponent/FUVideoReader.h @@ -43,6 +43,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign, readonly) FUVideoOrientation videoOrientation; /// 当前视频是否包含音频轨道 @property (nonatomic, assign, readonly) BOOL containAudioTrack; +/// 视频时长,单位秒 +@property (nonatomic, assign, readonly) CGFloat duration; @property (nonatomic, weak) id delegate; @@ -60,23 +62,17 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithAsset:(AVAsset *)asset settings:(nullable FUVideoReaderSettings *)settings; -/// 解码器启动 -/// @note 内部为异步启动 -/// @param completionHandler 异步回调 -- (void)startWithCompletion:(nullable void (^)(BOOL success))completionHandler; +/// 开始解码 +/// @note 内部自动解码为异步 +- (void)start; -- (void)cancel; +/// 停止解码 +- (void)stop; - (BOOL)readNextVideoBuffer; - (BOOL)readNextAudioBuffer; -/// 获取第一个视频帧,需要在解码开始之后调用 -- (CMSampleBufferRef)firstVideoSampleBuffer; - -/// 获取最后一个视频帧,需要在解码完成之后调用 -- (CMSampleBufferRef)lastVideoSampleBuffer; - @end NS_ASSUME_NONNULL_END diff --git a/FUVideoComponent/FUVideoComponent/FUVideoReader.m b/FUVideoComponent/FUVideoComponent/FUVideoReader.m index 798bc391..ca5dc369 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoReader.m +++ b/FUVideoComponent/FUVideoComponent/FUVideoReader.m @@ -8,35 +8,27 @@ #import "FUVideoReader.h" /// 默认解码每帧间隔时间 -const float kFUReaderFrameDuration = (1.0/30); +const float kFUReaderFrameDuration = (1.0/120); @interface FUVideoReader () -@property (nonatomic, assign) BOOL isReading; - @property (nonatomic, strong) AVAssetReader *reader; @property (nonatomic, strong) AVAssetReaderOutput *videoOutput; @property (nonatomic, strong) AVAssetReaderOutput *audioOutput; @property (nonatomic, strong) AVAssetTrack *videoTrack; @property (nonatomic, strong) AVAsset *asset; -@property (nonatomic, strong) dispatch_queue_t readingQueue; -@property (nonatomic, copy) void (^completionHandler)(BOOL success); + +@property (nonatomic, strong) dispatch_queue_t processQueue; @end @implementation FUVideoReader { BOOL videoReadingFinished, audioReadingFinished; - // 是否保存了视频第一帧 - BOOL savedFirstSampleBuffer; // 上一帧保存的时间 CFAbsoluteTime lastFrameAbsoluteTime; // 上一帧保存的时间戳 CMTime lastFrameTimeStamp; - - CMSampleBufferRef firstVideoSampleBuffer, lastVideoSampleBuffer; - - void *readingQueueKey; } #pragma mark - Initializer @@ -71,84 +63,43 @@ - (instancetype)initWithAsset:(AVAsset *)asset settings:(FUVideoReaderSettings * #pragma mark - Instance methods -- (void)startWithCompletion:(void (^)(BOOL))completionHandler { - self.completionHandler = completionHandler; - videoReadingFinished = NO; - audioReadingFinished = NO; - savedFirstSampleBuffer = NO; - - [self.asset loadValuesAsynchronouslyForKeys:@[@"tracks"] completionHandler:^{ - NSError *error = nil; - AVKeyValueStatus tracksStatus = [self.asset statusOfValueForKey:@"tracks" error:&error]; - if (tracksStatus != AVKeyValueStatusLoaded) { - return; - } - [self asynchronousBlockOnReadingQueue:^{ - [self process]; - }]; - }]; -} - -- (void)process { +- (void)start { + self->videoReadingFinished = NO; + self->audioReadingFinished = NO; self.reader = [self createReader]; - for (AVAssetReaderOutput *output in self.reader.outputs) { - if ([output.mediaType isEqualToString:AVMediaTypeVideo]) { - self.videoOutput = output; - } else if ([output.mediaType isEqualToString:AVMediaTypeAudio]) { - self.audioOutput = output; - } - } - self.isReading = [self.reader startReading]; - if (!self.isReading) { - NSLog(@"FUVideoComponent: Start reading failed!"); - !self.completionHandler ?: self.completionHandler(NO); + if (![self.reader startReading]) { + NSLog(@"FUVideoReader: Start reading failed!"); } else { - !self.completionHandler ?: self.completionHandler(YES); if (self.readerSettings.readingAutomatically) { - // 自动开始解码 - while (self.reader.status == AVAssetReaderStatusReading && self.isReading) { - if (!self->videoReadingFinished) { - [self readNextVideoBuffer]; - } - if (self.readerSettings.needsAudioTrack && !self->audioReadingFinished) { - [self readNextAudioBuffer]; + dispatch_async(self.processQueue, ^{ + // 自动开始异步解码 + while (self.reader.status == AVAssetReaderStatusReading) { + if (!self->videoReadingFinished) { + [self readNextVideoBuffer]; + } + if (self.readerSettings.needsAudioTrack && !self->audioReadingFinished) { + [self readNextAudioBuffer]; + } } - } - [self finish]; + [self finish]; + }); } } } -- (void)cancel { +- (void)stop { videoReadingFinished = YES; audioReadingFinished = YES; - self.isReading = NO; if (self.reader) { [self.reader cancelReading]; - _reader = nil; + self->_reader = nil; } } - (BOOL)readNextVideoBuffer { - if (self.reader.status == AVAssetReaderStatusReading && !videoReadingFinished && self.isReading) { + if (self.reader.status == AVAssetReaderStatusReading && !videoReadingFinished) { CMSampleBufferRef sampleBuffer = [self.videoOutput copyNextSampleBuffer]; if (sampleBuffer != NULL) { - if (!savedFirstSampleBuffer) { - if (firstVideoSampleBuffer != NULL) { - CMSampleBufferInvalidate(firstVideoSampleBuffer); - CFRelease(firstVideoSampleBuffer); - } - // 保存第一帧 - CMSampleBufferCreateCopy(kCFAllocatorDefault, sampleBuffer, &firstVideoSampleBuffer); - savedFirstSampleBuffer = YES; - } else { - if (lastVideoSampleBuffer != NULL) { - CMSampleBufferInvalidate(lastVideoSampleBuffer); - CFRelease(lastVideoSampleBuffer); - } - // 保存帧 - CMSampleBufferCreateCopy(kCFAllocatorDefault, sampleBuffer, &lastVideoSampleBuffer); - } // 当前帧与上一帧时间差(实际循环一次时间) CGFloat difference = CFAbsoluteTimeGetCurrent() - lastFrameAbsoluteTime; if (self.readerSettings.readAtVideoRate) { @@ -173,8 +124,11 @@ - (BOOL)readNextVideoBuffer { } lastFrameAbsoluteTime = CFAbsoluteTimeGetCurrent(); } - if (self.isReading && self.delegate && [self.delegate respondsToSelector:@selector(videoReaderDidOutputVideoSampleBuffer:)]) { + if (self.delegate && [self.delegate respondsToSelector:@selector(videoReaderDidOutputVideoSampleBuffer:)]) { [self.delegate videoReaderDidOutputVideoSampleBuffer:sampleBuffer]; + } else { + CMSampleBufferInvalidate(sampleBuffer); + CFRelease(sampleBuffer); } return YES; } else { @@ -192,11 +146,14 @@ - (BOOL)readNextVideoBuffer { } - (BOOL)readNextAudioBuffer { - if (self.reader.status == AVAssetReaderStatusReading && !audioReadingFinished && self.isReading) { + if (self.reader.status == AVAssetReaderStatusReading && !audioReadingFinished) { CMSampleBufferRef sampleBuffer = [self.audioOutput copyNextSampleBuffer]; if (sampleBuffer != NULL) { if (self.isReading && self.delegate && [self.delegate respondsToSelector:@selector(videoReaderDidOutputAudioSampleBuffer:)]) { [self.delegate videoReaderDidOutputAudioSampleBuffer:sampleBuffer]; + } else { + CMSampleBufferInvalidate(sampleBuffer); + CFRelease(sampleBuffer); } return YES; } else { @@ -213,39 +170,8 @@ - (BOOL)readNextAudioBuffer { return NO; } -- (CMSampleBufferRef)firstVideoSampleBuffer { - return firstVideoSampleBuffer; -} - -- (CMSampleBufferRef)lastVideoSampleBuffer { - if (lastVideoSampleBuffer == NULL || !videoReadingFinished) { - return NULL; - } - return lastVideoSampleBuffer; -} - #pragma mark - Private methods -- (void)synchronousBlockOnReadingQueue:(void (^)(void))block { - if (dispatch_get_specific(readingQueueKey)) { - block(); - } else { - dispatch_sync(self.readingQueue, ^{ - block(); - }); - } -} - -- (void)asynchronousBlockOnReadingQueue:(void (^)(void))block { - if (dispatch_get_specific(readingQueueKey)) { - block(); - } else { - dispatch_async(self.readingQueue, ^{ - block(); - }); - } -} - - (void)finish { BOOL finished = NO; if (self.reader.status == AVAssetReaderStatusCompleted) { @@ -254,14 +180,14 @@ - (void)finish { } } if (finished) { - [self cancel]; + [self stop]; if (self.delegate && [self.delegate respondsToSelector:@selector(videoReaderDidFinishReading)]) { [self.delegate videoReaderDidFinishReading]; } if (self.readerSettings.needsRepeat) { // 从头开始读取 dispatch_async(dispatch_get_main_queue(), ^{ - [self startWithCompletion:self.completionHandler]; + [self start]; }); } } @@ -275,23 +201,34 @@ - (AVAssetReader *)createReader { NSAssert(error == nil, @"Create reader failed!"); NSDictionary *settings = @{(id)kCVPixelBufferPixelFormatTypeKey : @(self.readerSettings.videoOutputFormat)}; - AVAssetReaderTrackOutput *videoTrackOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:self.videoTrack outputSettings:settings]; - videoTrackOutput.alwaysCopiesSampleData = NO; - [reader addOutput:videoTrackOutput]; + self.videoOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:self.videoTrack outputSettings:settings]; + self.videoOutput.alwaysCopiesSampleData = NO; + [reader addOutput:self.videoOutput]; + + if (self.readerSettings.needsAudioTrack) { + NSArray *audioTracks = [self.asset tracksWithMediaType:AVMediaTypeAudio]; + if (audioTracks.count == 0) { + NSLog(@"FUVideoReader: the asset does not contain an audio track"); + self.readerSettings.needsAudioTrack = NO; + } + } if (self.readerSettings.needsAudioTrack) { // Audio track NSArray *audioTracks = [self.asset tracksWithMediaType:AVMediaTypeAudio]; - NSAssert(audioTracks.count > 0, @"Does not contain an audio track, please set 'needsAudioTrack' to NO"); AVAssetTrack *audioTrack = audioTracks[0]; NSDictionary *audioOutputSettings = @{(id)AVFormatIDKey : @(self.readerSettings.audioOutputFormat)}; - AVAssetReaderTrackOutput *audioTrackOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:audioTrack outputSettings:audioOutputSettings]; - audioTrackOutput.alwaysCopiesSampleData = NO; - [reader addOutput:audioTrackOutput]; + self.audioOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:audioTrack outputSettings:audioOutputSettings]; + self.audioOutput.alwaysCopiesSampleData = NO; + [reader addOutput:self.audioOutput]; } return reader; } +- (BOOL)isReading { + return self.reader.status == AVAssetReaderStatusReading; +} + - (CGSize)videoSize { return self.videoTrack.naturalSize; } @@ -300,7 +237,7 @@ - (FUVideoOrientation)videoOrientation { FUVideoOrientation orientation = FUVideoOrientationPortrait; CGAffineTransform transform = self.videoTrack.preferredTransform; if(transform.a == 0 && transform.b == 1.0 && transform.c == -1.0 && transform.d == 0) { - orientation = FUVideoOrientationLandscapeRight ; + orientation = FUVideoOrientationLandscapeRight; }else if(transform.a == 0 && transform.b == -1.0 && transform.c == 1.0 && transform.d == 0){ orientation = FUVideoOrientationLandscapeLeft; }else if(transform.a == 1.0 && transform.b == 0 && transform.c == 0 && transform.d == 1.0){ @@ -324,28 +261,15 @@ - (AVAssetTrack *)videoTrack { return _videoTrack; } -- (dispatch_queue_t)readingQueue { - if (_readingQueue == NULL) { - readingQueueKey = &readingQueueKey; - _readingQueue = dispatch_queue_create("com.faceunity.FUVideoComponent.readingQueue", DISPATCH_QUEUE_SERIAL); -#if OS_OBJECT_USE_OBJC - dispatch_queue_set_specific(_readingQueue, readingQueueKey, (__bridge void *)self, NULL); -#endif - } - return _readingQueue; +- (CGFloat)duration { + return CMTimeGetSeconds(self.asset.duration); } -#pragma mark - Dealloc - -- (void)dealloc { - if (firstVideoSampleBuffer != NULL) { - CMSampleBufferInvalidate(firstVideoSampleBuffer); - CFRelease(firstVideoSampleBuffer); - } - if (lastVideoSampleBuffer != NULL) { - CMSampleBufferInvalidate(lastVideoSampleBuffer); - CFRelease(lastVideoSampleBuffer); +- (dispatch_queue_t)processQueue { + if (!_processQueue) { + _processQueue = dispatch_queue_create("com.faceunity.FUVideoReader.processQueue", DISPATCH_QUEUE_SERIAL); } + return _processQueue; } @end diff --git a/FUVideoComponent/FUVideoComponent/FUVideoWriter.h b/FUVideoComponent/FUVideoComponent/FUVideoWriter.h index 0202a6a9..398a8905 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoWriter.h +++ b/FUVideoComponent/FUVideoComponent/FUVideoWriter.h @@ -40,7 +40,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)start; -- (void)cancel; +- (void)stop; /// 写入完成后必须调用该方法 - (void)finishWritingWithCompletion:(nullable void (^)(void))completion; diff --git a/FUVideoComponent/FUVideoComponent/FUVideoWriter.m b/FUVideoComponent/FUVideoComponent/FUVideoWriter.m index 348ba54f..d19085ca 100644 --- a/FUVideoComponent/FUVideoComponent/FUVideoWriter.m +++ b/FUVideoComponent/FUVideoComponent/FUVideoWriter.m @@ -9,8 +9,6 @@ @interface FUVideoWriter () -@property (nonatomic, assign) BOOL isWriting; - @property (nonatomic, strong) AVAssetWriter *writer; @property (nonatomic, strong) AVAssetWriterInput *videoInput; @property (nonatomic, strong) AVAssetWriterInput *audioInput; @@ -20,14 +18,15 @@ @interface FUVideoWriter () @property (nonatomic, assign) CGSize videoSize; @property (nonatomic, strong) FUVideoWriterSettings *writerSettings; +@property (nonatomic, strong) dispatch_queue_t processQueue; + @end @implementation FUVideoWriter { BOOL videoWritingFinished, audioWritingFinished; CMTime startWritingTime; - dispatch_queue_t operationQueue, videoQueue, audioQueue; - void *operationQueueKey; + dispatch_queue_t videoQueue, audioQueue; } #pragma mark - Initializer @@ -64,31 +63,31 @@ - (void)start { } self.writer = [self createWriter]; if (![self.writer startWriting]) { - NSLog(@"FUVideoComponent: Start writing failed!"); + NSLog(@"FUVideoWriter: Start writing failed!"); return; } [self.writer startSessionAtSourceTime:kCMTimeZero]; - [self requestForWritingData]; - self.isWriting = YES; + dispatch_async(self.processQueue, ^{ + [self requestForWritingData]; + }); } -- (void)cancel { +- (void)stop { + videoWritingFinished = YES; + audioWritingFinished = YES; + startWritingTime = kCMTimeInvalid; if (self.writer) { if (self.writer.status == AVAssetWriterStatusWriting) { [self.writer cancelWriting]; + _writer = nil; } - self->_writer = nil; } - startWritingTime = kCMTimeInvalid; - self.isWriting = NO; - self->videoWritingFinished = YES; - self->audioWritingFinished = YES; } /// 请求写入数据 - (void)requestForWritingData { if (self.videoInputReadyHandler) { - videoQueue = dispatch_queue_create("com.faceunity.FUVideoComponent.videoQueue", DISPATCH_QUEUE_SERIAL); + videoQueue = dispatch_queue_create("com.faceunity.FUVideoWriter.videoQueue", DISPATCH_QUEUE_SERIAL); [self.videoInput requestMediaDataWhenReadyOnQueue:videoQueue usingBlock:^{ while (self.videoInput.isReadyForMoreMediaData) { if (!self.videoInputReadyHandler() && !self->videoWritingFinished) { @@ -100,7 +99,7 @@ - (void)requestForWritingData { }]; } if (self.audioInputReadyHandler && self.writerSettings.needsAudioTrack) { - audioQueue = dispatch_queue_create("com.faceunity.FUVideoComponent.audioQueue", DISPATCH_QUEUE_SERIAL); + audioQueue = dispatch_queue_create("com.faceunity.FUVideoWriter.audioQueue", DISPATCH_QUEUE_SERIAL); [self.audioInput requestMediaDataWhenReadyOnQueue:audioQueue usingBlock:^{ while (self.audioInput.isReadyForMoreMediaData) { if (!self.audioInputReadyHandler() && !self->audioWritingFinished) { @@ -114,7 +113,6 @@ - (void)requestForWritingData { } - (void)finishWritingWithCompletion:(void (^)(void))completion { - self.isWriting = NO; if (self.writer.status == AVAssetWriterStatusCompleted || self.writer.status == AVAssetWriterStatusCancelled || self.writer.status == AVAssetWriterStatusUnknown) { NSLog(@"FUVideoWriter: Completion!"); if (completion) { @@ -123,18 +121,19 @@ - (void)finishWritingWithCompletion:(void (^)(void))completion { return; } if (self.writer.status == AVAssetWriterStatusWriting) { - if (!self->videoWritingFinished) { + if (!videoWritingFinished) { // 标记视频输入完成 [self.videoInput markAsFinished]; - self->videoWritingFinished = YES; + videoWritingFinished = YES; } - if (self.writerSettings.needsAudioTrack && !self->audioWritingFinished) { + if (self.writerSettings.needsAudioTrack && !audioWritingFinished) { // 标记音频输入完成 [self.audioInput markAsFinished]; - self->audioWritingFinished = YES; + audioWritingFinished = YES; } [self.writer finishWritingWithCompletionHandler:^{ NSLog(@"FUVideoWriter: Completion!"); + [self stop]; if (completion) { completion(); } @@ -144,52 +143,56 @@ - (void)finishWritingWithCompletion:(void (^)(void))completion { - (void)appendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer { if (!self.videoInput.isReadyForMoreMediaData || videoWritingFinished) { - NSLog(@"FUVideoComponent: video input is not ready"); + NSLog(@"FUVideoWriter: video input is not ready"); return; } if (self.writer.status == AVAssetWriterStatusWriting) { if (![self.videoInput appendSampleBuffer:sampleBuffer]) { - NSLog(@"FUVideoComponent: Append video sample buffer failed!"); + NSLog(@"FUVideoWriter: Append video sample buffer failed!"); } } else { - NSLog(@"FUVideoComponent: Could not write video sample buffer"); + NSLog(@"FUVideoWriter: Could not write video sample buffer"); } } - (void)appendPixelBuffer:(CVPixelBufferRef)pixelBuffer time:(CMTime)timeStamp { if (!self.videoInput.isReadyForMoreMediaData || videoWritingFinished) { - NSLog(@"FUVideoComponent: video input is not ready"); + NSLog(@"FUVideoWriter: video input is not ready"); return; } if (self.writer.status == AVAssetWriterStatusWriting) { if (![self.pixelBufferInput appendPixelBuffer:pixelBuffer withPresentationTime:timeStamp]) { - NSLog(@"FUVideoComponent: Append pixel buffer failed!"); + NSLog(@"FUVideoWriter: Append pixel buffer failed!"); } } else { - NSLog(@"FUVideoComponent: Could not write pixel buffer"); + NSLog(@"FUVideoWriter: Could not write pixel buffer"); } } - (void)appendAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer { if (!self.writerSettings.needsAudioTrack) { - NSLog(@"FUVideoComponent: needsWriteAudio is NO"); + NSLog(@"FUVideoWriter: needsWriteAudio is NO"); return; } if (!self.audioInput.isReadyForMoreMediaData || audioWritingFinished) { - NSLog(@"FUVideoComponent: audio input is not ready"); + NSLog(@"FUVideoWriter: audio input is not ready"); return; } if (self.writer.status == AVAssetWriterStatusWriting) { if (![self.audioInput appendSampleBuffer:sampleBuffer]) { - NSLog(@"FUVideoComponent: Append audio sample buffer failed!"); + NSLog(@"FUVideoWriter: Append audio sample buffer failed!"); } } else { - NSLog(@"FUVideoComponent: Could not write audio sample buffer"); + NSLog(@"FUVideoWriter: Could not write audio sample buffer"); } } #pragma mark - Getters +- (BOOL)isWriting { + return self.writer.status == AVAssetWriterStatusWriting; +} + - (AVAssetWriter *)createWriter { NSError *error = nil; AVAssetWriter *assetWriter = [[AVAssetWriter alloc] initWithURL:self.videoURL fileType:self.writerSettings.fileType error:&error]; @@ -252,9 +255,16 @@ - (AVAssetWriterInput *)createAudioInput { }; // 使用默认设置 AVAssetWriterInput *input = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:settings]; - // 视频文件编码不需要实时处理 + // 音频文件编码是否需要实时处理 input.expectsMediaDataInRealTime = self.writerSettings.isRealTimeData; return input; } +- (dispatch_queue_t)processQueue { + if (!_processQueue) { + _processQueue = dispatch_queue_create("com.faceunity.FUVideoWriter.processQueue", DISPATCH_QUEUE_SERIAL); + } + return _processQueue; +} + @end diff --git a/Podfile b/Podfile index 3b8e59e1..c9f8003c 100644 --- a/Podfile +++ b/Podfile @@ -1,5 +1,3 @@ -source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' - platform :ios, '9.0' use_frameworks! @@ -28,10 +26,10 @@ target 'FULiveDemo' do pod 'SSZipArchive' # FURenderKit开发库 - #pod 'FURenderKit-dev', :path => '../FURenderKit' + #pod 'FURenderKit-dev', :path => '/Users/sunmu/Desktop/集成/GitLab/FURenderKit' # FURenderKit库资源 - #pod 'FURenderKit-assets-dev', :path => '../FURenderKit' + #pod 'FURenderKit-assets-dev', :path => '/Users/sunmu/Desktop/集成/GitLab/FURenderKit' #pod 'FURenderKit-dev', :git => 'git@192.168.0.118:liuyang/FURenderKit_Release.git', :branch => 'nama-dev-xlp' diff --git a/Podfile.lock b/Podfile.lock index c5ec9521..be99bfc3 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -17,10 +17,10 @@ PODS: - FLAnimatedImage (1.0.16) - lottie-ios (2.5.3) - Masonry (1.1.0) - - MJExtension (3.3.0) - - SDWebImage (5.12.1): - - SDWebImage/Core (= 5.12.1) - - SDWebImage/Core (5.12.1) + - MJExtension (3.4.1) + - SDWebImage (5.13.1): + - SDWebImage/Core (= 5.13.1) + - SDWebImage/Core (5.13.1) - SSZipArchive (2.4.3) - SVProgressHUD (2.2.5) @@ -35,7 +35,7 @@ DEPENDENCIES: - SVProgressHUD SPEC REPOS: - https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: + trunk: - AFNetworking - FLAnimatedImage - lottie-ios @@ -50,11 +50,11 @@ SPEC CHECKSUMS: FLAnimatedImage: 8f3e854ebf9680b71f0b6e700939687fc4d82b4b lottie-ios: a50d5c0160425cd4b01b852bb9578963e6d92d31 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 - MJExtension: 01704cca2b60a214c10761b6491eab74069d68a9 - SDWebImage: 4dc3e42d9ec0c1028b960a33ac6b637bb432207b + MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961 + SDWebImage: fb26a455eeda4c7a55e4dcb6172dbb258af7a4ca SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 -PODFILE CHECKSUM: 3b71152872b1f4f0c37ce27a3feb4bde27dcfe13 +PODFILE CHECKSUM: 810786eceef5557119a3be1afae173f3395a20cd COCOAPODS: 1.11.3 diff --git a/Pods/MJExtension/MJExtension/NSObject+MJCoding.h b/Pods/MJExtension/MJExtension/NSObject+MJCoding.h index d4327ddc..aeeb4ebe 100755 --- a/Pods/MJExtension/MJExtension/NSObject+MJCoding.h +++ b/Pods/MJExtension/MJExtension/NSObject+MJCoding.h @@ -50,6 +50,17 @@ return self; \ - (void)encodeWithCoder:(NSCoder *)encoder \ { \ [self mj_encode:encoder]; \ -} +}\ + +#define MJExtensionCodingImplementation MJCodingImplementation + +#define MJSecureCodingImplementation(CLASS, FLAG) \ +@interface CLASS (MJSecureCoding) \ +@end \ +@implementation CLASS (MJSecureCoding) \ +MJCodingImplementation \ ++ (BOOL)supportsSecureCoding { \ +return FLAG; \ +} \ +@end \ -#define MJExtensionCodingImplementation MJCodingImplementation \ No newline at end of file diff --git a/Pods/MJExtension/MJExtension/NSObject+MJCoding.m b/Pods/MJExtension/MJExtension/NSObject+MJCoding.m index 27ae8ee4..614514a7 100755 --- a/Pods/MJExtension/MJExtension/NSObject+MJCoding.m +++ b/Pods/MJExtension/MJExtension/NSObject+MJCoding.m @@ -43,7 +43,12 @@ - (void)mj_decode:(NSCoder *)decoder if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; if ([ignoredCodingPropertyNames containsObject:property.name]) return; - id value = [decoder decodeObjectForKey:property.name]; + // fixed `-[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSNumber'(This will be disallowed in the future.)` warning. + Class genericClass = [property objectClassInArrayForClass:property.srcClass]; + // If genericClass exists, property.type.typeClass would be a collection type(Array, Set, Dictionary). This scenario([obj, nil, obj, nil]) would not happened. + NSSet *classes = [NSSet setWithObjects:NSNumber.class, + property.type.typeClass, genericClass, nil]; + id value = [decoder decodeObjectOfClasses:classes forKey:property.name]; if (value == nil) { // 兼容以前的MJExtension版本 value = [decoder decodeObjectForKey:[@"_" stringByAppendingString:property.name]]; } diff --git a/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m b/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m index 002f0adb..c48e003d 100755 --- a/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m +++ b/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m @@ -255,7 +255,7 @@ + (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectCon MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], nil, [self class], @"keyValues参数不是一个字典"); if ([self isSubclassOfClass:[NSManagedObject class]] && context) { - NSString *entityName = [NSStringFromClass(self) componentsSeparatedByString:@"."].lastObject; + NSString *entityName = [(NSManagedObject *)self entity].name; return [[NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:context] mj_setKeyValues:keyValues context:context]; } return [[[self alloc] init] mj_setKeyValues:keyValues]; diff --git a/Pods/MJExtension/README.md b/Pods/MJExtension/README.md index 2f7ae340..b638414b 100644 --- a/Pods/MJExtension/README.md +++ b/Pods/MJExtension/README.md @@ -1,61 +1,43 @@ MJExtension === +[![SPM supported](https://img.shields.io/badge/SPM-supported-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -![podversion](https://img.shields.io/cocoapods/v/MJExtension.svg) +[![podversion](https://img.shields.io/cocoapods/v/MJExtension.svg)](https://cocoapods.org/pods/MJExtension) +![Platform](https://img.shields.io/cocoapods/p/MJExtension.svg?style=flat) + - A fast, convenient and nonintrusive conversion framework between JSON and model. - 转换速度快、使用简单方便的字典转模型框架 [📜✍🏻**Release Notes**: more details](https://github.com/CoderMJLee/MJExtension/releases) -### ‼️ 纯Swift版的JSON与Model转换框架已经开源上架 ‼️ - -- [KakaJSON](https://github.com/kakaopensource/KakaJSON) -- [中文教程](https://www.cnblogs.com/mjios/p/11352776.html) -- 如果你的项目是用Swift写的Model,墙裂推荐使用[KakaJSON](https://github.com/kakaopensource/KakaJSON) - - 已经对各种常用的数据场景进行了大量的单元测试 - - 简单易用、功能丰富、转换快速 - - - -### Use the Framework in Swift [关于在Swift中使用MJExtension] ‼️ - -> Example: -> -> - [Model - MJTester.swift](MJExtensionTests/SwiftModel/MJTester.swift) -> -> - [Usage - SwiftModelTests.swift](MJExtensionTests/SwiftModelTests.swift) - -#### ‼️ `@objc` attributes should be added to class and property for declaration of Objc accessibility [在 Swift4 之后, 请在属性前加 `@objc` 修饰. 以保证 Swift 的属性能够暴露给 Objc 使用. ]‼️ -#### ‼️ Use `NSNumber` instead of `Bool`, which is not bridged to `BOOL`. [请勿使用 `Bool` 类型, 因为在 Swift 中并没有桥接该类型, 不能显式的对应 `BOOL`, 请使用 `NSNumber` 替代] ‼️ - - - ## Contents * [Getting Started 【开始使用】](#Getting_Started) * [Features 【能做什么】](#Features) * [Installation 【安装】](#Installation) * [Examples 【示例】](#Examples) - * [JSON -> Model](#JSON_Model) - * [JSONString -> Model](#JSONString_Model) - * [Model contains model](#Model_contains_model) - * [Model contains model-array](#Model_contains_model_array) - * [Model name - JSON key mapping](#Model_name_JSON_key_mapping) - * [JSON array -> model array](#JSON_array_model_array) - * [Model -> JSON](#Model_JSON) - * [Model array -> JSON array](#Model_array_JSON_array) - * [Core Data](#Core_Data) - * [Coding](#Coding) - * [Camel -> underline](#Camel_underline) - * [NSString -> NSDate, nil -> @""](#NSString_NSDate) - * [NSDate -> NSString](#NSDate_NSString) - * [More use cases](#More_use_cases) + * [Usage in Swift](#usage_in_swift) + * [JSON -> Model](#JSON_Model) + * [JSONString -> Model](#JSONString_Model) + * [Model contains model](#Model_contains_model) + * [Model contains model-array](#Model_contains_model_array) + * [Model name - JSON key mapping](#Model_name_JSON_key_mapping) + * [JSON array -> model array](#JSON_array_model_array) + * [Model -> JSON](#Model_JSON) + * [Model array -> JSON array](#Model_array_JSON_array) + * [Core Data](#Core_Data) + * [Coding](#Coding) + * [Secure Coding](#SecureCoding) + * [Camel -> underline](#Camel_underline) + * [NSString -> NSDate, nil -> @""](#NSString_NSDate) + * [NSDate -> NSString](#NSDate_NSString) + * [More use cases](#More_use_cases) --- -# Getting Started【开始使用】 +## Getting Started【开始使用】 -## Features【能做什么】 +### Features【能做什么】 - MJExtension是一套字典和模型之间互相转换的超轻量级框架 * `JSON` --> `Model`、`Core Data Model` * `JSONString` --> `Model`、`Core Data Model` @@ -64,34 +46,66 @@ MJExtension * `JSONString` --> `Model Array`、`Core Data Model Array` * `Model Array`、`Core Data Model Array` --> `JSON Array` * Coding all properties of a model with only one line of code. - * 只需要一行代码,就能实现模型的所有属性进行Coding(归档和解档) + * 只需要一行代码,就能实现模型的所有属性进行Coding / SecureCoding(归档和解档) -## Installation【安装】 +### Installation【安装】 -### From CocoaPods【使用CocoaPods】 +#### CocoaPods【使用CocoaPods】 ```ruby pod 'MJExtension' ``` -### Manually【手动导入】 +#### Carthage + +```ruby +github "CoderMJLee/MJExtension" +``` + +#### Swift Package Manager + +Released from [`3.4.0`](https://github.com/CoderMJLee/MJExtension/releases/) + +#### Manually【手动导入】 + - Drag all source files under folder `MJExtension` to your project.【将`MJExtension`文件夹中的所有源代码拽入项目中】 - Import the main header file:`#import "MJExtension.h"`【导入主头文件:`#import "MJExtension.h"`】 -```objc -MJExtension.h -MJConst.h MJConst.m -MJFoundation.h MJFoundation.m -MJProperty.h MJProperty.m -MJType.h MJType.m -NSObject+MJCoding.h NSObject+MJCoding.m -NSObject+MJProperty.h NSObject+MJProperty.m -NSObject+MJKeyValue.h NSObject+MJKeyValue.m +## Examples【示例】 + +**Add `MJKeyValue` protocol to your model if needed【如果有需要, 请在模型中加入 `MJKeyValue` 协议】** + +### Usage in Swift [关于在Swift中使用MJExtension] ‼️ + +> Example: +> +> - [Model - MJTester.swift](MJExtensionTests/SwiftModel/MJTester.swift) +> +> - [Usage - SwiftModelTests.swift](MJExtensionTests/SwiftModelTests.swift) + +```swift +@objc(MJTester) +@objcMembers +class MJTester: NSObject { + // make sure to use `dynamic` attribute for basic type & must use as Non-Optional & must set initial value + dynamic var isSpecialAgent: Bool = false + dynamic var age: Int = 0 + + var name: String? + var identifier: String? +} ``` -# Examples【示例】 +1. `@objc` or `@objcMembers` attributes should be added to class or property for declaration of Objc accessibility [在 Swift4 之后, 请在属性前加 `@objc` 修饰或在类前增加 `@objcMembers`. 以保证 Swift 的属性能够暴露给 Objc 使用. ] +2. If you let `Bool` & `Int` as property type, make sure that using `dynamic` to attribute it. It must be `Non-Optional` type and assign `a default value`.[如果要使用 `Bool` 和 `Int` 等 Swfit 专用基本类型, 请使用 `dynamic` 关键字修饰, 类型为 `Non-Optional`, 並且给定初始值.] -**Add `MJKeyValue` protocol to your model if needed【如果有需要, 请在模型中加入 `MJKeyValue` 协议】** +> 纯Swift版的JSON与Model转换框架已经开源上架 +> +> - [KakaJSON](https://github.com/kakaopensource/KakaJSON) +> - [中文教程](https://www.cnblogs.com/mjios/p/11352776.html) +> - 如果你的项目是用Swift写的Model,墙裂推荐使用[KakaJSON](https://github.com/kakaopensource/KakaJSON) +> - 已经对各种常用的数据场景进行了大量的单元测试 +> - 简单易用、功能丰富、转换快速 ### The most simple JSON -> Model【最简单的字典转模型】 @@ -448,58 +462,99 @@ NSLog(@"%@", dictArray); ### Core Data -```objc -NSDictionary *dict = @{ - @"name" : @"Jack", - @"icon" : @"lufy.png", - @"age" : @20, - @"height" : @1.55, - @"money" : @"100.9", - @"sex" : @(SexFemale), - @"gay" : @"true" - }; - -// This demo just provide simple steps -NSManagedObjectContext *context = nil; -User *user = [User mj_objectWithKeyValues:dict context:context]; - -[context save:nil]; +```swift +func json2CoreDataObject() { + context.performAndWait { + let object = MJCoreDataTester.mj_object(withKeyValues: Values.testJSONObject, context: context) + // use the object + } +} + +func coreDataObject2JSON() { + context.performAndWait { + let dict = coreDataObject.mj_keyValues() + // use dict + } +} ``` -### Coding +### Coding (Archive & Unarchive methods are deprecated in iOS 12) ```objc #import "MJExtension.h" -@implementation Bag +@implementation MJBag // NSCoding Implementation -MJExtensionCodingImplementation +MJCodingImplementation @end /***********************************************/ // what properties not to be coded -[Bag mj_setupIgnoredCodingPropertyNames:^NSArray *{ +[MJBag mj_setupIgnoredCodingPropertyNames:^NSArray *{ return @[@"name"]; }]; -// Equals: Bag.m implements +mj_ignoredCodingPropertyNames method. +// Equals: MJBag.m implements +mj_ignoredCodingPropertyNames method. // Create model -Bag *bag = [[Bag alloc] init]; +MJBag *bag = [[MJBag alloc] init]; bag.name = @"Red bag"; bag.price = 200.8; NSString *file = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/bag.data"]; -// Encoding +// Encoding by archiving [NSKeyedArchiver archiveRootObject:bag toFile:file]; -// Decoding -Bag *decodedBag = [NSKeyedUnarchiver unarchiveObjectWithFile:file]; +// Decoding by unarchiving +MJBag *decodedBag = [NSKeyedUnarchiver unarchiveObjectWithFile:file]; NSLog(@"name=%@, price=%f", decodedBag.name, decodedBag.price); // name=(null), price=200.800000 ``` +### Secure Coding + +Using `MJSecureCodingImplementation(class, isSupport)` macro. + +```objc +@import MJExtension; + +// NSSecureCoding Implementation +MJSecureCodingImplementation(MJBag, YES) + +@implementation MJBag +@end + + /***********************************************/ + +// what properties not to be coded +[MJBag mj_setupIgnoredCodingPropertyNames:^NSArray *{ + return @[@"name"]; +}]; +// Equals: MJBag.m implements +mj_ignoredCodingPropertyNames method. + +// Create model +MJBag *bag = [[MJBag alloc] init]; +bag.name = @"Red bag"; +bag.price = 200.8; +bag.isBig = YES; +bag.weight = 200; + +NSString *file = [NSTemporaryDirectory() stringByAppendingPathComponent:@"bag.data"]; + +NSError *error = nil; +// Encoding by archiving +NSData *data = [NSKeyedArchiver archivedDataWithRootObject:bag requiringSecureCoding:YES error:&error]; +[data writeToFile:file atomically:true]; + +// Decoding by unarchiving +NSData *readData = [NSFileManager.defaultManager contentsAtPath:file]; +error = nil; +MJBag *decodedBag = [NSKeyedUnarchiver unarchivedObjectOfClass:MJBag.class fromData:readData error:&error]; +MJExtensionLog(@"name=%@, price=%f", decodedBag.name, decodedBag.price); +``` + ### Camel -> underline【统一转换属性名(比如驼峰转下划线)】 + ```objc // Dog #import "MJExtension.h" diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index c5ec9521..be99bfc3 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -17,10 +17,10 @@ PODS: - FLAnimatedImage (1.0.16) - lottie-ios (2.5.3) - Masonry (1.1.0) - - MJExtension (3.3.0) - - SDWebImage (5.12.1): - - SDWebImage/Core (= 5.12.1) - - SDWebImage/Core (5.12.1) + - MJExtension (3.4.1) + - SDWebImage (5.13.1): + - SDWebImage/Core (= 5.13.1) + - SDWebImage/Core (5.13.1) - SSZipArchive (2.4.3) - SVProgressHUD (2.2.5) @@ -35,7 +35,7 @@ DEPENDENCIES: - SVProgressHUD SPEC REPOS: - https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: + trunk: - AFNetworking - FLAnimatedImage - lottie-ios @@ -50,11 +50,11 @@ SPEC CHECKSUMS: FLAnimatedImage: 8f3e854ebf9680b71f0b6e700939687fc4d82b4b lottie-ios: a50d5c0160425cd4b01b852bb9578963e6d92d31 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 - MJExtension: 01704cca2b60a214c10761b6491eab74069d68a9 - SDWebImage: 4dc3e42d9ec0c1028b960a33ac6b637bb432207b + MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961 + SDWebImage: fb26a455eeda4c7a55e4dcb6172dbb258af7a4ca SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 -PODFILE CHECKSUM: 3b71152872b1f4f0c37ce27a3feb4bde27dcfe13 +PODFILE CHECKSUM: 810786eceef5557119a3be1afae173f3395a20cd COCOAPODS: 1.11.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 77f32c00..97d0cfa6 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 55; objects = { /* Begin PBXBuildFile section */ @@ -504,7 +504,7 @@ 00479298566D215E659A17A6B7903ACD /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; 005249A55A9749ACA05D4ABBEA17F3DB /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; 01058F7F7DB57FA97129895237A42921 /* FLAnimatedImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FLAnimatedImage-Info.plist"; sourceTree = ""; }; - 027BAD07266B94108177646D309EFD86 /* mz_zip_rw.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_zip_rw.c; path = SSZipArchive/minizip/mz_zip_rw.c; sourceTree = ""; }; + 027BAD07266B94108177646D309EFD86 /* mz_zip_rw.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_zip_rw.c; path = SSZipArchive/minizip/mz_zip_rw.c; sourceTree = ""; }; 02B3B75735044383419343D0A3FB84F1 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; 04B67E0D0ACD6A2723D538F07F5570E5 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; 04C8F6F87BFDBC052B3227102236512E /* NSObject+MJCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJCoding.h"; path = "MJExtension/NSObject+MJCoding.h"; sourceTree = ""; }; @@ -531,7 +531,7 @@ 0E5DE6C7C8B8C8B7B78BA9B367FF1C60 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; 0E63F33188F0CFE90CECF53A9149907C /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; 0F9B24964C20B240D6C2C80C9D6B8952 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; - 10CC017F9A90970C7A20FF4943FF2F09 /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; }; + 10CC017F9A90970C7A20FF4943FF2F09 /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; }; 1128FBD9DB338361AC12BCF34AB7730C /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; 1162FB136959EC1DEF44288F14069712 /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; 117D060210806D9ACAAE73882D215F35 /* MJExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJExtension-dummy.m"; sourceTree = ""; }; @@ -579,7 +579,7 @@ 297480ADAC5C8E71AEA23249105ADD62 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; 2A05B53B3926E1DE0D199B3983AC4D7D /* SVProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVProgressHUD.debug.xcconfig; sourceTree = ""; }; 2AD403D748D297D4B713AED6B8C64A84 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; - 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MJExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJExtension; path = MJExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2B27CAC816737DE23B78CB8C9C2F3748 /* LOTAnimatedSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimatedSwitch.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimatedSwitch.h"; sourceTree = ""; }; 2B457D86F110247D8FC78B99DBEDD0EF /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPointInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h"; sourceTree = ""; }; 2B5BDC8EF6B4BD1C2CC2EB99848F3F15 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; @@ -620,10 +620,10 @@ 3F24295AD9E067DE3766F15151874EC6 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; 3F59456C6FAFB49F8C6E00407F4E0E25 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; 3F6BF655A544DEEBDD58C4084C866149 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; - 40F9306FFD425A1F273EDC17C6D0A4AA /* mz_os.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_os.c; path = SSZipArchive/minizip/mz_os.c; sourceTree = ""; }; + 40F9306FFD425A1F273EDC17C6D0A4AA /* mz_os.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_os.c; path = SSZipArchive/minizip/mz_os.c; sourceTree = ""; }; 41599FBA77F0965C08363DB7C6174F8C /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; 41CB3A4C6FBF6E88018535F16E083E65 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; - 4281BAE6A543F321D2FF3F47F9508ED1 /* mz_zip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_zip.c; path = SSZipArchive/minizip/mz_zip.c; sourceTree = ""; }; + 4281BAE6A543F321D2FF3F47F9508ED1 /* mz_zip.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_zip.c; path = SSZipArchive/minizip/mz_zip.c; sourceTree = ""; }; 42E9273AC6485EE3B86EA5FF84476695 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; 43262C281CC21E0CE8C30309C9168410 /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+Compat.h"; path = "lottie-ios/Classes/MacCompatibility/CALayer+Compat.h"; sourceTree = ""; }; 448D081EF4A7C0053C7665335124B72E /* SVProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-prefix.pch"; sourceTree = ""; }; @@ -663,7 +663,7 @@ 594EE5DE3042A4D3102C0381034CD426 /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; 5963B1051EB2D4EF4FC90E47908C5D03 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; 5BBD376C7604F7F121FA64AF728145ED /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; - 5C2053D20E665479B88C67224E43D69D /* mz_crypt.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_crypt.c; path = SSZipArchive/minizip/mz_crypt.c; sourceTree = ""; }; + 5C2053D20E665479B88C67224E43D69D /* mz_crypt.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_crypt.c; path = SSZipArchive/minizip/mz_crypt.c; sourceTree = ""; }; 5C486B04A61350B8E915EC5944BD5EF2 /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; 5C64DF24D5B0FB3FBBE76438EE28279C /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAsset.h; path = "lottie-ios/Classes/Models/LOTAsset.h"; sourceTree = ""; }; 5D2CA27A2C7565BA1EA9880BA5D91164 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; @@ -697,7 +697,7 @@ 6B6F64C4006CA8AAC8267C4DB2E85567 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; 6BCF9A578D49DB1F25252BF71B78B61A /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; 6BF3370389627E4D9D68703F66596E06 /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJKeyValue.h"; path = "MJExtension/NSObject+MJKeyValue.h"; sourceTree = ""; }; - 6C0797CE967FF9895B2713B551011EBE /* mz_strm_wzaes.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_wzaes.c; path = SSZipArchive/minizip/mz_strm_wzaes.c; sourceTree = ""; }; + 6C0797CE967FF9895B2713B551011EBE /* mz_strm_wzaes.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_wzaes.c; path = SSZipArchive/minizip/mz_strm_wzaes.c; sourceTree = ""; }; 6DCDD42C8DBE5C2B51B6BA1DDF9DC159 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; 6DFE559C4A311523A40DAE73B3E3B2AF /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; 6E43106EFBF9B22F9A9B710C863949FE /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; @@ -712,7 +712,7 @@ 71F22380B1EA0DEBBE092076E5B51252 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; 72565C489284FD30F2E0B5C3E2DA0E3A /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; 72BC8F227DA3686685A46276A3DCE600 /* FLAnimatedImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLAnimatedImage.release.xcconfig; sourceTree = ""; }; - 72ED74151E4D17ADC124EB650527310A /* mz_compat.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_compat.c; path = SSZipArchive/minizip/mz_compat.c; sourceTree = ""; }; + 72ED74151E4D17ADC124EB650527310A /* mz_compat.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_compat.c; path = SSZipArchive/minizip/mz_compat.c; sourceTree = ""; }; 7337565937E2677B4844B9DA6492B8EC /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; 734F1FD7A192E6FECD0DF931405003F9 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; 735B84AC3924F2697F030E064CF175E4 /* WKWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WKWebView+AFNetworking.h"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.h"; sourceTree = ""; }; @@ -738,14 +738,14 @@ 7F6860AB7489D272F8A51945BA56BEBE /* LOTRenderNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRenderNode.h; path = "lottie-ios/Classes/RenderSystem/LOTRenderNode.h"; sourceTree = ""; }; 7F703742C66878FA1DFFFC845CB07D10 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; 804AD9986EA954B89619F866CBD618EB /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; - 809B5531B83B62DC6323E516CB10DA2D /* mz_strm.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm.c; path = SSZipArchive/minizip/mz_strm.c; sourceTree = ""; }; + 809B5531B83B62DC6323E516CB10DA2D /* mz_strm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm.c; path = SSZipArchive/minizip/mz_strm.c; sourceTree = ""; }; 8168297EC4580D369C87D41E0A12A869 /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CGGeometry+LOTAdditions.m"; path = "lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m"; sourceTree = ""; }; 81CF29F299248BD5C45EEF80312CEAEC /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; 8258F6A9BD28008764879EFEA5334808 /* LOTInterpolatorCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTInterpolatorCallback.m; path = "lottie-ios/Classes/Private/LOTInterpolatorCallback.m"; sourceTree = ""; }; 82F899DEA00079E8F2790274218B7E18 /* LOTBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTBezierPath.h; path = "lottie-ios/Classes/Extensions/LOTBezierPath.h"; sourceTree = ""; }; - 836D5D084B55649938CB7005EAE181B8 /* mz_strm_split.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_split.c; path = SSZipArchive/minizip/mz_strm_split.c; sourceTree = ""; }; + 836D5D084B55649938CB7005EAE181B8 /* mz_strm_split.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_split.c; path = SSZipArchive/minizip/mz_strm_split.c; sourceTree = ""; }; 836FF874551D859BAAD61D05BBD380E3 /* MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtension.h; path = MJExtension/MJExtension.h; sourceTree = ""; }; - 83CA94D662DFD80A0850FC2F1340F121 /* mz_strm_os_posix.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_os_posix.c; path = SSZipArchive/minizip/mz_strm_os_posix.c; sourceTree = ""; }; + 83CA94D662DFD80A0850FC2F1340F121 /* mz_strm_os_posix.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_os_posix.c; path = SSZipArchive/minizip/mz_strm_os_posix.c; sourceTree = ""; }; 849CC934AC47D5B5D970EA3D4A7EEB31 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; 85D0E223DEE31D0F10420BA1FADD473B /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeTransform.h; path = "lottie-ios/Classes/Models/LOTShapeTransform.h"; sourceTree = ""; }; 85FA0D1CD074CE6FFCCD3EB62182D383 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; @@ -769,7 +769,7 @@ 8E1168C3D2629603B90A9242B276057C /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; 8E4A1267A38238647F8C6012A5086D5A /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; 8E9A82BADD689D08B7C3420FA52A34E5 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; - 8E9B4C9E902245109F3FC42C8712AEB7 /* mz_strm_pkcrypt.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_pkcrypt.c; path = SSZipArchive/minizip/mz_strm_pkcrypt.c; sourceTree = ""; }; + 8E9B4C9E902245109F3FC42C8712AEB7 /* mz_strm_pkcrypt.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_pkcrypt.c; path = SSZipArchive/minizip/mz_strm_pkcrypt.c; sourceTree = ""; }; 8EDC1DBB4E0D30BBEEF30E0A03AE9C2B /* LOTKeypath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTKeypath.m; path = "lottie-ios/Classes/Private/LOTKeypath.m"; sourceTree = ""; }; 90AF911E47BC303463141C0A74283B53 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; 91061B25707C61D673031A8069144EAB /* FLAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLAnimatedImageView.m; path = FLAnimatedImage/FLAnimatedImageView.m; sourceTree = ""; }; @@ -788,13 +788,13 @@ 974F2DCADE8B53514A4414F02E71059D /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; 981049E3CC3187129561ED115D6EE5F9 /* FLAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLAnimatedImage.h; path = FLAnimatedImage/include/FLAnimatedImage.h; sourceTree = ""; }; 985A374CE622C18EEFA764CFD37F3FF9 /* lottie-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-dummy.m"; sourceTree = ""; }; - 987372C15E1CB8FCC60E6B86DE70243C /* mz_strm_mem.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_mem.c; path = SSZipArchive/minizip/mz_strm_mem.c; sourceTree = ""; }; + 987372C15E1CB8FCC60E6B86DE70243C /* mz_strm_mem.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_mem.c; path = SSZipArchive/minizip/mz_strm_mem.c; sourceTree = ""; }; 99AD7BA7116A285188BA9C6E7EFD579F /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; 99E4E794CB67A20921A68F8F817D605C /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; 99E652837073433AE3CA10B2BBDC267E /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; 9CAF2A62D1BCB334163CC009BA7C4AA6 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; 9D6FCE8CAB53EB338B20BF26812F4D3E /* MJPropertyKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyKey.m; path = MJExtension/MJPropertyKey.m; sourceTree = ""; }; - 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; }; + 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; }; 9DDFFC1C2A214B812AFC0D810B868BD9 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; 9E18E773BDA02CD1CA2F4A41072A3BBB /* SVProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressHUD.m; path = SVProgressHUD/SVProgressHUD.m; sourceTree = ""; }; 9E38876157C168C2552ADF363F6BE3EE /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVIndefiniteAnimatedView.h; path = SVProgressHUD/SVIndefiniteAnimatedView.h; sourceTree = ""; }; @@ -848,7 +848,7 @@ B7FE1862BDCEB0BF2688D23363F4E02F /* lottie-ios.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "lottie-ios.modulemap"; sourceTree = ""; }; B88AA0E80D33E1539C8A8222FB15FF89 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationView_Internal.h; path = "lottie-ios/Classes/Private/LOTAnimationView_Internal.h"; sourceTree = ""; }; BB9D5FF6DC9083CFB8FB00C1D2D0FBB4 /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRenderGroup.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h"; sourceTree = ""; }; - BBF3647262425CC4E9F1552B239842CD /* mz_crypt_apple.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_crypt_apple.c; path = SSZipArchive/minizip/mz_crypt_apple.c; sourceTree = ""; }; + BBF3647262425CC4E9F1552B239842CD /* mz_crypt_apple.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_crypt_apple.c; path = SSZipArchive/minizip/mz_crypt_apple.c; sourceTree = ""; }; BC9A2A819CC886BB148682B94675657A /* FLAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLAnimatedImage.m; path = FLAnimatedImage/FLAnimatedImage.m; sourceTree = ""; }; BCBB61C9C58F0CDFA587120FB87BD42B /* LOTRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTRadialGradientLayer.m; path = "lottie-ios/Classes/Extensions/LOTRadialGradientLayer.m"; sourceTree = ""; }; BCF81E0B5B24794D57B156039154C6A9 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTLayerGroup.h; path = "lottie-ios/Classes/Models/LOTLayerGroup.h"; sourceTree = ""; }; @@ -876,7 +876,7 @@ CB3FFC48F6FF44201521C31CA61DABFB /* LOTAnimatorNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimatorNode.m; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m"; sourceTree = ""; }; CC1CCA0AC131D9DB30C318C39287B622 /* FLAnimatedImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLAnimatedImage.modulemap; sourceTree = ""; }; CC59812DDB895C8680D2B18A9507CEBC /* LOTBezierData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTBezierData.h; path = "lottie-ios/Classes/AnimatableProperties/LOTBezierData.h"; sourceTree = ""; }; - CCDFAA23D358C8A5C8193432F4B54B2D /* mz_os_posix.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_os_posix.c; path = SSZipArchive/minizip/mz_os_posix.c; sourceTree = ""; }; + CCDFAA23D358C8A5C8193432F4B54B2D /* mz_os_posix.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_os_posix.c; path = SSZipArchive/minizip/mz_os_posix.c; sourceTree = ""; }; CD15B8D4D88FE7A5AC74147E25AB4BB2 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; CD19907077205F4D73491451474CE305 /* LOTShapeRepeater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeRepeater.h; path = "lottie-ios/Classes/Models/LOTShapeRepeater.h"; sourceTree = ""; }; CE2D8BBD7F8212113ABD41944860D595 /* mz_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_compat.h; path = SSZipArchive/minizip/mz_compat.h; sourceTree = ""; }; @@ -908,7 +908,7 @@ D93FE17C8482BC2378A94B4A47A24A1D /* LOTFillRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTFillRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h"; sourceTree = ""; }; D94DC9EFDCC01CD09BFC929C4454FAD8 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; D9C241407E1EB7CAF1FA90762A831EF9 /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; - D9ED75D877AB6FC4B145F8B1250984EC /* mz_strm_buf.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_buf.c; path = SSZipArchive/minizip/mz_strm_buf.c; sourceTree = ""; }; + D9ED75D877AB6FC4B145F8B1250984EC /* mz_strm_buf.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_buf.c; path = SSZipArchive/minizip/mz_strm_buf.c; sourceTree = ""; }; DA0D9DF96B9694F65BE42A32C7467682 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; DACBD4DBB18FD29BDBD068A448032FF9 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; DAF1BFFF0DA9D2F5F08A2414C490143C /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTTransformInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m"; sourceTree = ""; }; @@ -935,7 +935,7 @@ E91A5AA6B471F4E349EDC3A3D9BEFC15 /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; E9374C542AC8FE3B9D0A72274239BF11 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; E97D43C46A45EE515A4DA3AF94398441 /* SVProgressHUD */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SVProgressHUD; path = SVProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EA01481D9D88A43ADA7BE6A30CCE3EF0 /* mz_strm_zlib.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mz_strm_zlib.c; path = SSZipArchive/minizip/mz_strm_zlib.c; sourceTree = ""; }; + EA01481D9D88A43ADA7BE6A30CCE3EF0 /* mz_strm_zlib.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_zlib.c; path = SSZipArchive/minizip/mz_strm_zlib.c; sourceTree = ""; }; EA22745C925D60259B89710AFD45EACF /* Masonry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Masonry-Info.plist"; sourceTree = ""; }; EB149F9C35882D39F4E93AD275EFF42C /* LOTCompositionContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTCompositionContainer.h; path = "lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h"; sourceTree = ""; }; EB3AB80F926117582DA0E81E0C0AD1D8 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; @@ -1094,7 +1094,7 @@ FAA5F2D71B90788C908800A94534AA92 /* FLAnimatedImage */, 51BA97E8B5085EFFB47BC9C0B785CEA7 /* lottie-ios */, 1FFED36A657123030ABB700256D73F15 /* Masonry */, - 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension.framework */, + 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */, 3673B994EDE0CD2EC135C263D5C1BAF6 /* Pods-FULiveDemo */, B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */, 91B23470DEB9A986332BEB5034234BC7 /* SSZipArchive */, @@ -1167,6 +1167,7 @@ 7638449C4FCA554B8C1899EF72B6B01B /* ZipArchive.h */, F80CA7299A5C35FFB332940FAF6A795F /* Support Files */, ); + name = SSZipArchive; path = SSZipArchive; sourceTree = ""; }; @@ -1304,6 +1305,7 @@ AC592862B358A9F86847E4E64CA5294B /* UIColor+Expanded.m */, F7DA72BD7D1F9D210E51BDD9BCB8F347 /* Support Files */, ); + name = "lottie-ios"; path = "lottie-ios"; sourceTree = ""; }; @@ -1321,6 +1323,7 @@ 8ADD8E0865C701BC7BB0F5552690EE2C /* Resources */, 784CC9118E999CB5D1AA603DDBA35674 /* Support Files */, ); + name = SVProgressHUD; path = SVProgressHUD; sourceTree = ""; }; @@ -1406,6 +1409,7 @@ 305BF3AB1FB9B9B6D3E5D13A5900799C /* NSString+MJExtension.m */, 06B1E0AFFC1878D0215904AA1FE9641D /* Support Files */, ); + name = MJExtension; path = MJExtension; sourceTree = ""; }; @@ -1453,6 +1457,7 @@ F44BC5273DA54E3B7E983F50B7AF0B48 /* Core */, 8055276C5CE4A65F05E86504AE3713D4 /* Support Files */, ); + name = SDWebImage; path = SDWebImage; sourceTree = ""; }; @@ -1465,6 +1470,7 @@ 91061B25707C61D673031A8069144EAB /* FLAnimatedImageView.m */, B0921003861BF1CB2A6BCE2374CB76EF /* Support Files */, ); + name = FLAnimatedImage; path = FLAnimatedImage; sourceTree = ""; }; @@ -1524,6 +1530,7 @@ E056C3078690B4CF17CFBE46E39410E4 /* ViewController+MASAdditions.m */, EC39DD702AB21715B6389512581638AC /* Support Files */, ); + name = Masonry; path = Masonry; sourceTree = ""; }; @@ -1754,6 +1761,7 @@ F11E2424E88A607769F92D80B6306249 /* Support Files */, 16DA8D420E4668657C311ED37061EA9F /* UIKit */, ); + name = AFNetworking; path = AFNetworking; sourceTree = ""; }; @@ -2178,7 +2186,7 @@ ); name = MJExtension; productName = MJExtension; - productReference = 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension.framework */; + productReference = 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */; productType = "com.apple.product-type.framework"; }; 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */ = { @@ -2253,7 +2261,7 @@ LastUpgradeCheck = 1240; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 11.0"; + compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -2659,11 +2667,10 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0CC88BA4E4C5BBDD1AD6A9B67455DA90 /* Debug */ = { + 0644D6A14912D73D0D7F16C51806ECBD /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3C55F1495CC22DDEECED409585F1D337 /* SDWebImage.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2693,11 +2700,10 @@ }; name = Debug; }; - 23B0EE0767DA9B3F8EFA9EB6A6FB170C /* Debug */ = { + 081E9FB060B0756341772CAE0256D3FC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C8759190A82DE3079EBC07CB122CA88 /* lottie-ios.debug.xcconfig */; + baseConfigurationReference = F819105DDDFDA09766E46E8726E27929 /* SVProgressHUD.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2706,8 +2712,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios/lottie-ios-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios/lottie-ios-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -2715,17 +2721,52 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/lottie-ios/lottie-ios.modulemap"; - PRODUCT_MODULE_NAME = Lottie; - PRODUCT_NAME = Lottie; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = SVProgressHUD; + PRODUCT_NAME = SVProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; + }; + 1AD6CE5A4D8A8F7ABE3B6B5416F58A31 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 72BC8F227DA3686685A46276A3DCE600 /* FLAnimatedImage.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; + PRODUCT_MODULE_NAME = FLAnimatedImage; + PRODUCT_NAME = FLAnimatedImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; }; 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { isa = XCBuildConfiguration; @@ -2793,11 +2834,10 @@ }; name = Debug; }; - 3CCEB621C7A287F447D5D6535FEE0170 /* Release */ = { + 2A4934D493CED335C78C556650517530 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B59D00B0C5601E823D1988EB6FAD445 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = 368434285851086D3479A134A13B521D /* MJExtension.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2806,42 +2846,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 4C25C0641F7684559D9273368C2322C6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D0E9778EA37582327F37357805F31E34 /* SSZipArchive.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SSZipArchive/SSZipArchive-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SSZipArchive/SSZipArchive-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MJExtension/MJExtension-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MJExtension/MJExtension-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -2849,9 +2855,9 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SSZipArchive/SSZipArchive.modulemap"; - PRODUCT_MODULE_NAME = SSZipArchive; - PRODUCT_NAME = SSZipArchive; + MODULEMAP_FILE = "Target Support Files/MJExtension/MJExtension.modulemap"; + PRODUCT_MODULE_NAME = MJExtension; + PRODUCT_NAME = MJExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2861,11 +2867,10 @@ }; name = Debug; }; - 62C545B165F9F0E03A0E55FA3CEDB615 /* Release */ = { + 4E47D8F07CFC4313DF530822736401B8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D9C241407E1EB7CAF1FA90762A831EF9 /* Masonry.release.xcconfig */; + baseConfigurationReference = 0B59D00B0C5601E823D1988EB6FAD445 /* SDWebImage.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2874,18 +2879,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Masonry/Masonry-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/Masonry/Masonry.modulemap"; - PRODUCT_MODULE_NAME = Masonry; - PRODUCT_NAME = Masonry; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2896,11 +2901,10 @@ }; name = Release; }; - 63591082E59273535E9E6BF734020342 /* Debug */ = { + 574336E93FEE5E80463961C3B5210418 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 52CDB41C014C977211343130BBF6ADF7 /* Masonry.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2930,11 +2934,10 @@ }; name = Debug; }; - 828AAF86A6EE22E9DF1FF833330AB20A /* Release */ = { + 59D3AFD7039E29C86EB80BB9C17B76BE /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2317F4E0E7A0303BF2D3E10604CA233C /* MJExtension.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -2965,47 +2968,43 @@ }; name = Release; }; - 88CF7DF5535BF52F80AA6F91F5CF0173 /* Release */ = { + 66AE5BF3EB9BED21906F3969F27B408B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B92EFF1635BE48DFF93C377E9569972 /* lottie-ios.release.xcconfig */; + baseConfigurationReference = D0E9778EA37582327F37357805F31E34 /* SSZipArchive.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios/lottie-ios-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios/lottie-ios-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SSZipArchive/SSZipArchive-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SSZipArchive/SSZipArchive-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/lottie-ios/lottie-ios.modulemap"; - PRODUCT_MODULE_NAME = Lottie; - PRODUCT_NAME = Lottie; + MODULEMAP_FILE = "Target Support Files/SSZipArchive/SSZipArchive.modulemap"; + PRODUCT_MODULE_NAME = SSZipArchive; + PRODUCT_NAME = SSZipArchive; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 962260DDFB0B0A8FC7790BA90E91E184 /* Debug */ = { + 6BA9AE852F487155206C1B980102B5C1 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = E1954D6F8393C88C0E78C56453AFFD89 /* Pods-FULiveDemo.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3037,21 +3036,19 @@ }; name = Debug; }; - A3EDE669EEC9605361C1DB0426C778E9 /* Debug */ = { + 796DC4304ED75B409BD507C2856E9EBA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 09365ABB169C84358B60506404B39D0E /* AFNetworking.debug.xcconfig */; + baseConfigurationReference = 35853BDC13C54C037902B5684AB89569 /* SSZipArchive.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SSZipArchive/SSZipArchive-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SSZipArchive/SSZipArchive-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -3059,23 +3056,23 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/SSZipArchive/SSZipArchive.modulemap"; + PRODUCT_MODULE_NAME = SSZipArchive; + PRODUCT_NAME = SSZipArchive; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - A9DB70E7EB8D2F0467A528832B7CC961 /* Release */ = { + 80344A194E5B0B3EC11B1DFCF0360690 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F819105DDDFDA09766E46E8726E27929 /* SVProgressHUD.release.xcconfig */; + baseConfigurationReference = 71F22380B1EA0DEBBE092076E5B51252 /* AFNetworking.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3084,18 +3081,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = SVProgressHUD; - PRODUCT_NAME = SVProgressHUD; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -3106,11 +3103,10 @@ }; name = Release; }; - AEBAC77715031B0B23DA0CF5ABE9A709 /* Debug */ = { + 83A1CD5A0D744E6C5C16EB552F459A6A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 368434285851086D3479A134A13B521D /* MJExtension.debug.xcconfig */; + baseConfigurationReference = D9C241407E1EB7CAF1FA90762A831EF9 /* Masonry.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3119,94 +3115,32 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MJExtension/MJExtension-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MJExtension/MJExtension-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Masonry/Masonry-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/MJExtension/MJExtension.modulemap"; - PRODUCT_MODULE_NAME = MJExtension; - PRODUCT_NAME = MJExtension; + MODULEMAP_FILE = "Target Support Files/Masonry/Masonry.modulemap"; + PRODUCT_MODULE_NAME = Masonry; + PRODUCT_NAME = Masonry; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; name = Release; }; - CBE3825DE8CE280C35731FC91C1E3223 /* Release */ = { + 88901C573AFE6891B13C4C18BC149BC9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71F22380B1EA0DEBBE092076E5B51252 /* AFNetworking.release.xcconfig */; + baseConfigurationReference = 3B92EFF1635BE48DFF93C377E9569972 /* lottie-ios.release.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3215,18 +3149,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios/lottie-ios-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios/lottie-ios-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/lottie-ios/lottie-ios.modulemap"; + PRODUCT_MODULE_NAME = Lottie; + PRODUCT_NAME = Lottie; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -3237,11 +3171,10 @@ }; name = Release; }; - DB632345C7FE6470198AE36EE71894C1 /* Debug */ = { + 908626F20565D4613CA67CC77A1B147E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 30DAA808B1E8B04416916BC074384A84 /* FLAnimatedImage.debug.xcconfig */; + baseConfigurationReference = 2C8759190A82DE3079EBC07CB122CA88 /* lottie-ios.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3250,18 +3183,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FLAnimatedImage/FLAnimatedImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios/lottie-ios-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios/lottie-ios-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/FLAnimatedImage/FLAnimatedImage.modulemap"; - PRODUCT_MODULE_NAME = FLAnimatedImage; - PRODUCT_NAME = FLAnimatedImage; + MODULEMAP_FILE = "Target Support Files/lottie-ios/lottie-ios.modulemap"; + PRODUCT_MODULE_NAME = Lottie; + PRODUCT_NAME = Lottie; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -3271,11 +3204,10 @@ }; name = Debug; }; - DC2531FDF2E6075D4E42E0C98DE9D184 /* Release */ = { + 9922EA2B52F1A36AF9716D816E169AC3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 72BC8F227DA3686685A46276A3DCE600 /* FLAnimatedImage.release.xcconfig */; + baseConfigurationReference = 30DAA808B1E8B04416916BC074384A84 /* FLAnimatedImage.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3300,51 +3232,110 @@ SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F2671AE45D3BF6FFFCC0557C8139F33A /* Release */ = { + C8833FEAD050602E405E2DA4DB49ECA6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 35853BDC13C54C037902B5684AB89569 /* SSZipArchive.release.xcconfig */; + baseConfigurationReference = 2A05B53B3926E1DE0D199B3983AC4D7D /* SVProgressHUD.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SSZipArchive/SSZipArchive-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SSZipArchive/SSZipArchive-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SSZipArchive/SSZipArchive.modulemap"; - PRODUCT_MODULE_NAME = SSZipArchive; - PRODUCT_NAME = SSZipArchive; + MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = SVProgressHUD; + PRODUCT_NAME = SVProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Debug; + }; + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; name = Release; }; - F48B4D617A9E07ADF777134773F8A7B7 /* Debug */ = { + CE82259E8755F62223B25EE70D0CEAB5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A05B53B3926E1DE0D199B3983AC4D7D /* SVProgressHUD.debug.xcconfig */; + baseConfigurationReference = 09365ABB169C84358B60506404B39D0E /* AFNetworking.debug.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3353,18 +3344,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SVProgressHUD/SVProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = SVProgressHUD; - PRODUCT_NAME = SVProgressHUD; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -3374,12 +3365,11 @@ }; name = Debug; }; - F8C9A9BFB2585716B4541465C269D84B /* Release */ = { + D121381C9D69F570365354230A04A772 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 0DDCE33567654C82E3B9612CEFD59920 /* Pods-FULiveDemo.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -3418,8 +3408,8 @@ 0881B556B0650EFC5493DCF6D49B7408 /* Build configuration list for PBXNativeTarget "lottie-ios" */ = { isa = XCConfigurationList; buildConfigurations = ( - 23B0EE0767DA9B3F8EFA9EB6A6FB170C /* Debug */, - 88CF7DF5535BF52F80AA6F91F5CF0173 /* Release */, + 908626F20565D4613CA67CC77A1B147E /* Debug */, + 88901C573AFE6891B13C4C18BC149BC9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3427,8 +3417,8 @@ 104EC9250BF4EDE104280490293C13C3 /* Build configuration list for PBXNativeTarget "Masonry" */ = { isa = XCConfigurationList; buildConfigurations = ( - 63591082E59273535E9E6BF734020342 /* Debug */, - 62C545B165F9F0E03A0E55FA3CEDB615 /* Release */, + 574336E93FEE5E80463961C3B5210418 /* Debug */, + 83A1CD5A0D744E6C5C16EB552F459A6A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3436,8 +3426,8 @@ 2D268A7665B36CDB9436B0809E0E3055 /* Build configuration list for PBXNativeTarget "MJExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( - AEBAC77715031B0B23DA0CF5ABE9A709 /* Debug */, - 828AAF86A6EE22E9DF1FF833330AB20A /* Release */, + 2A4934D493CED335C78C556650517530 /* Debug */, + 59D3AFD7039E29C86EB80BB9C17B76BE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3454,8 +3444,8 @@ 5BD1907B3FD3126519DD9D4C4574CC4E /* Build configuration list for PBXNativeTarget "Pods-FULiveDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 962260DDFB0B0A8FC7790BA90E91E184 /* Debug */, - F8C9A9BFB2585716B4541465C269D84B /* Release */, + 6BA9AE852F487155206C1B980102B5C1 /* Debug */, + D121381C9D69F570365354230A04A772 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3463,8 +3453,8 @@ 5D0A1C5EC006615C1092F876C06EAF4D /* Build configuration list for PBXNativeTarget "SSZipArchive" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4C25C0641F7684559D9273368C2322C6 /* Debug */, - F2671AE45D3BF6FFFCC0557C8139F33A /* Release */, + 66AE5BF3EB9BED21906F3969F27B408B /* Debug */, + 796DC4304ED75B409BD507C2856E9EBA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3472,8 +3462,8 @@ 807FEF9D9629A72728B6B83F5CA12C85 /* Build configuration list for PBXNativeTarget "SVProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( - F48B4D617A9E07ADF777134773F8A7B7 /* Debug */, - A9DB70E7EB8D2F0467A528832B7CC961 /* Release */, + C8833FEAD050602E405E2DA4DB49ECA6 /* Debug */, + 081E9FB060B0756341772CAE0256D3FC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3481,8 +3471,8 @@ BABD4A24CFCBE5B6FE4680AA062FCF04 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0CC88BA4E4C5BBDD1AD6A9B67455DA90 /* Debug */, - 3CCEB621C7A287F447D5D6535FEE0170 /* Release */, + 0644D6A14912D73D0D7F16C51806ECBD /* Debug */, + 4E47D8F07CFC4313DF530822736401B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3490,8 +3480,8 @@ C47E0D5D26BAF11FAF05112183104AB6 /* Build configuration list for PBXNativeTarget "FLAnimatedImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - DB632345C7FE6470198AE36EE71894C1 /* Debug */, - DC2531FDF2E6075D4E42E0C98DE9D184 /* Release */, + 9922EA2B52F1A36AF9716D816E169AC3 /* Debug */, + 1AD6CE5A4D8A8F7ABE3B6B5416F58A31 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3499,8 +3489,8 @@ D5480C5D42AA8B0CF0C71E4D89BF03BF /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( - A3EDE669EEC9605361C1DB0426C778E9 /* Debug */, - CBE3825DE8CE280C35731FC91C1E3223 /* Release */, + CE82259E8755F62223B25EE70D0CEAB5 /* Debug */, + 80344A194E5B0B3EC11B1DFCF0360690 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 0fffcd0b..00000000 --- a/Pods/Pods.xcodeproj/xcuserdata/fu-mobile.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,59 +0,0 @@ - - - - - SchemeUserState - - AFNetworking.xcscheme_^#shared#^_ - - orderHint - 5 - - Bugly.xcscheme_^#shared#^_ - - orderHint - 3 - - FLAnimatedImage.xcscheme_^#shared#^_ - - orderHint - 2 - - MJExtension.xcscheme_^#shared#^_ - - orderHint - 10 - - Masonry.xcscheme_^#shared#^_ - - orderHint - 12 - - Pods-FULiveDemo.xcscheme_^#shared#^_ - - orderHint - 11 - - SDWebImage.xcscheme_^#shared#^_ - - orderHint - 8 - - SSZipArchive.xcscheme_^#shared#^_ - - orderHint - 9 - - SVProgressHUD.xcscheme_^#shared#^_ - - orderHint - 1 - - lottie-ios.xcscheme_^#shared#^_ - - orderHint - 4 - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist index 6a095f2d..6a122c9a 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/sunmu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -6,49 +6,69 @@ AFNetworking.xcscheme + isShown + orderHint - 0 + 2 FLAnimatedImage.xcscheme + isShown + orderHint - 1 + 3 MJExtension.xcscheme + isShown + orderHint - 3 + 7 Masonry.xcscheme + isShown + orderHint - 2 + 6 Pods-FULiveDemo.xcscheme + isShown + orderHint - 4 + 8 SDWebImage.xcscheme + isShown + orderHint - 5 + 9 SSZipArchive.xcscheme + isShown + orderHint 10 SVProgressHUD.xcscheme + isShown + orderHint - 6 + 11 lottie-ios.xcscheme + isShown + orderHint - 9 + 5 + SuppressBuildableAutocreation + diff --git a/Pods/SDWebImage/README.md b/Pods/SDWebImage/README.md index ea77ad77..06e28e3a 100644 --- a/Pods/SDWebImage/README.md +++ b/Pods/SDWebImage/README.md @@ -75,7 +75,7 @@ The new framework introduce two View structs `WebImage` and `AnimatedImage` for #### Integration with 3rd party libraries - [SDWebImageLottiePlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [Lottie-iOS](https://github.com/airbnb/lottie-ios), vector animation rending with remote JSON files -- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support +- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageSVGKitPlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support - [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin) - plugin to support [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) as the engine for animated GIFs - [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to integrate [YYImage](https://github.com/ibireme/YYImage) & [YYCache](https://github.com/ibireme/YYCache) for image rendering & caching diff --git a/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m b/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m index 5f5d41a1..2cdb766f 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m @@ -87,7 +87,7 @@ - (void)setData:(NSData *)data forKey:(NSString *)key { // get cache Path for image key NSString *cachePathForKey = [self cachePathForKey:key]; // transform to NSURL - NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey]; + NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey isDirectory:NO]; [data writeToURL:fileURL options:self.config.diskCacheWritingOptions error:nil]; diff --git a/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m b/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m index 03aef3a5..aeda97b1 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m @@ -132,7 +132,13 @@ - (instancetype)init { #elif SD_UIKIT CGFloat screenScale = [UIScreen mainScreen].scale; #elif SD_MAC - CGFloat screenScale = [NSScreen mainScreen].backingScaleFactor; + NSScreen *mainScreen = nil; + if (@available(macOS 10.12, *)) { + mainScreen = [NSScreen mainScreen]; + } else { + mainScreen = [NSScreen screens].firstObject; + } + CGFloat screenScale = mainScreen.backingScaleFactor ?: 1.0f; #endif self.scale = screenScale; self.opaque = NO; @@ -166,7 +172,13 @@ - (instancetype)initForMainScreen { #elif SD_UIKIT CGFloat screenScale = [UIScreen mainScreen].scale; #elif SD_MAC - CGFloat screenScale = [NSScreen mainScreen].backingScaleFactor; + NSScreen *mainScreen = nil; + if (@available(macOS 10.12, *)) { + mainScreen = [NSScreen mainScreen]; + } else { + mainScreen = [NSScreen screens].firstObject; + } + CGFloat screenScale = mainScreen.backingScaleFactor ?: 1.0f; #endif self.scale = screenScale; self.opaque = NO; diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h b/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h index ad3afd53..9a75580c 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h @@ -55,6 +55,23 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { SDImageCacheMatchAnimatedImageClass = 1 << 7, }; +/** + * A token associated with each cache query. Can be used to cancel a cache query + */ +@interface SDImageCacheToken : NSObject + +/** + Cancel the current cache query. + */ +- (void)cancel; + +/** + The query's cache key. + */ +@property (nonatomic, strong, nullable, readonly) NSString *key; + +@end + /** * SDImageCache maintains a memory cache and a disk cache. Disk cache write operations are performed * asynchronous so it doesn’t add unnecessary latency to the UI. @@ -179,6 +196,17 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock; +/** + * Asynchronously store an image data into disk cache at the given key. + * + * @param imageData The image data to store + * @param key The unique image cache key, usually it's image absolute URL + * @param completionBlock A block executed after the operation is finished + */ +- (void)storeImageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + completion:(nullable SDWebImageNoParamsBlock)completionBlock; + /** * Asynchronously store an image into memory and disk cache at the given key. * @@ -198,7 +226,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { completion:(nullable SDWebImageNoParamsBlock)completionBlock; /** - * Synchronously store image into memory cache at the given key. + * Synchronously store an image into memory cache at the given key. * * @param image The image to store * @param key The unique image cache key, usually it's image absolute URL @@ -207,7 +235,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { forKey:(nullable NSString *)key; /** - * Synchronously store image data into disk cache at the given key. + * Synchronously store an image data into disk cache at the given key. * * @param imageData The image data to store * @param key The unique image cache key, usually it's image absolute URL @@ -259,9 +287,9 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. * @param doneBlock The completion block. Will not get called if the operation is cancelled * - * @return a NSOperation instance containing the cache op + * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled */ -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; /** * Asynchronously queries the cache with operation and call the completion when done. @@ -270,9 +298,9 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param options A mask to specify options to use for this cache query * @param doneBlock The completion block. Will not get called if the operation is cancelled * - * @return a NSOperation instance containing the cache op + * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled */ -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; /** * Asynchronously queries the cache with operation and call the completion when done. @@ -282,9 +310,9 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. * @param doneBlock The completion block. Will not get called if the operation is cancelled * - * @return a NSOperation instance containing the cache op + * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancellederation, will callback immediately when cancelled */ -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; /** * Asynchronously queries the cache with operation and call the completion when done. @@ -295,9 +323,9 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param queryCacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. * @param doneBlock The completion block. Will not get called if the operation is cancelled * - * @return a NSOperation instance containing the cache op + * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled */ -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; /** * Synchronously query the memory cache. diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m b/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m index adb886db..1dc25feb 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m @@ -15,6 +15,42 @@ #import "UIImage+Metadata.h" #import "UIImage+ExtendedCacheData.h" +@interface SDImageCacheToken () + +@property (nonatomic, strong, nullable, readwrite) NSString *key; +@property (nonatomic, assign, getter=isCancelled) BOOL cancelled; +@property (nonatomic, copy, nullable) SDImageCacheQueryCompletionBlock doneBlock; + +@end + +@implementation SDImageCacheToken + +-(instancetype)initWithDoneBlock:(nullable SDImageCacheQueryCompletionBlock)doneBlock { + self = [super init]; + if (self) { + self.doneBlock = doneBlock; + } + return self; +} + +- (void)cancel { + @synchronized (self) { + if (self.isCancelled) { + return; + } + self.cancelled = YES; + + dispatch_main_async_safe(^{ + if (self.doneBlock) { + self.doneBlock(nil, nil, SDImageCacheTypeNone); + self.doneBlock = nil; + } + }); + } +} + +@end + static NSString * _defaultDiskCacheDirectory; @interface SDImageCache () @@ -168,6 +204,12 @@ - (void)storeImage:(nullable UIImage *)image [self storeImage:image imageData:nil forKey:key toDisk:toDisk completion:completionBlock]; } +- (void)storeImageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + completion:(nullable SDWebImageNoParamsBlock)completionBlock { + [self storeImage:nil imageData:imageData forKey:key toDisk:YES completion:completionBlock]; +} + - (void)storeImage:(nullable UIImage *)image imageData:(nullable NSData *)imageData forKey:(nullable NSString *)key @@ -182,14 +224,14 @@ - (void)storeImage:(nullable UIImage *)image toMemory:(BOOL)toMemory toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock { - if (!image || !key) { + if ((!image && !imageData) || !key) { if (completionBlock) { completionBlock(); } return; } // if memory cache is enabled - if (toMemory && self.config.shouldCacheImagesInMemory) { + if (image && toMemory && self.config.shouldCacheImagesInMemory) { NSUInteger cost = image.sd_memoryCost; [self.memoryCache setObject:image forKey:key cost:cost]; } @@ -234,7 +276,7 @@ - (void)storeImage:(nullable UIImage *)image } - (void)_archivedDataWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { + if (!image || !key) { return; } // Check extended data @@ -367,7 +409,11 @@ - (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options: SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue]; shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory); } - if (diskImage && self.config.shouldCacheImagesInMemory && shouldCacheToMomery) { + if (context[SDWebImageContextImageThumbnailPixelSize]) { + // Query full size cache key which generate a thumbnail, should not write back to full size memory cache + shouldCacheToMomery = NO; + } + if (shouldCacheToMomery && diskImage && self.config.shouldCacheImagesInMemory) { NSUInteger cost = diskImage.sd_memoryCost; [self.memoryCache setObject:diskImage forKey:key cost:cost]; } @@ -483,19 +529,19 @@ - (void)_unarchiveObjectWithImage:(UIImage *)image forKey:(NSString *)key { image.sd_extendedObject = extendedObject; } -- (nullable NSOperation *)queryCacheOperationForKey:(NSString *)key done:(SDImageCacheQueryCompletionBlock)doneBlock { +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(NSString *)key done:(SDImageCacheQueryCompletionBlock)doneBlock { return [self queryCacheOperationForKey:key options:0 done:doneBlock]; } -- (nullable NSOperation *)queryCacheOperationForKey:(NSString *)key options:(SDImageCacheOptions)options done:(SDImageCacheQueryCompletionBlock)doneBlock { +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(NSString *)key options:(SDImageCacheOptions)options done:(SDImageCacheQueryCompletionBlock)doneBlock { return [self queryCacheOperationForKey:key options:options context:nil done:doneBlock]; } -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { return [self queryCacheOperationForKey:key options:options context:context cacheType:SDImageCacheTypeAll done:doneBlock]; } -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { +- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { if (!key) { if (doneBlock) { doneBlock(nil, nil, SDImageCacheTypeNone); @@ -546,57 +592,80 @@ - (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key opt } // Second check the disk cache... - NSOperation *operation = [NSOperation new]; + SDImageCacheToken *operation = [[SDImageCacheToken alloc] initWithDoneBlock:doneBlock]; + operation.key = key; // Check whether we need to synchronously query disk // 1. in-memory cache hit & memoryDataSync // 2. in-memory cache miss & diskDataSync BOOL shouldQueryDiskSync = ((image && options & SDImageCacheQueryMemoryDataSync) || (!image && options & SDImageCacheQueryDiskDataSync)); - void(^queryDiskBlock)(void) = ^{ - if (operation.isCancelled) { - if (doneBlock) { - doneBlock(nil, nil, SDImageCacheTypeNone); + NSData* (^queryDiskDataBlock)(void) = ^NSData* { + @synchronized (operation) { + if (operation.isCancelled) { + return nil; } - return; } - @autoreleasepool { - NSData *diskData = [self diskImageDataBySearchingAllPathsForKey:key]; - UIImage *diskImage; - if (image) { - // the image is from in-memory cache, but need image data - diskImage = image; - } else if (diskData) { - BOOL shouldCacheToMomery = YES; - if (context[SDWebImageContextStoreCacheType]) { - SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue]; - shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory); - } - // decode image data only if in-memory cache missed - diskImage = [self diskImageForKey:key data:diskData options:options context:context]; - if (shouldCacheToMomery && diskImage && self.config.shouldCacheImagesInMemory) { - NSUInteger cost = diskImage.sd_memoryCost; - [self.memoryCache setObject:diskImage forKey:key cost:cost]; - } + return [self diskImageDataBySearchingAllPathsForKey:key]; + }; + + UIImage* (^queryDiskImageBlock)(NSData*) = ^UIImage*(NSData* diskData) { + @synchronized (operation) { + if (operation.isCancelled) { + return nil; } - - if (doneBlock) { - if (shouldQueryDiskSync) { - doneBlock(diskImage, diskData, SDImageCacheTypeDisk); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - doneBlock(diskImage, diskData, SDImageCacheTypeDisk); - }); - } + } + + UIImage *diskImage; + if (image) { + // the image is from in-memory cache, but need image data + diskImage = image; + } else if (diskData) { + BOOL shouldCacheToMomery = YES; + if (context[SDWebImageContextStoreCacheType]) { + SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue]; + shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory); + } + if (context[SDWebImageContextImageThumbnailPixelSize]) { + // Query full size cache key which generate a thumbnail, should not write back to full size memory cache + shouldCacheToMomery = NO; + } + // decode image data only if in-memory cache missed + diskImage = [self diskImageForKey:key data:diskData options:options context:context]; + if (shouldCacheToMomery && diskImage && self.config.shouldCacheImagesInMemory) { + NSUInteger cost = diskImage.sd_memoryCost; + [self.memoryCache setObject:diskImage forKey:key cost:cost]; } } + return diskImage; }; // Query in ioQueue to keep IO-safe if (shouldQueryDiskSync) { - dispatch_sync(self.ioQueue, queryDiskBlock); + __block NSData* diskData; + __block UIImage* diskImage; + dispatch_sync(self.ioQueue, ^{ + diskData = queryDiskDataBlock(); + diskImage = queryDiskImageBlock(diskData); + }); + if (doneBlock) { + doneBlock(diskImage, diskData, SDImageCacheTypeDisk); + } } else { - dispatch_async(self.ioQueue, queryDiskBlock); + dispatch_async(self.ioQueue, ^{ + NSData* diskData = queryDiskDataBlock(); + UIImage* diskImage = queryDiskImageBlock(diskData); + @synchronized (operation) { + if (operation.isCancelled) { + return; + } + } + if (doneBlock) { + dispatch_async(dispatch_get_main_queue(), ^{ + doneBlock(diskImage, diskData, SDImageCacheTypeDisk); + }); + } + }); } return operation; diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h b/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h index 48f7b5ca..9d840462 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDWebImageOperation.h" #import "SDWebImageDefine.h" +#import "SDImageCoder.h" /// Image Cache Type typedef NS_ENUM(NSInteger, SDImageCacheType) { @@ -54,6 +55,12 @@ typedef void(^SDImageCacheContainsCompletionBlock)(SDImageCacheType containsCach */ FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSString * _Nonnull cacheKey, SDWebImageOptions options, SDWebImageContext * _Nullable context); +/// Get the decode options from the loading context options and cache key. This is the built-in translate between the web loading part to the decoding part (which does not depens on). +/// @param context The options arg from the input +/// @param options The context arg from the input +/// @param cacheKey The image cache key from the input. Should not be nil +FOUNDATION_EXPORT SDImageCoderOptions * _Nonnull SDGetDecodeOptionsFromContext(SDWebImageContext * _Nullable context, SDWebImageOptions options, NSString * _Nonnull cacheKey); + /** This is the image cache protocol to provide custom image cache for `SDWebImageManager`. Though the best practice to custom image cache, is to write your own class which conform `SDMemoryCache` or `SDDiskCache` protocol for `SDImageCache` class (See more on `SDImageCacheConfig.memoryCacheClass & SDImageCacheConfig.diskCacheClass`). diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m b/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m index 19db161a..8ee8750c 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m @@ -13,8 +13,7 @@ #import "UIImage+Metadata.h" #import "SDInternalMacros.h" -UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSString * _Nonnull cacheKey, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - UIImage *image; +SDImageCoderOptions * _Nonnull SDGetDecodeOptionsFromContext(SDWebImageContext * _Nullable context, SDWebImageOptions options, NSString * _Nonnull cacheKey) { BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); NSNumber *scaleValue = context[SDWebImageContextImageScaleFactor]; CGFloat scale = scaleValue.doubleValue >= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); @@ -38,6 +37,17 @@ mutableCoderOptions[SDImageCoderWebImageContext] = context; SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; + return coderOptions; +} + +UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSString * _Nonnull cacheKey, SDWebImageOptions options, SDWebImageContext * _Nullable context) { + NSCParameterAssert(imageData); + NSCParameterAssert(cacheKey); + UIImage *image; + SDImageCoderOptions *coderOptions = SDGetDecodeOptionsFromContext(context, options, cacheKey); + BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); + CGFloat scale = [coderOptions[SDImageCoderDecodeScaleFactor] doubleValue]; + // Grab the image coder id imageCoder; if ([context[SDWebImageContextImageCoder] conformsToProtocol:@protocol(SDImageCoder)]) { @@ -79,6 +89,8 @@ if (shouldDecode) { image = [SDImageCoderHelper decodedImageWithImage:image]; } + // assign the decode options, to let manager check whether to re-decode if needed + image.sd_decodeOptions = coderOptions; } return image; diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h b/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h index 77b9d779..28e12401 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h @@ -10,6 +10,15 @@ #import "SDWebImageCompat.h" #import "SDImageFrame.h" +typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { + /// automatically choose the solution based on image format, hardware, OS version. This keep balance for compatibility and performance. Default after SDWebImage 5.13.0 + SDImageCoderDecodeSolutionAutomatic, + /// always use CoreGraphics to draw on bitmap context and trigger decode. Best compatibility. Default before SDWebImage 5.13.0 + SDImageCoderDecodeSolutionCoreGraphics, + /// available on iOS/tvOS 15+, use UIKit's new CGImageDecompressor/CMPhoto to decode. Best performance. If failed, will fallback to CoreGraphics as well + SDImageCoderDecodeSolutionUIKit +}; + /** Provide some common helper methods for building the image decoder/encoder. */ @@ -76,6 +85,7 @@ /** Create a scaled CGImage by the provided CGImage and size. This follows The Create Rule and you are response to call release after usage. It will detect whether the image size matching the scale size, if not, stretch the image to the target size. + @note If you need to keep aspect ratio, you can calculate the scale size by using `scaledSizeWithImageSize` first. @param cgImage The CGImage @param size The scale size in pixel. @@ -83,6 +93,16 @@ */ + (CGImageRef _Nullable)CGImageCreateScaled:(_Nonnull CGImageRef)cgImage size:(CGSize)size CF_RETURNS_RETAINED; +/** Scale the image size based on provided scale size, whether or not to preserve aspect ratio, whether or not to scale up. + @note For example, if you implements thumnail decoding, pass `shouldScaleUp` to NO to avoid the calculated size larger than image size. + + @param imageSize The image size (in pixel or point defined by caller) + @param scaleSize The scale size (in pixel or point defined by caller) + @param preserveAspectRatio Whether or not to preserve aspect ratio + @param shouldScaleUp Whether or not to scale up (or scale down only) + */ ++ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp; + /** Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image @param image The image to be decoded @@ -100,6 +120,12 @@ */ + (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes; +/** + Control the default force decode solution. Available solutions in `SDImageCoderDecodeSolution`. + @note Defaults to `SDImageCoderDecodeSolutionAutomatic`, which prefers to use UIKit for JPEG/HEIF, and fallback on CoreGraphics. If you want control on your hand, set the other solution. + */ +@property (class, readwrite) SDImageCoderDecodeSolution defaultDecodeSolution; + /** Control the default limit bytes to scale down largest images. This value must be larger than 4 Bytes (at least 1x1 pixel). Defaults to 60MB on iOS/tvOS, 90MB on macOS, 30MB on watchOS. diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m b/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m index 56a645a9..da30b65a 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m @@ -15,12 +15,65 @@ #import "SDAssociatedObject.h" #import "UIImage+Metadata.h" #import "SDInternalMacros.h" +#import "SDGraphicsImageRenderer.h" +#import "SDInternalMacros.h" #import static inline size_t SDByteAlign(size_t size, size_t alignment) { return ((size + (alignment - 1)) / alignment) * alignment; } +#if SD_UIKIT +static inline UIImage *SDImageDecodeUIKit(UIImage *image) { + // See: https://developer.apple.com/documentation/uikit/uiimage/3750834-imagebypreparingfordisplay + // Need CGImage-based + if (@available(iOS 15, tvOS 15, *)) { + UIImage *decodedImage = [image imageByPreparingForDisplay]; + if (decodedImage) { + SDImageCopyAssociatedObject(image, decodedImage); + decodedImage.sd_isDecoded = YES; + return decodedImage; + } + } + return nil; +} + +static inline UIImage *SDImageDecodeAndScaleDownUIKit(UIImage *image, CGSize destResolution) { + // See: https://developer.apple.com/documentation/uikit/uiimage/3750835-imagebypreparingthumbnailofsize + // Need CGImage-based + if (@available(iOS 15, tvOS 15, *)) { + // Calculate thumbnail point size + CGFloat scale = image.scale ?: 1; + CGSize thumbnailSize = CGSizeMake(destResolution.width / scale, destResolution.height / scale); + UIImage *decodedImage = [image imageByPreparingThumbnailOfSize:thumbnailSize]; + if (decodedImage) { + SDImageCopyAssociatedObject(image, decodedImage); + decodedImage.sd_isDecoded = YES; + return decodedImage; + } + } + return nil; +} + +static inline BOOL SDImageSupportsHardwareHEVCDecoder(void) { + static dispatch_once_t onceToken; + static BOOL supportsHardware = NO; + dispatch_once(&onceToken, ^{ + SEL DeviceInfoSelector = SD_SEL_SPI(deviceInfoForKey:); + NSString *HEVCDecoder8bitSupported = @"N8lZxRgC7lfdRS3dRLn+Ag"; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + if ([UIDevice.currentDevice respondsToSelector:DeviceInfoSelector] && [UIDevice.currentDevice performSelector:DeviceInfoSelector withObject:HEVCDecoder8bitSupported]) { + supportsHardware = YES; + } +#pragma clang diagnostic pop + }); + return supportsHardware; +} +#endif + +static SDImageCoderDecodeSolution kDefaultDecodeSolution = SDImageCoderDecodeSolutionAutomatic; + static const size_t kBytesPerPixel = 4; static const size_t kBitsPerComponent = 8; @@ -57,12 +110,12 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { durations[i] = frames[i].duration * 1000; } NSUInteger const gcd = gcdArray(frameCount, durations); - __block NSUInteger totalDuration = 0; + __block NSTimeInterval totalDuration = 0; NSMutableArray *animatedImages = [NSMutableArray arrayWithCapacity:frameCount]; [frames enumerateObjectsUsingBlock:^(SDImageFrame * _Nonnull frame, NSUInteger idx, BOOL * _Nonnull stop) { UIImage *image = frame.image; NSUInteger duration = frame.duration * 1000; - totalDuration += duration; + totalDuration += frame.duration; NSUInteger repeatCount; if (gcd) { repeatCount = duration / gcd; @@ -74,7 +127,7 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { } }]; - animatedImage = [UIImage animatedImageWithImages:animatedImages duration:totalDuration / 1000.f]; + animatedImage = [UIImage animatedImageWithImages:animatedImages duration:totalDuration]; #else @@ -188,24 +241,10 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { } + (CGColorSpaceRef)colorSpaceGetDeviceRGB { -#if SD_MAC - CGColorSpaceRef screenColorSpace = NSScreen.mainScreen.colorSpace.CGColorSpace; - if (screenColorSpace) { - return screenColorSpace; - } -#endif static CGColorSpaceRef colorSpace; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ -#if SD_UIKIT - if (@available(iOS 9.0, tvOS 9.0, *)) { - colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); - } else { - colorSpace = CGColorSpaceCreateDeviceRGB(); - } -#else - colorSpace = CGColorSpaceCreateDeviceRGB(); -#endif + colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); }); return colorSpace; } @@ -252,11 +291,18 @@ + (CGImageRef)CGImageCreateDecoded:(CGImageRef)cgImage orientation:(CGImagePrope } BOOL hasAlpha = [self CGImageContainsAlpha:cgImage]; - // iOS prefer BGRA8888 (premultiplied) or BGRX8888 bitmapInfo for screen rendering, which is same as `UIGraphicsBeginImageContext()` or `- [CALayer drawInContext:]` - // Though you can use any supported bitmapInfo (see: https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB ) and let Core Graphics reorder it when you call `CGContextDrawImage` - // But since our build-in coders use this bitmapInfo, this can have a little performance benefit - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; + // kCGImageAlphaNone is not supported in CGBitmapContextCreate. + // Check #3330 for more detail about why this bitmap is choosen. + CGBitmapInfo bitmapInfo; + if (hasAlpha) { + // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 + // BGRA8888 + bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; + } else { + // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 + // RGB888 + bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; + } CGContextRef context = CGBitmapContextCreate(NULL, newWidth, newHeight, 8, 0, [self colorSpaceGetDeviceRGB], bitmapInfo); if (!context) { return NULL; @@ -289,9 +335,18 @@ + (CGImageRef)CGImageCreateScaled:(CGImageRef)cgImage size:(CGSize)size { if (output_buffer.data) free(output_buffer.data); }; BOOL hasAlpha = [self CGImageContainsAlpha:cgImage]; - // iOS display alpha info (BGRA8888/BGRX8888) - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; + // kCGImageAlphaNone is not supported in CGBitmapContextCreate. + // Check #3330 for more detail about why this bitmap is choosen. + CGBitmapInfo bitmapInfo; + if (hasAlpha) { + // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 + // BGRA8888 + bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; + } else { + // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 + // RGB888 + bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; + } vImage_CGImageFormat format = (vImage_CGImageFormat) { .bitsPerComponent = 8, .bitsPerPixel = 32, @@ -299,7 +354,7 @@ + (CGImageRef)CGImageCreateScaled:(CGImageRef)cgImage size:(CGSize)size { .bitmapInfo = bitmapInfo, .version = 0, .decode = NULL, - .renderingIntent = kCGRenderingIntentDefault, + .renderingIntent = CGImageGetRenderingIntent(cgImage) }; vImage_Error a_ret = vImageBuffer_InitWithCGImage(&input_buffer, &format, NULL, cgImage, kvImageNoFlags); @@ -322,21 +377,83 @@ + (CGImageRef)CGImageCreateScaled:(CGImageRef)cgImage size:(CGSize)size { return outputImage; } ++ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp { + CGFloat width = imageSize.width; + CGFloat height = imageSize.height; + CGFloat resultWidth; + CGFloat resultHeight; + + if (width <= 0 || height <= 0 || scaleSize.width <= 0 || scaleSize.height <= 0) { + // Protect + resultWidth = width; + resultHeight = height; + } else { + // Scale to fit + if (preserveAspectRatio) { + CGFloat pixelRatio = width / height; + CGFloat scaleRatio = scaleSize.width / scaleSize.height; + if (pixelRatio > scaleRatio) { + resultWidth = scaleSize.width; + resultHeight = ceil(scaleSize.width / pixelRatio); + } else { + resultHeight = scaleSize.height; + resultWidth = ceil(scaleSize.height * pixelRatio); + } + } else { + // Stretch + resultWidth = scaleSize.width; + resultHeight = scaleSize.height; + } + if (!shouldScaleUp) { + // Scale down only + resultWidth = MIN(width, resultWidth); + resultHeight = MIN(height, resultHeight); + } + } + + return CGSizeMake(resultWidth, resultHeight); +} + + (UIImage *)decodedImageWithImage:(UIImage *)image { if (![self shouldDecodeImage:image]) { return image; } - CGImageRef imageRef = [self CGImageCreateDecoded:image.CGImage]; + UIImage *decodedImage; +#if SD_UIKIT + SDImageCoderDecodeSolution decodeSolution = self.defaultDecodeSolution; + if (decodeSolution == SDImageCoderDecodeSolutionAutomatic) { + // See #3365, CMPhoto iOS 15 only supports JPEG/HEIF format, or it will print an error log :( + SDImageFormat format = image.sd_imageFormat; + if ((format == SDImageFormatHEIC || format == SDImageFormatHEIF) && SDImageSupportsHardwareHEVCDecoder()) { + decodedImage = SDImageDecodeUIKit(image); + } else if (format == SDImageFormatJPEG) { + decodedImage = SDImageDecodeUIKit(image); + } + } else if (decodeSolution == SDImageCoderDecodeSolutionUIKit) { + // Arbitrarily call CMPhoto + decodedImage = SDImageDecodeUIKit(image); + } + if (decodedImage) { + return decodedImage; + } +#endif + + CGImageRef imageRef = image.CGImage; if (!imageRef) { return image; } -#if SD_MAC - UIImage *decodedImage = [[UIImage alloc] initWithCGImage:imageRef scale:image.scale orientation:kCGImagePropertyOrientationUp]; -#else - UIImage *decodedImage = [[UIImage alloc] initWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation]; -#endif - CGImageRelease(imageRef); + BOOL hasAlpha = [self CGImageContainsAlpha:imageRef]; + // Prefer to use new Image Renderer to re-draw image, instead of low-level CGBitmapContext and CGContextDrawImage + // This can keep both OS compatible and don't fight with Apple's performance optimization + SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; + format.opaque = !hasAlpha; + format.scale = image.scale; + CGSize imageSize = image.size; + SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:imageSize format:format]; + decodedImage = [renderer imageWithActions:^(CGContextRef _Nonnull context) { + [image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; + }]; SDImageCopyAssociatedObject(image, decodedImage); decodedImage.sd_isDecoded = YES; return decodedImage; @@ -347,53 +464,79 @@ + (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image limitBytes:(NSU return image; } - if (![self shouldScaleDownImage:image limitBytes:bytes]) { - return [self decodedImageWithImage:image]; - } - CGFloat destTotalPixels; CGFloat tileTotalPixels; if (bytes == 0) { - bytes = kDestImageLimitBytes; + bytes = [self defaultScaleDownLimitBytes]; } + bytes = MAX(bytes, kBytesPerPixel); destTotalPixels = bytes / kBytesPerPixel; tileTotalPixels = destTotalPixels / 3; - CGContextRef destContext; + + CGImageRef sourceImageRef = image.CGImage; + CGSize sourceResolution = CGSizeZero; + sourceResolution.width = CGImageGetWidth(sourceImageRef); + sourceResolution.height = CGImageGetHeight(sourceImageRef); + + if (![self shouldScaleDownImagePixelSize:sourceResolution limitBytes:bytes]) { + return [self decodedImageWithImage:image]; + } + + CGFloat sourceTotalPixels = sourceResolution.width * sourceResolution.height; + // Determine the scale ratio to apply to the input image + // that results in an output image of the defined size. + // see kDestImageSizeMB, and how it relates to destTotalPixels. + CGFloat imageScale = sqrt(destTotalPixels / sourceTotalPixels); + CGSize destResolution = CGSizeZero; + destResolution.width = MAX(1, (int)(sourceResolution.width * imageScale)); + destResolution.height = MAX(1, (int)(sourceResolution.height * imageScale)); + + UIImage *decodedImage; +#if SD_UIKIT + SDImageCoderDecodeSolution decodeSolution = self.defaultDecodeSolution; + if (decodeSolution == SDImageCoderDecodeSolutionAutomatic) { + // See #3365, CMPhoto iOS 15 only supports JPEG/HEIF format, or it will print an error log :( + SDImageFormat format = image.sd_imageFormat; + if ((format == SDImageFormatHEIC || format == SDImageFormatHEIF) && SDImageSupportsHardwareHEVCDecoder()) { + decodedImage = SDImageDecodeAndScaleDownUIKit(image, destResolution); + } else if (format == SDImageFormatJPEG) { + decodedImage = SDImageDecodeAndScaleDownUIKit(image, destResolution); + } + } else if (decodeSolution == SDImageCoderDecodeSolutionUIKit) { + // Arbitrarily call CMPhoto + decodedImage = SDImageDecodeAndScaleDownUIKit(image, destResolution); + } + if (decodedImage) { + return decodedImage; + } +#endif // autorelease the bitmap context and all vars to help system to free memory when there are memory warning. // on iOS7, do not forget to call [[SDImageCache sharedImageCache] clearMemory]; @autoreleasepool { - CGImageRef sourceImageRef = image.CGImage; - - CGSize sourceResolution = CGSizeZero; - sourceResolution.width = CGImageGetWidth(sourceImageRef); - sourceResolution.height = CGImageGetHeight(sourceImageRef); - CGFloat sourceTotalPixels = sourceResolution.width * sourceResolution.height; - // Determine the scale ratio to apply to the input image - // that results in an output image of the defined size. - // see kDestImageSizeMB, and how it relates to destTotalPixels. - CGFloat imageScale = sqrt(destTotalPixels / sourceTotalPixels); - CGSize destResolution = CGSizeZero; - destResolution.width = MAX(1, (int)(sourceResolution.width * imageScale)); - destResolution.height = MAX(1, (int)(sourceResolution.height * imageScale)); - // device color space CGColorSpaceRef colorspaceRef = [self colorSpaceGetDeviceRGB]; BOOL hasAlpha = [self CGImageContainsAlpha:sourceImageRef]; - // iOS display alpha info (BGRA8888/BGRX8888) - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; // kCGImageAlphaNone is not supported in CGBitmapContextCreate. - // Since the original image here has no alpha info, use kCGImageAlphaNoneSkipFirst - // to create bitmap graphics contexts without alpha info. - destContext = CGBitmapContextCreate(NULL, - destResolution.width, - destResolution.height, - kBitsPerComponent, - 0, - colorspaceRef, - bitmapInfo); + // Check #3330 for more detail about why this bitmap is choosen. + CGBitmapInfo bitmapInfo; + if (hasAlpha) { + // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 + // BGRA8888 + bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; + } else { + // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 + // RGB888 + bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; + } + CGContextRef destContext = CGBitmapContextCreate(NULL, + destResolution.width, + destResolution.height, + kBitsPerComponent, + 0, + colorspaceRef, + bitmapInfo); if (destContext == NULL) { return image; @@ -448,7 +591,7 @@ + (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image limitBytes:(NSU float dify = destTile.size.height; destTile.size.height = CGImageGetHeight( sourceTileImageRef ) * imageScale; dify -= destTile.size.height; - destTile.origin.y += dify; + destTile.origin.y = MIN(0, destTile.origin.y + dify); } CGContextDrawImage( destContext, destTile, sourceTileImageRef ); CGImageRelease( sourceTileImageRef ); @@ -461,20 +604,25 @@ + (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image limitBytes:(NSU return image; } #if SD_MAC - UIImage *destImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:kCGImagePropertyOrientationUp]; + decodedImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:kCGImagePropertyOrientationUp]; #else - UIImage *destImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:image.imageOrientation]; + decodedImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:image.imageOrientation]; #endif CGImageRelease(destImageRef); - if (destImage == nil) { - return image; - } - SDImageCopyAssociatedObject(image, destImage); - destImage.sd_isDecoded = YES; - return destImage; + SDImageCopyAssociatedObject(image, decodedImage); + decodedImage.sd_isDecoded = YES; + return decodedImage; } } ++ (SDImageCoderDecodeSolution)defaultDecodeSolution { + return kDefaultDecodeSolution; +} + ++ (void)setDefaultDecodeSolution:(SDImageCoderDecodeSolution)defaultDecodeSolution { + kDefaultDecodeSolution = defaultDecodeSolution; +} + + (NSUInteger)defaultScaleDownLimitBytes { return kDestImageLimitBytes; } @@ -578,14 +726,10 @@ + (BOOL)shouldDecodeImage:(nullable UIImage *)image { return YES; } -+ (BOOL)shouldScaleDownImage:(nonnull UIImage *)image limitBytes:(NSUInteger)bytes { ++ (BOOL)shouldScaleDownImagePixelSize:(CGSize)sourceResolution limitBytes:(NSUInteger)bytes { BOOL shouldScaleDown = YES; - CGImageRef sourceImageRef = image.CGImage; - CGSize sourceResolution = CGSizeZero; - sourceResolution.width = CGImageGetWidth(sourceImageRef); - sourceResolution.height = CGImageGetHeight(sourceImageRef); - float sourceTotalPixels = sourceResolution.width * sourceResolution.height; + CGFloat sourceTotalPixels = sourceResolution.width * sourceResolution.height; if (sourceTotalPixels <= 0) { return NO; } @@ -595,7 +739,7 @@ + (BOOL)shouldScaleDownImage:(nonnull UIImage *)image limitBytes:(NSUInteger)byt } bytes = MAX(bytes, kBytesPerPixel); destTotalPixels = bytes / kBytesPerPixel; - float imageScale = destTotalPixels / sourceTotalPixels; + CGFloat imageScale = destTotalPixels / sourceTotalPixels; if (imageScale < 1) { shouldScaleDown = YES; } else { diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m b/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m index e7c4ed45..d1a1ca65 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m @@ -8,6 +8,7 @@ #import "SDImageGraphics.h" #import "NSImage+Compatibility.h" +#import "SDImageCoderHelper.h" #import "objc/runtime.h" #if SD_MAC @@ -16,17 +17,32 @@ static CGContextRef SDCGContextCreateBitmapContext(CGSize size, BOOL opaque, CGFloat scale) { if (scale == 0) { // Match `UIGraphicsBeginImageContextWithOptions`, reset to the scale factor of the device’s main screen if scale is 0. - scale = [NSScreen mainScreen].backingScaleFactor; + NSScreen *mainScreen = nil; + if (@available(macOS 10.12, *)) { + mainScreen = [NSScreen mainScreen]; + } else { + mainScreen = [NSScreen screens].firstObject; + } + scale = mainScreen.backingScaleFactor ?: 1.0f; } size_t width = ceil(size.width * scale); size_t height = ceil(size.height * scale); if (width < 1 || height < 1) return NULL; - //pre-multiplied BGRA for non-opaque, BGRX for opaque, 8-bits per component, as Apple's doc - CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); - CGImageAlphaInfo alphaInfo = kCGBitmapByteOrder32Host | (opaque ? kCGImageAlphaNoneSkipFirst : kCGImageAlphaPremultipliedFirst); - CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, space, kCGBitmapByteOrderDefault | alphaInfo); - CGColorSpaceRelease(space); + CGColorSpaceRef space = [SDImageCoderHelper colorSpaceGetDeviceRGB]; + // kCGImageAlphaNone is not supported in CGBitmapContextCreate. + // Check #3330 for more detail about why this bitmap is choosen. + CGBitmapInfo bitmapInfo; + if (!opaque) { + // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 + // BGRA8888 + bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; + } else { + // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 + // RGB888 + bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; + } + CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, space, bitmapInfo); if (!context) { return NULL; } @@ -96,7 +112,13 @@ void SDGraphicsEndImageContext(void) { } if (!scale) { // reset to the scale factor of the device’s main screen if scale is 0. - scale = [NSScreen mainScreen].backingScaleFactor; + NSScreen *mainScreen = nil; + if (@available(macOS 10.12, *)) { + mainScreen = [NSScreen mainScreen]; + } else { + mainScreen = [NSScreen screens].firstObject; + } + scale = mainScreen.backingScaleFactor ?: 1.0f; } NSImage *image = [[NSImage alloc] initWithCGImage:imageRef scale:scale orientation:kCGImagePropertyOrientationUp]; CGImageRelease(imageRef); diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m b/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m index a7e08c19..922d0186 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m @@ -197,13 +197,6 @@ + (UIImage *)createFrameAtIndex:(NSUInteger)index source:(CGImageSourceRef)sourc if (!exifOrientation) { exifOrientation = kCGImagePropertyOrientationUp; } - - CFStringRef uttype = CGImageSourceGetType(source); - // Check vector format - BOOL isVector = NO; - if ([NSData sd_imageFormatFromUTType:uttype] == SDImageFormatPDF) { - isVector = YES; - } NSMutableDictionary *decodingOptions; if (options) { @@ -214,22 +207,6 @@ + (UIImage *)createFrameAtIndex:(NSUInteger)index source:(CGImageSourceRef)sourc CGImageRef imageRef; BOOL createFullImage = thumbnailSize.width == 0 || thumbnailSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= thumbnailSize.width && pixelHeight <= thumbnailSize.height); if (createFullImage) { - if (isVector) { - if (thumbnailSize.width == 0 || thumbnailSize.height == 0) { - // Provide the default pixel count for vector images, simply just use the screen size -#if SD_WATCH - thumbnailSize = WKInterfaceDevice.currentDevice.screenBounds.size; -#elif SD_UIKIT - thumbnailSize = UIScreen.mainScreen.bounds.size; -#elif SD_MAC - thumbnailSize = NSScreen.mainScreen.frame.size; -#endif - } - CGFloat maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); - NSUInteger DPIPerPixel = 2; - NSUInteger rasterizationDPI = maxPixelSize * DPIPerPixel; - decodingOptions[kSDCGImageSourceRasterizationDPI] = @(rasterizationDPI); - } imageRef = CGImageSourceCreateImageAtIndex(source, index, (__bridge CFDictionaryRef)[decodingOptions copy]); } else { decodingOptions[(__bridge NSString *)kCGImageSourceCreateThumbnailWithTransform] = @(preserveAspectRatio); @@ -238,9 +215,9 @@ + (UIImage *)createFrameAtIndex:(NSUInteger)index source:(CGImageSourceRef)sourc CGFloat pixelRatio = pixelWidth / pixelHeight; CGFloat thumbnailRatio = thumbnailSize.width / thumbnailSize.height; if (pixelRatio > thumbnailRatio) { - maxPixelSize = thumbnailSize.width; + maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.width / pixelRatio); } else { - maxPixelSize = thumbnailSize.height; + maxPixelSize = MAX(thumbnailSize.height, thumbnailSize.height * pixelRatio); } } else { maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); @@ -311,11 +288,14 @@ - (UIImage *)decodedImageWithData:(NSData *)data options:(nullable SDImageCoderO // Which decode frames in time and reduce memory usage if (thumbnailSize.width == 0 || thumbnailSize.height == 0) { SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; - NSSize size = NSMakeSize(imageRep.pixelsWide / scale, imageRep.pixelsHigh / scale); - imageRep.size = size; - NSImage *animatedImage = [[NSImage alloc] initWithSize:size]; - [animatedImage addRepresentation:imageRep]; - return animatedImage; + if (imageRep) { + NSSize size = NSMakeSize(imageRep.pixelsWide / scale, imageRep.pixelsHigh / scale); + imageRep.size = size; + NSImage *animatedImage = [[NSImage alloc] initWithSize:size]; + [animatedImage addRepresentation:imageRep]; + animatedImage.sd_imageFormat = self.class.imageFormat; + return animatedImage; + } } #endif @@ -499,13 +479,15 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format o CGFloat pixelWidth = (CGFloat)CGImageGetWidth(imageRef); CGFloat pixelHeight = (CGFloat)CGImageGetHeight(imageRef); CGFloat finalPixelSize = 0; - if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && pixelWidth > maxPixelSize.width && pixelHeight > maxPixelSize.height) { + BOOL encodeFullImage = maxPixelSize.width == 0 || maxPixelSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= maxPixelSize.width && pixelHeight <= maxPixelSize.height); + if (!encodeFullImage) { + // Thumbnail Encoding CGFloat pixelRatio = pixelWidth / pixelHeight; CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; if (pixelRatio > maxPixelSizeRatio) { - finalPixelSize = maxPixelSize.width; + finalPixelSize = MAX(maxPixelSize.width, maxPixelSize.width / pixelRatio); } else { - finalPixelSize = maxPixelSize.height; + finalPixelSize = MAX(maxPixelSize.height, maxPixelSize.height * pixelRatio); } properties[(__bridge NSString *)kCGImageDestinationImageMaxPixelSize] = @(finalPixelSize); } diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m b/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m index 8e1199f4..42f70846 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m @@ -13,6 +13,8 @@ #import "UIImage+Metadata.h" #import "SDImageIOAnimatedCoderInternal.h" +// Specify DPI for vector format in CGImageSource, like PDF +static NSString * kSDCGImageSourceRasterizationDPI = @"kCGImageSourceRasterizationDPI"; // Specify File Size for lossy format encoding, like JPEG static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestinationRequestedFileSize"; @@ -52,6 +54,31 @@ + (instancetype)sharedCoder { return coder; } +#pragma mark - Utils ++ (CGRect)boxRectFromPDFFData:(nonnull NSData *)data { + CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); + if (!provider) { + return CGRectZero; + } + CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider); + CGDataProviderRelease(provider); + if (!document) { + return CGRectZero; + } + + // `CGPDFDocumentGetPage` page number is 1-indexed. + CGPDFPageRef page = CGPDFDocumentGetPage(document, 1); + if (!page) { + CGPDFDocumentRelease(document); + return CGRectZero; + } + + CGRect boxRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); + CGPDFDocumentRelease(document); + + return boxRect; +} + #pragma mark - Decode - (BOOL)canDecodeFromData:(nullable NSData *)data { return YES; @@ -88,13 +115,39 @@ - (UIImage *)decodedImageWithData:(NSData *)data options:(nullable SDImageCoderO return nil; } - UIImage *image = [SDImageIOAnimatedCoder createFrameAtIndex:0 source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:nil]; + CFStringRef uttype = CGImageSourceGetType(source); + SDImageFormat imageFormat = [NSData sd_imageFormatFromUTType:uttype]; + // Check vector format + NSDictionary *decodingOptions = nil; + if (imageFormat == SDImageFormatPDF) { + // Use 72 DPI (1:1 inch to pixel) by default, matching Apple's PDFKit behavior + NSUInteger rasterizationDPI = 72; + CGFloat maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); + if (maxPixelSize > 0) { + // Calculate DPI based on PDF box and pixel size + CGRect boxRect = [self.class boxRectFromPDFFData:data]; + CGFloat maxBoxSize = MAX(boxRect.size.width, boxRect.size.height); + if (maxBoxSize > 0) { + rasterizationDPI = rasterizationDPI * (maxPixelSize / maxBoxSize); + } + } + decodingOptions = @{ + // This option will cause ImageIO return the pixel size from `CGImageSourceCopyProperties` + // If not provided, it always return 0 size + kSDCGImageSourceRasterizationDPI : @(rasterizationDPI), + }; + // Already calculated DPI, avoid re-calculation based on thumbnail information + preserveAspectRatio = YES; + thumbnailSize = CGSizeZero; + } + + UIImage *image = [SDImageIOAnimatedCoder createFrameAtIndex:0 source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:decodingOptions]; CFRelease(source); if (!image) { return nil; } - image.sd_imageFormat = [NSData sd_imageFormatForImageData:data]; + image.sd_imageFormat = imageFormat; return image; } @@ -252,14 +305,16 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format o } CGFloat pixelWidth = (CGFloat)CGImageGetWidth(imageRef); CGFloat pixelHeight = (CGFloat)CGImageGetHeight(imageRef); - if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && pixelWidth > maxPixelSize.width && pixelHeight > maxPixelSize.height) { + CGFloat finalPixelSize = 0; + BOOL encodeFullImage = maxPixelSize.width == 0 || maxPixelSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= maxPixelSize.width && pixelHeight <= maxPixelSize.height); + if (!encodeFullImage) { + // Thumbnail Encoding CGFloat pixelRatio = pixelWidth / pixelHeight; CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; - CGFloat finalPixelSize; if (pixelRatio > maxPixelSizeRatio) { - finalPixelSize = maxPixelSize.width; + finalPixelSize = MAX(maxPixelSize.width, maxPixelSize.width / pixelRatio); } else { - finalPixelSize = maxPixelSize.height; + finalPixelSize = MAX(maxPixelSize.height, maxPixelSize.height * pixelRatio); } properties[(__bridge NSString *)kCGImageDestinationImageMaxPixelSize] = @(finalPixelSize); } diff --git a/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m b/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m index d6b95948..77d30737 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m @@ -13,6 +13,7 @@ #import "SDAnimatedImage.h" #import "UIImage+Metadata.h" #import "SDInternalMacros.h" +#import "SDImageCacheDefine.h" #import "objc/runtime.h" SDWebImageContextOption const SDWebImageContextLoaderCachedImage = @"loaderCachedImage"; @@ -41,28 +42,9 @@ void SDImageLoaderSetProgressiveCoder(id operation, id= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; - NSValue *thumbnailSizeValue; - BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); - if (shouldScaleDown) { - CGFloat thumbnailPixels = SDImageCoderHelper.defaultScaleDownLimitBytes / 4; - CGFloat dimension = ceil(sqrt(thumbnailPixels)); - thumbnailSizeValue = @(CGSizeMake(dimension, dimension)); - } - if (context[SDWebImageContextImageThumbnailPixelSize]) { - thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; - } - - SDImageCoderMutableOptions *mutableCoderOptions = [NSMutableDictionary dictionaryWithCapacity:2]; - mutableCoderOptions[SDImageCoderDecodeFirstFrameOnly] = @(decodeFirstFrame); - mutableCoderOptions[SDImageCoderDecodeScaleFactor] = @(scale); - mutableCoderOptions[SDImageCoderDecodePreserveAspectRatio] = preserveAspectRatioValue; - mutableCoderOptions[SDImageCoderDecodeThumbnailPixelSize] = thumbnailSizeValue; - mutableCoderOptions[SDImageCoderWebImageContext] = context; - SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; + CGFloat scale = [coderOptions[SDImageCoderDecodeScaleFactor] doubleValue]; // Grab the image coder id imageCoder; @@ -106,6 +88,8 @@ void SDImageLoaderSetProgressiveCoder(id operation, id operation, id)loader { #pragma mark - SDImageLoader - (BOOL)canRequestImageForURL:(nullable NSURL *)url { + return [self canRequestImageForURL:url options:0 context:nil]; +} + +- (BOOL)canRequestImageForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { NSArray> *loaders = self.loaders; for (id loader in loaders.reverseObjectEnumerator) { - if ([loader canRequestImageForURL:url]) { - return YES; + if ([loader respondsToSelector:@selector(canRequestImageForURL:options:context:)]) { + if ([loader canRequestImageForURL:url options:options context:context]) { + return YES; + } + } else { + if ([loader canRequestImageForURL:url]) { + return YES; + } } } return NO; diff --git a/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h b/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h index 83a2d186..3fb0976a 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h +++ b/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h @@ -105,6 +105,8 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { /** * By default, placeholder images are loaded while the image is loading. This flag will delay the loading * of the placeholder image until after the image has finished loading. + * @note This is used to treate placeholder as an **Error Placeholder** but not **Loading Placeholder** by defaults. if the image loading is cancelled or error, the placeholder will be always set. + * @note Therefore, if you want both **Error Placeholder** and **Loading Placeholder** exist, use `SDWebImageAvoidAutoSetImage` to manually set the two placeholders and final loaded image by your hand depends on loading result. */ SDWebImageDelayPlaceholder = 1 << 8, diff --git a/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m b/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m index 845730f0..aee8ca4d 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m @@ -28,7 +28,13 @@ inline CGFloat SDImageScaleFactorForKey(NSString * _Nullable key) { #elif SD_UIKIT if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) #elif SD_MAC - if ([[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) + NSScreen *mainScreen = nil; + if (@available(macOS 10.12, *)) { + mainScreen = [NSScreen mainScreen]; + } else { + mainScreen = [NSScreen screens].firstObject; + } + if ([mainScreen respondsToSelector:@selector(backingScaleFactor)]) #endif { // a@2x.png -> 8 diff --git a/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m b/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m index 446c36db..6df03197 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m @@ -423,7 +423,7 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)data // Progressive decoding Only decode partial image, full image in `URLSession:task:didCompleteWithError:` if (supportProgressive && !finished) { // Get the image data - NSData *imageData = [self.imageData copy]; + NSData *imageData = self.imageData; // keep maximum one progressive decode process during download if (self.coderQueue.operationCount == 0) { diff --git a/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m b/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m index 6d4a8ee3..b45a08a4 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m @@ -12,6 +12,7 @@ #if SD_MAC #import +#import #endif #pragma mark - Activity Indicator diff --git a/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m b/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m index b434d783..44f5838c 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m @@ -112,6 +112,26 @@ - (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url { return key; } +- (nullable NSString *)originalCacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context { + if (!url) { + return @""; + } + + NSString *key; + // Cache Key Filter + id cacheKeyFilter = self.cacheKeyFilter; + if (context[SDWebImageContextCacheKeyFilter]) { + cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; + } + if (cacheKeyFilter) { + key = [cacheKeyFilter cacheKeyForURL:url]; + } else { + key = url.absoluteString; + } + + return key; +} + - (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context { if (!url) { return @""; @@ -278,10 +298,14 @@ - (void)callCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)oper [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during querying the cache"}] url:url]; [self safelyRemoveOperationFromRunning:operation]; return; - } else if (context[SDWebImageContextImageTransformer] && !cachedImage) { - // Have a chance to query original cache instead of downloading - [self callOriginalCacheProcessForOperation:operation url:url options:options context:context progress:progressBlock completed:completedBlock]; - return; + } else if (!cachedImage) { + BOOL mayInOriginalCache = context[SDWebImageContextImageTransformer] || context[SDWebImageContextImageThumbnailPixelSize]; + // Have a chance to query original cache instead of downloading, then applying transform + // Thumbnail decoding is done inside SDImageCache's decoding part, which does not need post processing for transform + if (mayInOriginalCache) { + [self callOriginalCacheProcessForOperation:operation url:url options:options context:context progress:progressBlock completed:completedBlock]; + return; + } } // Continue download process @@ -321,10 +345,8 @@ - (void)callOriginalCacheProcessForOperation:(nonnull SDWebImageCombinedOperatio // Check whether we should query original cache BOOL shouldQueryOriginalCache = (originalQueryCacheType != SDImageCacheTypeNone); if (shouldQueryOriginalCache) { - // Disable transformer for original cache key generation - SDWebImageMutableContext *tempContext = [context mutableCopy]; - tempContext[SDWebImageContextImageTransformer] = [NSNull null]; - NSString *key = [self cacheKeyForURL:url context:tempContext]; + // Get original cache key generation without transformer/thumbnail + NSString *key = [self originalCacheKeyForURL:url context:context]; @weakify(operation); operation.cacheOperation = [imageCache queryImageForKey:key options:options context:context cacheType:originalQueryCacheType completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) { @strongify(operation); @@ -333,20 +355,20 @@ - (void)callOriginalCacheProcessForOperation:(nonnull SDWebImageCombinedOperatio [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during querying the cache"}] url:url]; [self safelyRemoveOperationFromRunning:operation]; return; - } else if (context[SDWebImageContextImageTransformer] && !cachedImage) { + } else if (!cachedImage) { // Original image cache miss. Continue download process - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:originalQueryCacheType progress:progressBlock completed:completedBlock]; + [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:SDImageCacheTypeNone progress:progressBlock completed:completedBlock]; return; } // Use the store cache process instead of downloading, and ignore .refreshCached option for now - [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:cachedImage downloadedData:cachedData finished:YES progress:progressBlock completed:completedBlock]; + [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:cachedImage downloadedData:cachedData cacheType:cacheType finished:YES completed:completedBlock]; [self safelyRemoveOperationFromRunning:operation]; }]; } else { // Continue download process - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:originalQueryCacheType progress:progressBlock completed:completedBlock]; + [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:SDImageCacheTypeNone progress:progressBlock completed:completedBlock]; } } @@ -420,7 +442,7 @@ - (void)callDownloadProcessForOperation:(nonnull SDWebImageCombinedOperation *)o SD_UNLOCK(self->_failedURLsLock); } // Continue store cache process - [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:downloadedImage downloadedData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; + [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:downloadedImage downloadedData:downloadedData cacheType:SDImageCacheTypeNone finished:finished completed:completedBlock]; } if (finished) { @@ -444,8 +466,8 @@ - (void)callStoreCacheProcessForOperation:(nonnull SDWebImageCombinedOperation * context:(SDWebImageContext *)context downloadedImage:(nullable UIImage *)downloadedImage downloadedData:(nullable NSData *)downloadedData + cacheType:(SDImageCacheType)cacheType finished:(BOOL)finished - progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDInternalCompletionBlock)completedBlock { // Grab the image cache to use, choose standalone original cache firstly id imageCache; @@ -459,6 +481,7 @@ - (void)callStoreCacheProcessForOperation:(nonnull SDWebImageCombinedOperation * imageCache = self.imageCache; } } + BOOL waitStoreCache = SD_OPTIONS_CONTAINS(options, SDWebImageWaitStoreCache); // the target image store cache type SDImageCacheType storeCacheType = SDImageCacheTypeAll; if (context[SDWebImageContextStoreCacheType]) { @@ -469,44 +492,53 @@ - (void)callStoreCacheProcessForOperation:(nonnull SDWebImageCombinedOperation * if (context[SDWebImageContextOriginalStoreCacheType]) { originalStoreCacheType = [context[SDWebImageContextOriginalStoreCacheType] integerValue]; } - // Disable transformer for original cache key generation - SDWebImageMutableContext *tempContext = [context mutableCopy]; - tempContext[SDWebImageContextImageTransformer] = [NSNull null]; - NSString *key = [self cacheKeyForURL:url context:tempContext]; id transformer = context[SDWebImageContextImageTransformer]; if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { transformer = nil; } id cacheSerializer = context[SDWebImageContextCacheSerializer]; + // transformer check BOOL shouldTransformImage = downloadedImage && transformer; shouldTransformImage = shouldTransformImage && (!downloadedImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)); shouldTransformImage = shouldTransformImage && (!downloadedImage.sd_isVector || (options & SDWebImageTransformVectorImage)); - BOOL shouldCacheOriginal = downloadedImage && finished; + // thumbnail check + BOOL shouldThumbnailImage = context[SDWebImageContextImageThumbnailPixelSize] != nil || downloadedImage.sd_decodeOptions[SDImageCoderDecodeThumbnailPixelSize] != nil; + + BOOL shouldCacheOriginal = downloadedImage && finished && cacheType == SDImageCacheTypeNone; // if available, store original image to cache if (shouldCacheOriginal) { + // Get original cache key generation without transformer/thumbnail + NSString *key = [self originalCacheKeyForURL:url context:context]; // normally use the store cache type, but if target image is transformed, use original store cache type instead - SDImageCacheType targetStoreCacheType = shouldTransformImage ? originalStoreCacheType : storeCacheType; - if (cacheSerializer && (targetStoreCacheType == SDImageCacheTypeDisk || targetStoreCacheType == SDImageCacheTypeAll)) { + SDImageCacheType targetStoreCacheType = (shouldTransformImage || shouldThumbnailImage) ? originalStoreCacheType : storeCacheType; + UIImage *fullSizeImage = downloadedImage; + if (shouldThumbnailImage) { + // Thumbnail decoding does not keep original image + // Here we only store the original data to disk for original cache key + // Store thumbnail image to memory for thumbnail cache key later in `storeTransformCacheProcess` + fullSizeImage = nil; + } + if (fullSizeImage && cacheSerializer && (targetStoreCacheType == SDImageCacheTypeDisk || targetStoreCacheType == SDImageCacheTypeAll)) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ @autoreleasepool { - NSData *cacheData = [cacheSerializer cacheDataWithImage:downloadedImage originalData:downloadedData imageURL:url]; - [self storeImage:downloadedImage imageData:cacheData forKey:key imageCache:imageCache cacheType:targetStoreCacheType options:options context:context completion:^{ + NSData *cacheData = [cacheSerializer cacheDataWithImage:fullSizeImage originalData:downloadedData imageURL:url]; + [self storeImage:fullSizeImage imageData:cacheData forKey:key imageCache:imageCache cacheType:targetStoreCacheType waitStoreCache:waitStoreCache completion:^{ // Continue transform process - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; + [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData cacheType:cacheType finished:finished completed:completedBlock]; }]; } }); } else { - [self storeImage:downloadedImage imageData:downloadedData forKey:key imageCache:imageCache cacheType:targetStoreCacheType options:options context:context completion:^{ + [self storeImage:fullSizeImage imageData:downloadedData forKey:key imageCache:imageCache cacheType:targetStoreCacheType waitStoreCache:waitStoreCache completion:^{ // Continue transform process - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; + [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData cacheType:cacheType finished:finished completed:completedBlock]; }]; } } else { // Continue transform process - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; + [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData cacheType:cacheType finished:finished completed:completedBlock]; } } @@ -517,56 +549,128 @@ - (void)callTransformProcessForOperation:(nonnull SDWebImageCombinedOperation *) context:(SDWebImageContext *)context originalImage:(nullable UIImage *)originalImage originalData:(nullable NSData *)originalData + cacheType:(SDImageCacheType)cacheType finished:(BOOL)finished - progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDInternalCompletionBlock)completedBlock { - // Grab the image cache to use - id imageCache; - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextImageCache]; - } else { - imageCache = self.imageCache; - } - // the target image store cache type - SDImageCacheType storeCacheType = SDImageCacheTypeAll; - if (context[SDWebImageContextStoreCacheType]) { - storeCacheType = [context[SDWebImageContextStoreCacheType] integerValue]; - } - // transformed cache key - NSString *key = [self cacheKeyForURL:url context:context]; id transformer = context[SDWebImageContextImageTransformer]; if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { transformer = nil; } - id cacheSerializer = context[SDWebImageContextCacheSerializer]; + // transformer check BOOL shouldTransformImage = originalImage && transformer; shouldTransformImage = shouldTransformImage && (!originalImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)); shouldTransformImage = shouldTransformImage && (!originalImage.sd_isVector || (options & SDWebImageTransformVectorImage)); - // if available, store transformed image to cache + + // thumbnail check + // This exist when previous thumbnail pipeline callback into next full size pipeline, because we share the same URL download but need different image + // Actually this is a hack, we attach the metadata into image object, which should design a better concept like `ImageInfo` and keep that around + // Redecode need the full size data (progressive decoding or third-party loaders may callback nil data) + BOOL shouldRedecodeFullImage = originalData && cacheType == SDImageCacheTypeNone; + if (shouldRedecodeFullImage) { + // If the retuened image decode options exist (some loaders impl does not use `SDImageLoaderDecode`) but does not match the options we provide, redecode + SDImageCoderOptions *returnedDecodeOptions = originalImage.sd_decodeOptions; + if (returnedDecodeOptions) { + SDImageCoderOptions *decodeOptions = SDGetDecodeOptionsFromContext(context, options, url.absoluteString); + shouldRedecodeFullImage = ![returnedDecodeOptions isEqualToDictionary:decodeOptions]; + } else { + shouldRedecodeFullImage = NO; + } + } + if (shouldTransformImage) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ @autoreleasepool { - UIImage *transformedImage = [transformer transformedImageWithImage:originalImage forKey:key]; - if (transformedImage && finished) { - BOOL imageWasTransformed = ![transformedImage isEqual:originalImage]; - NSData *cacheData; - // pass nil if the image was transformed, so we can recalculate the data from the image - if (cacheSerializer && (storeCacheType == SDImageCacheTypeDisk || storeCacheType == SDImageCacheTypeAll)) { - cacheData = [cacheSerializer cacheDataWithImage:transformedImage originalData:(imageWasTransformed ? nil : originalData) imageURL:url]; + // transformed/thumbnailed cache key + NSString *key = [self cacheKeyForURL:url context:context]; + // Case that transformer one thumbnail, which this time need full pixel image + UIImage *fullSizeImage = originalImage; + BOOL imageWasRedecoded = NO; + if (shouldRedecodeFullImage) { + fullSizeImage = SDImageCacheDecodeImageData(originalData, key, options, context); + if (fullSizeImage) { + imageWasRedecoded = YES; } else { - cacheData = (imageWasTransformed ? nil : originalData); + imageWasRedecoded = NO; + fullSizeImage = originalImage; // Fallback } - [self storeImage:transformedImage imageData:cacheData forKey:key imageCache:imageCache cacheType:storeCacheType options:options context:context completion:^{ - [self callCompletionBlockForOperation:operation completion:completedBlock image:transformedImage data:originalData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; - }]; + } + UIImage *transformedImage = [transformer transformedImageWithImage:fullSizeImage forKey:key]; + if (transformedImage && finished) { + BOOL imageWasTransformed = ![transformedImage isEqual:fullSizeImage]; + // Continue store transform cache process + [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:transformedImage data:originalData cacheType:cacheType finished:finished transformed:imageWasTransformed || imageWasRedecoded completed:completedBlock]; } else { - [self callCompletionBlockForOperation:operation completion:completedBlock image:transformedImage data:originalData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; + // Continue store transform cache process + [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:fullSizeImage data:originalData cacheType:cacheType finished:finished transformed:imageWasRedecoded completed:completedBlock]; } } }); + } else if (shouldRedecodeFullImage) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + @autoreleasepool { + // Re-decode because the returned image does not match current request pipeline's context + UIImage *fullSizeImage = SDImageCacheDecodeImageData(originalData, url.absoluteString, options, context); + BOOL imageWasRedecoded = NO; + if (fullSizeImage) { + imageWasRedecoded = YES; + } else { + imageWasRedecoded = NO; + fullSizeImage = originalImage; // Fallback + } + // Continue store transform cache process + [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:fullSizeImage data:originalData cacheType:cacheType finished:finished transformed:imageWasRedecoded completed:completedBlock]; + } + }); + } else { + // Continue store transform cache process + [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:originalImage data:originalData cacheType:cacheType finished:finished transformed:NO completed:completedBlock]; + } +} + +- (void)callStoreTransformCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation + url:(nonnull NSURL *)url + options:(SDWebImageOptions)options + context:(SDWebImageContext *)context + image:(nullable UIImage *)image + data:(nullable NSData *)data + cacheType:(SDImageCacheType)cacheType + finished:(BOOL)finished + transformed:(BOOL)transformed + completed:(nullable SDInternalCompletionBlock)completedBlock { + // Grab the image cache to use + id imageCache; + if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { + imageCache = context[SDWebImageContextImageCache]; } else { - [self callCompletionBlockForOperation:operation completion:completedBlock image:originalImage data:originalData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; + imageCache = self.imageCache; + } + BOOL waitStoreCache = SD_OPTIONS_CONTAINS(options, SDWebImageWaitStoreCache); + // the target image store cache type + SDImageCacheType storeCacheType = SDImageCacheTypeAll; + if (context[SDWebImageContextStoreCacheType]) { + storeCacheType = [context[SDWebImageContextStoreCacheType] integerValue]; + } + id cacheSerializer = context[SDWebImageContextCacheSerializer]; + // thumbnail check + BOOL shouldThumbnailImage = context[SDWebImageContextImageThumbnailPixelSize] != nil || image.sd_decodeOptions[SDImageCoderDecodeThumbnailPixelSize] != nil; + + // Store the transformed/thumbnail image into the cache + if (image && (transformed || shouldThumbnailImage)) { + NSData *cacheData; + // pass nil if the image was transformed/thumbnailed, so we can recalculate the data from the image + if (cacheSerializer && (storeCacheType == SDImageCacheTypeDisk || storeCacheType == SDImageCacheTypeAll)) { + cacheData = [cacheSerializer cacheDataWithImage:image originalData:nil imageURL:url]; + } else { + cacheData = nil; + } + // transformed/thumbnailed cache key + NSString *key = [self cacheKeyForURL:url context:context]; + [self storeImage:image imageData:cacheData forKey:key imageCache:imageCache cacheType:storeCacheType waitStoreCache:waitStoreCache completion:^{ + [self callCompletionBlockForOperation:operation completion:completedBlock image:image data:data error:nil cacheType:cacheType finished:finished url:url]; + }]; + } else { + [self callCompletionBlockForOperation:operation completion:completedBlock image:image data:data error:nil cacheType:cacheType finished:finished url:url]; } } @@ -586,10 +690,8 @@ - (void)storeImage:(nullable UIImage *)image forKey:(nullable NSString *)key imageCache:(nonnull id)imageCache cacheType:(SDImageCacheType)cacheType - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context + waitStoreCache:(BOOL)waitStoreCache completion:(nullable SDWebImageNoParamsBlock)completion { - BOOL waitStoreCache = SD_OPTIONS_CONTAINS(options, SDWebImageWaitStoreCache); // Check whether we should wait the store cache finished. If not, callback immediately [imageCache storeImage:image imageData:data forKey:key cacheType:cacheType completion:^{ if (waitStoreCache) { diff --git a/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h b/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h index 50266db1..bc4224f4 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h +++ b/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h @@ -11,8 +11,14 @@ /// A protocol represents cancelable operation. @protocol SDWebImageOperation +/// Cancel the operation - (void)cancel; +@optional + +/// Whether the operation has been cancelled. +@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; + @end /// NSOperation conform to `SDWebImageOperation`. diff --git a/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m b/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m index 1b20bbd7..9fc72588 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m +++ b/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m @@ -9,12 +9,30 @@ #import "UIImage+ForceDecode.h" #import "SDImageCoderHelper.h" #import "objc/runtime.h" +#import "NSImage+Compatibility.h" @implementation UIImage (ForceDecode) - (BOOL)sd_isDecoded { NSNumber *value = objc_getAssociatedObject(self, @selector(sd_isDecoded)); - return value.boolValue; + if (value != nil) { + return value.boolValue; + } else { + // Assume only CGImage based can use lazy decoding + CGImageRef cgImage = self.CGImage; + if (cgImage) { + CFStringRef uttype = CGImageGetUTType(self.CGImage); + if (uttype) { + // Only ImageIO can set `com.apple.ImageIO.imageSourceTypeIdentifier` + return NO; + } else { + // Thumbnail or CGBitmapContext drawn image + return YES; + } + } + } + // Assume others as non-decoded + return NO; } - (void)setSd_isDecoded:(BOOL)sd_isDecoded { diff --git a/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h b/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h index 6a278e2e..90481eb0 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +++ b/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h @@ -8,6 +8,7 @@ #import "SDWebImageCompat.h" #import "NSData+ImageContentType.h" +#import "SDImageCoder.h" /** UIImage category for image metadata, including animation, loop count, format, incremental, etc. @@ -65,4 +66,12 @@ */ @property (nonatomic, assign) BOOL sd_isIncremental; +/** + A dictionary value contains the decode options when decoded from SDWebImage loading system (say, `SDImageCacheDecodeImageData/SDImageLoaderDecode[Progressive]ImageData`) + It may not always available and only image decoding related options will be saved. (including [.decodeScaleFactor, .decodeThumbnailPixelSize, .decodePreserveAspectRatio, .decodeFirstFrameOnly]) + @note This is used to identify and check the image from downloader when multiple different request (which want different image thumbnail size, image class, etc) share the same URLOperation. + @warning This API exist only because of current SDWebImageDownloader bad design which does not callback the context we call it. There will be refactory in future (API break) and you SHOULD NOT rely on this property at all. + */ +@property (nonatomic, copy) SDImageCoderOptions *sd_decodeOptions; + @end diff --git a/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m b/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m index b8f4fd82..a526f9b9 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +++ b/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m @@ -166,10 +166,8 @@ - (SDImageFormat)sd_imageFormat { return imageFormat; } // Check CGImage's UTType, may return nil for non-Image/IO based image - if (@available(iOS 9.0, tvOS 9.0, macOS 10.11, watchOS 2.0, *)) { - CFStringRef uttype = CGImageGetUTType(self.CGImage); - imageFormat = [NSData sd_imageFormatFromUTType:uttype]; - } + CFStringRef uttype = CGImageGetUTType(self.CGImage); + imageFormat = [NSData sd_imageFormatFromUTType:uttype]; return imageFormat; } @@ -186,4 +184,16 @@ - (BOOL)sd_isIncremental { return value.boolValue; } +- (void)setSd_decodeOptions:(SDImageCoderOptions *)sd_decodeOptions { + objc_setAssociatedObject(self, @selector(sd_decodeOptions), sd_decodeOptions, OBJC_ASSOCIATION_COPY_NONATOMIC); +} + +- (SDImageCoderOptions *)sd_decodeOptions { + SDImageCoderOptions *value = objc_getAssociatedObject(self, @selector(sd_decodeOptions)); + if ([value isKindOfClass:NSDictionary.class]) { + return value; + } + return nil; +} + @end diff --git a/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m b/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m index b27b3a95..2cd8a6f9 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m +++ b/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m @@ -57,7 +57,89 @@ static inline CGRect SDCGRectFitWithScaleMode(CGRect rect, CGSize size, SDImageS return rect; } -static inline UIColor * SDGetColorFromPixel(Pixel_8888 pixel, CGBitmapInfo bitmapInfo) { +static inline UIColor * SDGetColorFromGrayscale(Pixel_88 pixel, CGBitmapInfo bitmapInfo) { + // Get alpha info, byteOrder info + CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask; + CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask; + CGFloat w = 0, a = 1; + + BOOL byteOrderNormal = NO; + switch (byteOrderInfo) { + case kCGBitmapByteOrderDefault: { + byteOrderNormal = YES; + } break; + case kCGBitmapByteOrder32Little: { + } break; + case kCGBitmapByteOrder32Big: { + byteOrderNormal = YES; + } break; + default: break; + } + switch (alphaInfo) { + case kCGImageAlphaPremultipliedFirst: + case kCGImageAlphaFirst: { + if (byteOrderNormal) { + // AW + a = pixel[0] / 255.0; + w = pixel[1] / 255.0; + } else { + // WA + w = pixel[0] / 255.0; + a = pixel[1] / 255.0; + } + } + break; + case kCGImageAlphaPremultipliedLast: + case kCGImageAlphaLast: { + if (byteOrderNormal) { + // WA + w = pixel[0] / 255.0; + a = pixel[1] / 255.0; + } else { + // AW + a = pixel[0] / 255.0; + w = pixel[1] / 255.0; + } + } + break; + case kCGImageAlphaNone: { + // W + w = pixel[0] / 255.0; + } + break; + case kCGImageAlphaNoneSkipLast: { + if (byteOrderNormal) { + // WX + w = pixel[0] / 255.0; + } else { + // XW + a = pixel[1] / 255.0; + } + } + break; + case kCGImageAlphaNoneSkipFirst: { + if (byteOrderNormal) { + // XW + a = pixel[1] / 255.0; + } else { + // WX + a = pixel[0] / 255.0; + } + } + break; + case kCGImageAlphaOnly: { + // A + a = pixel[0] / 255.0; + } + break; + default: + break; + } + + return [UIColor colorWithWhite:w alpha:a]; +} + +static inline UIColor * SDGetColorFromRGBA(Pixel_8888 pixel, CGBitmapInfo bitmapInfo) { // Get alpha info, byteOrder info CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask; CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask; @@ -470,18 +552,34 @@ - (nullable UIColor *)sd_colorAtPoint:(CGPoint)point { size_t components = CGImageGetBitsPerPixel(imageRef) / CGImageGetBitsPerComponent(imageRef); CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - CFRange range = CFRangeMake(bytesPerRow * point.y + components * point.x, 4); + CFRange range = CFRangeMake(bytesPerRow * point.y + components * point.x, components); if (CFDataGetLength(data) < range.location + range.length) { CFRelease(data); CGImageRelease(imageRef); return nil; } - Pixel_8888 pixel = {0}; - CFDataGetBytes(data, range, pixel); - CFRelease(data); - CGImageRelease(imageRef); - // Convert to color - return SDGetColorFromPixel(pixel, bitmapInfo); + // greyscale + if (components == 2) { + Pixel_88 pixel = {0}; + CFDataGetBytes(data, range, pixel); + CFRelease(data); + CGImageRelease(imageRef); + // Convert to color + return SDGetColorFromGrayscale(pixel, bitmapInfo); + } else if (components == 3 || components == 4) { + // RGB/RGBA + Pixel_8888 pixel = {0}; + CFDataGetBytes(data, range, pixel); + CFRelease(data); + CGImageRelease(imageRef); + // Convert to color + return SDGetColorFromRGBA(pixel, bitmapInfo); + } else { + NSLog(@"Unsupported components: %zu", components); + CFRelease(data); + CGImageRelease(imageRef); + return nil; + } } - (nullable NSArray *)sd_colorsWithRect:(CGRect)rect { @@ -539,17 +637,32 @@ - (nullable UIColor *)sd_colorAtPoint:(CGPoint)point { // Convert to color CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); NSMutableArray *colors = [NSMutableArray arrayWithCapacity:CGRectGetWidth(rect) * CGRectGetHeight(rect)]; - for (size_t index = start; index < end; index += 4) { + for (size_t index = start; index < end; index += components) { if (index >= row * bytesPerRow + col * components) { // Index beyond the end of current row, go next row row++; index = row * bytesPerRow + CGRectGetMinX(rect) * components; - index -= 4; + index -= components; continue; } - Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], pixels[index+3]}; - UIColor *color = SDGetColorFromPixel(pixel, bitmapInfo); - [colors addObject:color]; + UIColor *color; + if (components == 2) { + Pixel_88 pixel = {pixels[index], pixel[index+1]}; + color = SDGetColorFromGrayscale(pixel, bitmapInfo); + } else { + if (components == 3) { + Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], 0}; + color = SDGetColorFromRGBA(pixel, bitmapInfo); + } else if (components == 4) { + Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], pixels[index+3]}; + color = SDGetColorFromRGBA(pixel, bitmapInfo); + } else { + NSLog(@"Unsupported components: %zu", components); + } + } + if (color) { + [colors addObject:color]; + } } CFRelease(data); CGImageRelease(imageRef); @@ -609,7 +722,7 @@ - (nullable UIImage *)sd_blurredImageWithRadius:(CGFloat)blurRadius { .bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, //requests a BGRA buffer. .version = 0, .decode = NULL, - .renderingIntent = kCGRenderingIntentDefault + .renderingIntent = CGImageGetRenderingIntent(imageRef) }; vImage_Error err; diff --git a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h index ee9f761b..48175f17 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h +++ b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h @@ -71,14 +71,15 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima * block is called a last time with the full image and the last parameter set to YES. * * The last parameter is the original image URL + * @return The returned operation for cancelling cache and download operation, typically type is `SDWebImageCombinedOperation` */ -- (void)sd_internalSetImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - setImageBlock:(nullable SDSetImageBlock)setImageBlock - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock; +- (nullable id)sd_internalSetImageWithURL:(nullable NSURL *)url + placeholderImage:(nullable UIImage *)placeholder + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + setImageBlock:(nullable SDSetImageBlock)setImageBlock + progress:(nullable SDImageLoaderProgressBlock)progressBlock + completed:(nullable SDInternalCompletionBlock)completedBlock; /** * Cancel the current image load diff --git a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m index 35f10362..486584f4 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +++ b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m @@ -47,13 +47,13 @@ - (void)setSd_imageProgress:(NSProgress *)sd_imageProgress { objc_setAssociatedObject(self, @selector(sd_imageProgress), sd_imageProgress, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -- (void)sd_internalSetImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - setImageBlock:(nullable SDSetImageBlock)setImageBlock - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock { +- (nullable id)sd_internalSetImageWithURL:(nullable NSURL *)url + placeholderImage:(nullable UIImage *)placeholder + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + setImageBlock:(nullable SDSetImageBlock)setImageBlock + progress:(nullable SDImageLoaderProgressBlock)progressBlock + completed:(nullable SDInternalCompletionBlock)completedBlock { if (context) { // copy to avoid mutable object context = [context copy]; @@ -99,6 +99,8 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url }); } + id operation = nil; + if (url) { // reset the progress NSProgress *imageProgress = objc_getAssociatedObject(self, @selector(sd_imageProgress)); @@ -135,7 +137,7 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url } }; @weakify(self); - id operation = [manager loadImageWithURL:url options:options context:context progress:combinedProgressBlock completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + operation = [manager loadImageWithURL:url options:options context:context progress:combinedProgressBlock completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { @strongify(self); if (!self) { return; } // if the progress not been updated, mark it to complete state @@ -234,6 +236,8 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url } }); } + + return operation; } - (void)sd_cancelCurrentImageLoad { diff --git a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h index 53a7045c..fc23508b 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h +++ b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h @@ -32,14 +32,14 @@ - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; /** - * Cancel all operations for the current UIView and key + * Cancel the operation for the current UIView and key * * @param key key for identifying the operations */ - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; /** - * Just remove the operations corresponding to the current UIView and key without cancelling them + * Just remove the operation corresponding to the current UIView and key without cancelling them * * @param key key for identifying the operations */ diff --git a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m index adb2c105..6fe23e48 100644 --- a/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m +++ b/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m @@ -9,8 +9,6 @@ #import "UIView+WebCacheOperation.h" #import "objc/runtime.h" -static char loadOperationKey; - // key is strong, value is weak because operation instance is retained by SDWebImageManager's runningOperations property // we should use lock to keep thread-safe because these method may not be accessed from main queue typedef NSMapTable> SDOperationsDictionary; @@ -19,12 +17,12 @@ @implementation UIView (WebCacheOperation) - (SDOperationsDictionary *)sd_operationDictionary { @synchronized(self) { - SDOperationsDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); + SDOperationsDictionary *operations = objc_getAssociatedObject(self, @selector(sd_operationDictionary)); if (operations) { return operations; } operations = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0]; - objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject(self, @selector(sd_operationDictionary), operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); return operations; } } diff --git a/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m b/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m index a7c70763..c122da4d 100644 --- a/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m +++ b/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m @@ -18,6 +18,7 @@ void SDImageCopyAssociatedObject(UIImage * _Nullable source, UIImage * _Nullable } // Image Metadata target.sd_isIncremental = source.sd_isIncremental; + target.sd_decodeOptions = source.sd_decodeOptions; target.sd_imageLoopCount = source.sd_imageLoopCount; target.sd_imageFormat = source.sd_imageFormat; // Force Decode diff --git a/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m b/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m index 50a4da94..7bca347c 100644 --- a/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m +++ b/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m @@ -18,7 +18,13 @@ #elif SD_UIKIT CGFloat screenScale = [UIScreen mainScreen].scale; #elif SD_MAC - CGFloat screenScale = [NSScreen mainScreen].backingScaleFactor; + NSScreen *mainScreen = nil; + if (@available(macOS 10.12, *)) { + mainScreen = [NSScreen mainScreen]; + } else { + mainScreen = [NSScreen screens].firstObject; + } + CGFloat screenScale = mainScreen.backingScaleFactor ?: 1.0f; #endif if (screenScale <= 1) { scales = @[@1,@2,@3]; diff --git a/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig b/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig deleted file mode 100644 index 7f9ee6eb..00000000 --- a/Pods/Target Support Files/FLAnimatedImage/FLAnimatedImage.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FLAnimatedImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FLAnimatedImage" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FLAnimatedImage -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/MJExtension/MJExtension-Info.plist b/Pods/Target Support Files/MJExtension/MJExtension-Info.plist index 3ac477e6..7694605f 100644 --- a/Pods/Target Support Files/MJExtension/MJExtension-Info.plist +++ b/Pods/Target Support Files/MJExtension/MJExtension-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.3.0 + 3.4.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/MJExtension/MJExtension.xcconfig b/Pods/Target Support Files/MJExtension/MJExtension.xcconfig deleted file mode 100644 index 648d8103..00000000 --- a/Pods/Target Support Files/MJExtension/MJExtension.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJExtension -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MJExtension" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MJExtension" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJExtension -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Masonry/Masonry.xcconfig b/Pods/Target Support Files/Masonry/Masonry.xcconfig deleted file mode 100644 index fcb7965e..00000000 --- a/Pods/Target Support Files/Masonry/Masonry.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Masonry" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 00000000..6312f7bb --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,9 @@ +${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks.sh +${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework +${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework +${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework +${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework +${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework +${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework +${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework +${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 00000000..2ed85f3b --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1,8 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Release-input-files.xcfilelist new file mode 100644 index 00000000..6312f7bb --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,9 @@ +${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks.sh +${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework +${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework +${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework +${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework +${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework +${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework +${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework +${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Release-output-files.xcfilelist new file mode 100644 index 00000000..2ed85f3b --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-frameworks-Release-output-files.xcfilelist @@ -0,0 +1,8 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Debug-input-files.xcfilelist new file mode 100644 index 00000000..c84a2235 --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Debug-input-files.xcfilelist @@ -0,0 +1,42 @@ +${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources.sh +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/body_slim.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/controller_cpp.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_beautification.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_makeup.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fuzzytoonfilter.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fxaa.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/tongue.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_bgseg_green.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor_lite.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_recognizer.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_hand_processor.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor_gpu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/baimao_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/bg_segment.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend1_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend2_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend3_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_flower_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_rain_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_snow_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/douniuquan_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/green_screen_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/gufeng_zh_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_gradient.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_normal.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hashiqi_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hetun_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hez_ztt_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/huangya_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_mask.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_outline_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ice_lm_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/landmarks.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/light_makeup_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/qgirl_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sdx2_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sea_lm_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/xiandai_ztt_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/version.h \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Debug-output-files.xcfilelist new file mode 100644 index 00000000..afbd843d --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Debug-output-files.xcfilelist @@ -0,0 +1,41 @@ +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/body_slim.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/controller_cpp.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/face_beautification.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/face_makeup.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/fuzzytoonfilter.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/fxaa.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/tongue.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_bgseg_green.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_face_processor.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_face_processor_lite.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_face_recognizer.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_hand_processor.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_human_processor.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_human_processor_gpu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/baimao_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/bg_segment.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boyfriend1_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boyfriend2_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boyfriend3_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ctrl_flower_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ctrl_rain_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ctrl_snow_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/douniuquan_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/green_screen_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gufeng_zh_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hair_gradient.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hair_normal.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hashiqi_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hetun_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hez_ztt_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/huangya_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/human_mask.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/human_outline_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ice_lm_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/landmarks.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/light_makeup_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/qgirl_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/sdx2_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/sea_lm_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/xiandai_ztt_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/version.h \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Release-input-files.xcfilelist new file mode 100644 index 00000000..c84a2235 --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Release-input-files.xcfilelist @@ -0,0 +1,42 @@ +${PODS_ROOT}/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources.sh +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/body_slim.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/controller_cpp.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_beautification.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_makeup.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fuzzytoonfilter.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fxaa.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/tongue.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_bgseg_green.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor_lite.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_recognizer.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_hand_processor.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor_gpu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/baimao_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/bg_segment.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend1_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend2_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend3_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_flower_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_rain_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_snow_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/douniuquan_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/green_screen_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/gufeng_zh_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_gradient.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_normal.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hashiqi_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hetun_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hez_ztt_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/huangya_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_mask.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_outline_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ice_lm_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/landmarks.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/light_makeup_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/qgirl_Animoji.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sdx2_740.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sea_lm_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/xiandai_ztt_fu.bundle +${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/version.h \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Release-output-files.xcfilelist new file mode 100644 index 00000000..afbd843d --- /dev/null +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources-Release-output-files.xcfilelist @@ -0,0 +1,41 @@ +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/body_slim.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/controller_cpp.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/face_beautification.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/face_makeup.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/fuzzytoonfilter.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/fxaa.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/tongue.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_bgseg_green.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_face_processor.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_face_processor_lite.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_face_recognizer.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_hand_processor.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_human_processor.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ai_human_processor_gpu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/baimao_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/bg_segment.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boyfriend1_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boyfriend2_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boyfriend3_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ctrl_flower_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ctrl_rain_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ctrl_snow_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/douniuquan_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/green_screen_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gufeng_zh_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hair_gradient.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hair_normal.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hashiqi_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hetun_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/hez_ztt_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/huangya_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/human_mask.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/human_outline_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ice_lm_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/landmarks.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/light_makeup_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/qgirl_Animoji.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/sdx2_740.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/sea_lm_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/xiandai_ztt_fu.bundle +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/version.h \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources.sh b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources.sh index 31e67072..7f898c75 100755 --- a/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources.sh +++ b/Pods/Target Support Files/Pods-FULiveDemo/Pods-FULiveDemo-resources.sh @@ -97,36 +97,90 @@ EOM esac } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/body_slim.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/controller_cpp.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/face_beautification.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/face_makeup.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/fuzzytoonfilter.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/fxaa.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/tongue.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_bgseg_green.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_face_processor.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_face_processor_lite.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_face_recognizer.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_hand_processor.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_human_processor.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/version.h" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/body_slim.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/controller_cpp.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_beautification.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_makeup.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fuzzytoonfilter.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fxaa.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/tongue.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_bgseg_green.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor_lite.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_recognizer.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_hand_processor.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor_gpu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/baimao_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/bg_segment.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend1_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend2_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend3_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_flower_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_rain_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_snow_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/douniuquan_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/green_screen_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/gufeng_zh_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_gradient.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_normal.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hashiqi_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hetun_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hez_ztt_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/huangya_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_mask.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_outline_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ice_lm_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/landmarks.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/light_makeup_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/qgirl_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sdx2_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sea_lm_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/xiandai_ztt_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/version.h" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/body_slim.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/controller_cpp.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/face_beautification.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/face_makeup.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/fuzzytoonfilter.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/fxaa.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/graphics/tongue.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_bgseg_green.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_face_processor.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_face_processor_lite.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_face_recognizer.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_hand_processor.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/model/ai_human_processor.bundle" - install_resource "${PODS_ROOT}/../../FURenderKit/Resources/version.h" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/body_slim.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/controller_cpp.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_beautification.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/face_makeup.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fuzzytoonfilter.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/fxaa.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/graphics/tongue.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_bgseg_green.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_processor_lite.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_face_recognizer.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_hand_processor.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/model/ai_human_processor_gpu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/baimao_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/bg_segment.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend1_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend2_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/boyfriend3_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_flower_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_rain_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ctrl_snow_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/douniuquan_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/green_screen_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/gufeng_zh_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_gradient.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hair_normal.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hashiqi_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hetun_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/hez_ztt_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/huangya_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_mask.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/human_outline_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/ice_lm_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/landmarks.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/light_makeup_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/qgirl_Animoji.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sdx2_740.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/sea_lm_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/others/xiandai_ztt_fu.bundle" + install_resource "${PODS_ROOT}/../../集成/GitLab/FURenderKit/Resources/version.h" fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" diff --git a/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist b/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist index ced4f96f..7c738173 100644 --- a/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist +++ b/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.12.1 + 5.13.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig deleted file mode 100644 index 71e53f9a..00000000 --- a/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig b/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig deleted file mode 100644 index ee907174..00000000 --- a/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SVProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SVProgressHUD -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m index 36240b75..e436a9b0 100644 --- a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m @@ -156,10 +156,10 @@ - (void)_setImageForAsset:(LOTAsset *)asset { id imageCache = [LOTCacheProvider imageCache]; if (imageCache) { - image = [imageCache imageForKey:imagePath]; + image = [imageCache lotImageForKey:imagePath]; if (!image) { image = [UIImage imageWithContentsOfFile:imagePath]; - [imageCache setImage:image forKey:imagePath]; + [imageCache setLOTImage:image forKey:imagePath]; } } else { image = [UIImage imageWithContentsOfFile:imagePath]; diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h index 3857226f..b0daa7c3 100644 --- a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h @@ -32,8 +32,9 @@ @protocol LOTImageCache @required -- (LOTImage *)imageForKey:(NSString *)key; -- (void)setImage:(LOTImage *)image forKey:(NSString *)key; +- (LOTImage *)lotImageForKey:(NSString *)key; + +- (void)setLOTImage:(LOTImage *)image forKey:(NSString *)key; @end diff --git a/docs/resource/Action_Recognition_Documentation.md b/docs/Action_Recognition_Documentation.md similarity index 100% rename from docs/resource/Action_Recognition_Documentation.md rename to docs/Action_Recognition_Documentation.md diff --git a/docs/resource/Beautification_Filters_User_Specification.md b/docs/Beautification_Filters_User_Specification.md similarity index 100% rename from docs/resource/Beautification_Filters_User_Specification.md rename to docs/Beautification_Filters_User_Specification.md diff --git a/docs/resource/Beauty_Prop_Function_Documentation.md b/docs/Beauty_Prop_Function_Documentation.md similarity index 100% rename from docs/resource/Beauty_Prop_Function_Documentation.md rename to docs/Beauty_Prop_Function_Documentation.md diff --git a/docs/resource/Beauty_Prop_Function_Documentation_Basic_Beautification.md b/docs/Beauty_Prop_Function_Documentation_Basic_Beautification.md similarity index 100% rename from docs/resource/Beauty_Prop_Function_Documentation_Basic_Beautification.md rename to docs/Beauty_Prop_Function_Documentation_Basic_Beautification.md diff --git a/docs/resource/Body_Beautification_Prop_Function_Documentation.md b/docs/Body_Beautification_Prop_Function_Documentation.md similarity index 100% rename from docs/resource/Body_Beautification_Prop_Function_Documentation.md rename to docs/Body_Beautification_Prop_Function_Documentation.md diff --git a/docs/resource/Controller_Function_Documentation.md b/docs/Controller_Function_Documentation.md similarity index 100% rename from docs/resource/Controller_Function_Documentation.md rename to docs/Controller_Function_Documentation.md diff --git a/docs/resource/Expression_GIF_Function_Documentation.md b/docs/Expression_GIF_Function_Documentation.md similarity index 100% rename from docs/resource/Expression_GIF_Function_Documentation.md rename to docs/Expression_GIF_Function_Documentation.md diff --git a/docs/FURenderKit Quick Integration.md b/docs/FURenderKit Quick Integration.md deleted file mode 100644 index 4f5e370b..00000000 --- a/docs/FURenderKit Quick Integration.md +++ /dev/null @@ -1,524 +0,0 @@ -# Quick Integration Documentation - -## Initialization - -```objective-c -// Initialize FURenderKit -FUSetupConfig *setupConfig = [[FUSetupConfig alloc] init]; -setupConfig.authPack = FUAuthPackMake(g_auth_package, **sizeof**(g_auth_package)); -[FURenderKit setupWithSetupConfig:setupConfig]; -``` - -## Load AI Model - -```objective-c -// Load Face AI Model -NSString *faceAIPath = [[NSBundle mainBundle] pathForResource:@"ai_face_processor" ofType:@"bundle"]; -[FUAIKit loadAIModeWithAIType:FUAITYPE_FACEPROCESSOR dataPath:faceAIPath]; - -// Load Body AI Model -NSString *bodyAIPath = [[NSBundle mainBundle] pathForResource:@"ai_human_processor" ofType:@"bundle"]; -[FUAIKit loadAIModeWithAIType:FUAITYPE_HUMAN_PROCESSOR dataPath:bodyAIPath]; - -// Load Gesture AI Model -NSString *handAIPath = [[NSBundle mainBundle] pathForResource:@"ai_hand_processor" ofType:@"bundle"]; -[FUAIKit loadAIModeWithAIType:FUAITYPE_HANDGESTURE dataPath:handAIPath]; - -// Load Hair AI Model -NSString *hairAIPath = [[NSBundle mainBundle] pathForResource:@"ai_hairseg" ofType:@"bundle"]; -[FUAIKit loadAIModeWithAIType:FUAITYPE_HAIRSEGMENTATION dataPath:hairAIPath]; -``` - - - -## Set Display View - -FURenderKit provides the class of FUGLDisplayView to display the rendering results (this step can be ignored if using custom rendering). The user can directly initialize an instance of FUGLDisplayView externally and assign a value to the single instance of FURenderKit. FURenderKit draws the rendering results directly to the instance of the FUGLDisplayView. The example code is as follows: - - -```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; //Set image adaptation mode -``` - -The user can also directly use the relevant interface of the FUGLDisplayView to display images externally without assigning the instance of the FUGLDisplayView to the single instance of the FURenderKit. - - -## Interior Camera - -FURenderKit provides the FUCaptureCamera class to collect images (if you use an external camera, this step can be ignored). Users can directly use the following functions to turn on or off the internal camera function. - -```objective-c -// Turn on the internal camera -[[FURenderKit shareRenderKit] startInternalCamera]; - -// Turn off the internal camera -[[FURenderKit shareRenderKit] stopInternalCamera]; -``` - -**The FURenderKit singleton has an internalCameraSetting instance. When the internal camera is activated, the camera will be configured according to the parameters of internalCameraSetting. The specific properties and default values of internalCameraSetting are as follows. Users can directly modify the related properties of the camera by modifying these parameters:** - - -```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, It should be noted that when the internal virtual camera is turned on, if the user uses the Scene related function that needs a real camera, the internal will automatically turn on the real camera, and when the user turns off the Scene related function, the internal will automatically turn off. -@property (nonatomic, assign) BOOL useVirtualCamera; - -/// If the internal camera is used, the SDK will automatically determine whether a system camera is needed. If camera is not needed, the internal camera will be simulated and the image will be output circularly. -/// This attribute can set the width and height of the output image. The default width and height is 720x1280. If CGSizeZero is set, the width and height of sessionPreset will be used. -@property (nonatomic, assign) CGSize virtualCameraResolution; -@end -``` - -**Users can also directly use FUCaptureCamera to initialize the camera instance externally, obtain the image through the relevant interface of FUCaptureCamera, and then transfer the image to the rendering interface of FURenderKit to process the image. ** - - - - -## FURenderKit Main Interface Description: - -### Rendering Interface - -#### 1. Input - -FURenderKit defines the class of FURenderInput as input. The specific definition of this class is as follows: - -```objective-c -@interface FURenderInput : NSObject - -/// Input texture -@property (nonatomic, assign) FUTexture texture; - -/// Input pixelBuffer -@property (nonatomic, assign) CVPixelBufferRef pixelBuffer; - -/// Input imageBuffer If pass in pixelBuffer at the same time, pixelBuffer will be used first. -/// Input imageBuffer. When onlyOutputTexture in renderConfig is NO,The render result will read the input imageBuffer directly, and the size format is consistent with the input. -@property (nonatomic, assign) FUImageBuffer imageBuffer; - -///Set the input and output configuration related to render. For detailed parameters, please see the interface notes of the FURenderConfig class. -@property (nonatomic, strong) FURenderConfig *renderConfig; - -@end -``` - -Users can choose to input one or more formats of images according to the data in their own code. When multiple formats are imported, if both pixelBuffer and imageBuffer are imported at the same time, pixelBuffer will be used first for image processing. For FUTexture and FUImageBuffer related properties, please check the related header file. - - -### 2. Configuration - -There is a FURenderConfig class in FURenderInput, which is used to configure some input and output related settings. The specific definitions are as follows: - -```objective-c -@interface FURenderConfig : NSObject - -// Customize the size of the output result. Currently, it is only valid for the output texture and pixelBuffer -@property (nonatomic, assign) CGSize customOutputSize; - -// Whether the current picture come from the front camera -@property (nonatomic, assign) BOOL isFromFrontCamera; - -// Orientation of the original image -@property (nonatomic, assign) FUImageOrientation imageOrientation; - -// Gravity switch. Turn on this function to automatically adapt the AI detection direction according to the set imageRotation. -@property (nonatomic, assign) BOOL gravityEnable; - -// Setting to YES, only beauty will take effect. -@property (nonatomic, assign) BOOL onlyRenderBeauty; - -// Set the direction of rotation of the input texture, and setting this attribute affects the direction of the output texture. Since the texture created by default is inverted, the default value for this parameter is CCROT0_FLIPVERTICAL, if it has been corrected, set the parameter to DEFAULT -@property (nonatomic, assign) TRANSFORM_MATRIX textureTransform; - -// Set the rotation direction of the input pixelBuffer / imageBuffer to make the buffer data consistent with the direction of the texture after textureTransform. This parameter is only used for AI algorithm detection, and does not change the direction or image attribute of the buffer -@property (nonatomic, assign) TRANSFORM_MATRIX bufferTransform; - -// Whether to render to the current FBO or not When it is set to YES, all data in the returned FURenderOutput are null. -@property (nonatomic, assign) BOOL renderToCurrentFBO; - -// When it is set to YES and renderToCurrentFBO is NO, only texture will be output, not CPU layer image. -@property (nonatomic, assign) BOOL onlyOutputTexture; - -@end - -``` - -### 3. Output - -FurenderKit defines the class of FURenderOutput as output. The specific definition of this class is as follows: the type and number of output images are the same as the input. - -```objective-c -@interface FURenderOutput : NSObject - -// Set the rotation direction of the input texture, which affects the direction of the output texture. Since the texture created by default is inverted, the default value of this parameter is CCROT0_FLIPVERTICAL. If it has been transferred to regular, please set the parameter to default -@property (nonatomic, assign) TRANSFORM_MATRIX textureTransform; - -// Set the rotation direction of the input pixelBuffer/imageBuffer to make the buffer data consistent with the direction of the texture after texture transform. This parameter is only used for AI algorithm detection, and does not change the direction or image attribute of the buffer -@property (nonatomic, assign) TRANSFORM_MATRIX bufferTransform; - -// Set the rotation direction of the input pixelBuffer/imageBuffer to make the buffer data consistent with the direction of the texture after texture transform. This parameter is only used for AI algorithm detection, and does not change the direction or image attribute of the buffer -@property (nonatomic, assign) TRANSFORM_MATRIX outputTransform; - -// Output texture -@property (nonatomic, assign) FUTexture texture; - -// Output pixelBuffer -@property (nonatomic, assign) CVPixelBufferRef pixelBuffer; - -// Output imageBuffer,the internal data of which is consistent with the input imageBuffer. -@property (nonatomic, assign) FUImageBuffer imageBuffer; - -@end -``` - - - -### Internal Render Callback - -FURenderKit defines a FURenderKitDelegate protocol, which includes three interfaces: one is the input callback when the internal camera is used to process the image, the other is the output callback when the internal camera is used to process the image - -```objective-c -// When using the internal camera, that is to say, when processing the image to input -- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput; - -// When using the internal camera, the output after processing the image -- (void)renderKitDidRenderToOutput:(FURenderOutput *)renderOutput; - -// When using the internal camera, whether to render the internal camera or not. Return No,renderKitDidRenderToOutput interface will output the original image directly. Return YES, renderKitDidRenderToOutput interface output with rendering props -- (BOOL)renderKitShouldDoRender; -``` - -### External Rendering Interface - -FURenderKit provides the following interface to process the image. Users can transfer the image to the interface to obtain the processed image. - -``` -- (FURenderOutput *)renderWithInput:(FURenderInput *)input; -``` - -Example: - -```objective-c -FURenderInput *renderInput = [[FURenderInput alloc] init]; -renderInput.pixelBuffer = pixelBuffer; -FURenderOutput *renderOutput = [[FURenderKit shareRenderKit] renderWithInput:renderInput]; -return renderOutput.pixelBuffer; -``` - - - -## Turn on / off the camera - -```objective-c -#pragma mark - internalCamera - -- (void)startInternalCamera; - -- (void)stopInternalCamera; -``` - - - -## Verify module authority according to certificate - -```objective-c -/** - * Get the module permissions in the certificate - * code get i-th code, currently available for 0 and 1 - */ -+ (int)getModuleCode:(int)code; -``` - - - -## Destroy - -#### Internally, the camera and various rendering models (beauty, makeup, props, stickers, etc.) will be destroyed, the AI resources will be released, and the underlying resources will be destroyed - -```objective-c -- (void)destroy -``` - - - -## Eliminate - -#### It is differ from destory. Only the rendering models (beauty, makeup, props, stickers, etc.) will be cleared, and others will not be processed. - -```objective-c -+ (void)clear; -``` - - - -## Video and Photo-Taking - -```objective-c -#pragma mark - Record && capture -//Press the video button to call -+ (void)startRecordVideoWithFilePath:(NSString *)filePath; -//Release the video button to call -+ (void)stopRecordVideoComplention:(void(^)(NSString *filePath))complention; -//Capture the current frame as a picture -+ (UIImage *)captureImage; -``` - - - -## FUAIKit - -AI capability related functions are loaded or acquired through FUAIKit - -Introduction to some interfaces and properties - -```objective-c -@property (nonatomic, assign) int maxTrackFaces; // Set the maximum number of face tracking default is 1 - -@property (nonatomic, assign, readonly) int trackedFacesCount; // Number of faces tracked - -@property (nonatomic, assign) FUFaceProcessorDetectMode faceProcessorDetectMode; // Image loading mode default is FUFaceProcessorDetectModeVideo - -@property (nonatomic, assign) BOOL asyncTrackFace; //Set whether to do asynchronous face tracking - -//Load AI bundle -+ (void)loadAIModeWithAIType:(FUAITYPE)type dataPath:(NSString *)dataPath; -//Uninstall AI bundle -+ (void)unloadAIModeForAIType:(FUAITYPE)type; -//Uninstall all AI bundle -+ (void)unloadAllAIMode; - -+ (BOOL)loadedAIType:(FUAITYPE)type; -//Load tongue drive -+ (void)loadTongueMode:(NSString *)modePath; -//Face types are loaded separately -+ (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; -``` - -Other interface references FUAIKit.h - - - -## Functional Module: The name of the bundle loaded by the function module can be defined by itself, and the name of the sample code is loaded according to the name defined by itself - -### Face Beauty - -#### Initialize Face Beauty - -Use FUBeauty class to initialize the beauty instance, and assign the beauty instance to FURenderKit. The internal processing is synchronous thread serial queue processing, which will take time. External users can use thread management by themselves. - -```objective-c -NSString *path = [[NSBundle mainBundle] pathForResource:@"face_beautification" ofType:@"bundle"]; -FUBeauty *beauty = [[FUBeauty alloc] initWithPath:path name:@"face_beautification"]; -[FURenderKit shareRenderKit].beauty = beauty; - -``` - -#### Modify Beauty Parameters - -You can directly modify the relevant properties of FUBeauty, or initialize a new beauty instance. After modifying the parameters, you can directly assign the value to FURenderKit; An example of modifying an attribute is as follows. See fubeauty.h note for the meaning of the attribute - -```objective-c -beauty.blurUseMask = NO; -The value FURenderKit corresponding to the filter FileName has done the corresponding mapping relationship. You can call it directly -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; -``` - - - -### Stickers - -Use FUSticker or its subclass to initialize the sticker instance. A FUStickerContainer class is provided in the FURenderKit to manage the sticker. Just add and replace the sticker instance to the FUStickerContainer instance to realize the display of the sticker, and then use the delete interface of FUStickerContainer to remove the sticker effect. Examples are as follows: - -```objective-c -// Add -NSString *path = [[NSBundle mainBundle] pathForResource:@"sdlu" ofType:@"bundle"]; -FUSticker *sticker = [[FUSticker alloc] initWithPath:path name:@"sticker"]; -[[FURenderKit shareRenderKit].stickerContainer addSticker:sticker]; - -// Replace -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]; - -// Delete -[[FURenderKit shareRenderKit].stickerContainer removeSticker:sticker1]; -``` - -Special sticker description with attributes: - -```objective-c -1. Portrait Segmentation FUAISegment - How to use outer contour bundle -NSString *path = [[NSBundle mainBundle] pathForResource:@"human_outline" ofType:@"bundle"]; -FUAISegment *outline = [FUAISegment alloc] initWithPath:path name:@"sticker"]; -outline.lineGap = 2.8; //The distance between the contour line and the person -outline.lineSize = 2.8; //The width of contour split line -outline.lineColor = FUColorMake(255/255.0, 180/255.0, 0.0, 0.0); //line color -[[FURenderKit shareRenderKit].stickerContainer addSticker:outline]; - -1. Portrait Segmentation FUAISegment - Custom background video -NSString *path = [[NSBundle mainBundle] pathForResource:@"bg_segment" ofType:@"bundle"]; -FUAISegment *segment = [FUAISegment alloc] initWithPath:path name:@"sticker"]; -segment.videoPath = @“Background video path”;//NSURL or NSString -[segment startVideoDecode]; -//Get the first picture of video parsing -UIImage *image = [segment readFirstFrame]; -[[FURenderKit shareRenderKit].stickerContainer replaceSticker:outline withSticker:segment completion:nil]; - -1. Portrait Segmentation FUAISegment - Custom background photo -segment.setBackgroundImage = @"Custom photo"; - -2. FUAnimoji - expression -NSString *path = [[NSBundle mainBundle] pathForResource:@"animoji" ofType:@"bundle"]; -FUAnimoji *animoji = [FUAnimoji alloc] initWithPath:path name:@"animoji"]; -animoji.flowEnable = YES; //Whether the cartoon expression follow the character's movement, YES,follow, NO, don't follow - -3. FUGesture -- Gesture -NSString *path = [[NSBundle mainBundle] pathForResource:@"fugesture" ofType:@"bundle"]; -FUGesture *gesture = [FUGesture alloc] initWithPath:path name:@"animoji"]; -gesture.handOffY = YES; //The offset of the comparison center can be adjusted separately, > 0 up and < 0 down - -4. FUMusicFilter - Music Filter -NSString *path = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"bundle"]; -FUMusicFilter *music = [FUMusicFilter alloc] initWithPath:path name:@"music"]; -music.musicPath = "music file path"; -``` - - - - - -### Poster Face Transfer - -Use FUPoster to initialize a poster face changing instance. Different from other functions, you don't need to assign the poster face changing instance to FURenderKit. You can directly use the poster face changing instance to process the image by using the relevant interface. - -Example Code: - -```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 = "The class that implements the proxy"; - -[poster renderWithInputImage:"Image in need of face transfer" templateImage: "poster image"]]; -``` - -#### Interface - -```objective-c -/** - * inputImage: Need to replace the face picture - * templateImage: The background template contains images of faces - */ -- (void)renderWithInputImage:(UIImage *)inputImage templateImage:(UIImage *)templateImage; - -/** - * Replace background image - */ -- (void)changeTempImage:(UIImage *)tempImage; - -/** - * Calculate face region - */ -+ (CGRect)cacluteRectWithIndex:(int)index height:(int)originHeight width:(int)orighnWidth; - -/** - * Select a specific face, - * Get faceId via checkPosterWithFaceIds:rectsMap - */ -- (void)chooseFaceID:(int)faceID; - - -@protocol FUPosterProtocol - -@optional -/** - * Detect the abnormal call of the face result of the input photo, which is used to handle the UI logic of the abnormal prompt. - * code: -1, Abnormal face (face detected but angle incorrect, return - 1),0: No face detected - */ -- (void)poster:(FUPoster *)poster inputImageTrackErrorCode:(int)code; - -/** - * Face detection result of poster template background image (abnormal call) - * code: -1, Abnormal face (face detected but angle incorrect, return - 1) 0: No face detected - */ -- (void)poster:(FUPoster *)poster tempImageTrackErrorCode:(int)code; - -/** - * When the input photo detects multiple faces, the method is called back to draw the multi face UI at UI layer - */ -- (void)poster:(FUPoster *)poster trackedMultiFaceInfos:(NSArray *)faceInfos; - -/** - * Result callback of inputimage and mask image synthesis - * data : Image data after poster mask and photo synthesis - */ - -- (void)poster:(FUPoster *)poster didRenderToImage:(UIImage *)image; - -/** - * To set the bending of the template, external input is required - * return double object - */ -- (NSNumber *)renderOfWarp; -``` - - - -## Other Modules - -FURenderKit defines the model classes of different functions. Except for sticker and poster face changing, the use of other functions is similar to beauty. Users only need to initialize the instance of the corresponding function and assign the value to FURenderKit, and then configure the function by modifying the properties of the corresponding instance or calling the relevant interface. The specific document needs to be supplemented. - - diff --git a/docs/resource/Face_Transfer_Interface_Documentation.md b/docs/Face_Transfer_Interface_Documentation.md similarity index 100% rename from docs/resource/Face_Transfer_Interface_Documentation.md rename to docs/Face_Transfer_Interface_Documentation.md diff --git a/docs/resource/Green_Screen_Function_Documentation.md b/docs/Green_Screen_Function_Documentation.md similarity index 100% rename from docs/resource/Green_Screen_Function_Documentation.md rename to docs/Green_Screen_Function_Documentation.md diff --git a/docs/resource/Hair_Beautification_Prop_Function_Documentation.md b/docs/Hair_Beautification_Prop_Function_Documentation.md similarity index 100% rename from docs/resource/Hair_Beautification_Prop_Function_Documentation.md rename to docs/Hair_Beautification_Prop_Function_Documentation.md diff --git a/docs/resource/Light_Makeup_Function_Documentation.md b/docs/Light_Makeup_Function_Documentation.md similarity index 100% rename from docs/resource/Light_Makeup_Function_Documentation.md rename to docs/Light_Makeup_Function_Documentation.md diff --git a/docs/resource/Live_Photo_Documentation.md b/docs/Live_Photo_Documentation.md similarity index 100% rename from docs/resource/Live_Photo_Documentation.md rename to docs/Live_Photo_Documentation.md diff --git a/docs/resource/Make_Up_Parameter_Specification.md b/docs/Make_Up_Parameter_Specification.md similarity index 100% rename from docs/resource/Make_Up_Parameter_Specification.md rename to docs/Make_Up_Parameter_Specification.md diff --git a/docs/resource/Makeup_Prop_Function_Documentation.md b/docs/Makeup_Prop_Function_Documentation.md similarity index 100% rename from docs/resource/Makeup_Prop_Function_Documentation.md rename to docs/Makeup_Prop_Function_Documentation.md diff --git a/docs/resource/Poster_Face_Transfer_Function_Documentation.md b/docs/Poster_Face_Transfer_Function_Documentation.md similarity index 100% rename from docs/resource/Poster_Face_Transfer_Function_Documentation.md rename to docs/Poster_Face_Transfer_Function_Documentation.md diff --git "a/docs/resource/controller\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/controller\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/controller\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/controller\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git a/docs/iOS_Nama_Demo_Guide.md b/docs/iOS_Nama_Demo_Guide.md old mode 100644 new mode 100755 diff --git "a/docs/iOS_Nama_Demo_\350\277\220\350\241\214\346\226\207\346\241\243.md" "b/docs/iOS_Nama_Demo_\350\277\220\350\241\214\346\226\207\346\241\243.md" old mode 100644 new mode 100755 index 409d2d39..8c5f49ba --- "a/docs/iOS_Nama_Demo_\350\277\220\350\241\214\346\226\207\346\241\243.md" +++ "b/docs/iOS_Nama_Demo_\350\277\220\350\241\214\346\226\207\346\241\243.md" @@ -2,6 +2,20 @@ ------ +级别:Public +更新日期:2022-11-09 +SDK版本: 8.4.0 + +### 最新更新内容: +1)【美颜】新增眉毛粗细、眼睛位置、眼睑下至、嘴唇厚度、五官立体功能,优化瘦脸、下巴功能 +2)【美妆】新增嘴唇遮挡分割算法,实现口红遮挡不穿帮 +3)【人脸关键点】算法升级,全面优化点位稳定性 +4)【人像分割】新增会议场景专用模式 +5)【人体检测】全平台模型检出率提升 +6)【手势识别】全平台模型检出率及误检率优化 + +------ + 级别:Public 更新日期:2022-09-09 SDK版本: 8.3.1 @@ -167,33 +181,36 @@ SDK版本: 7.4.0 +docs //文档 +FUCommonUIComponent //UI组件 +FUVideoComponent //视频解码编码组件 + +FUBeautyComponent //美颜组件(UI和加载逻辑) + +FUMakeupComponent //美妆组件(UI和加载逻辑) + +FUGreenScreenComponent //绿幕组件(UI和加载逻辑) +FULiveDemo //原代码目录 - +Modules //所有功能模块 - +Homepage //主页模块 - +Render //特效渲染基础模块 - +Beauty //美颜模块 + +Homepage //主页模块 + +Render //相机、视频、图片渲染模块,所有特效渲染模块基于此模块 + +MediaPicker //视频、图片选择模块 + +Modules //所有特效功能模块 + +Beauty //美颜模块 + +Makeup //美妆模块 + ... + +Helper //工具类 + +Category //类别 + -FULiveDefine //宏、枚举、内联函数等 + -FUNetworkingHelper //网络请求工具 + -FUUtility //共用方法类 + +Resource //资源文件(JSON、Bundle) + +Homepage //主页模块资源 + +Render //相机、视频、图片渲染模块资源 + +Sticker //贴纸模块资源 + ... + +Application //工程文件 + -Assets //图片资源 + -Localizable.strings //国际化支持字符串文件 ... - +Helpers //主要业务管理类 - +UI //公共UI控件 - +Protocol //接口文件 - +Category //类别 - -FUManager //Nama业务管理类 - ... - +Config //配置文件目录 - -FULiveDefine.h //宏、常量声明 - -DataSource //主界面,权限,item 道具配置类 - -makeup.json //美妆单个妆数组 - -makeup_whole.json //美妆整体妆容配置 - +Resource - +items //各个模块道具资源 - +Lib //nama SDK - -authpack.h //权限文件 - -FURenderKit.framework //动态库 - +Resources //各个能力相关的资源 - +docs //文档目录 - +Pods //三方库管理 - -FULiveDemo.xcworkspace //工程文件 - + +FURenderKit + +FURenderKit.framework //FURenderKit动态库 + +Resources //FURenderKit必要资源 + -FURenderKitManger //FURenderKit管理类 + -authpack.h //鉴权文件(需要替换自己的鉴权文件) ``` ------ diff --git a/docs/iOS_Nama_OC_API_Reference.md b/docs/iOS_Nama_OC_API_Reference.md old mode 100644 new mode 100755 diff --git "a/docs/iOS_Nama_OC_API_\345\217\202\350\200\203\346\226\207\346\241\243.md" "b/docs/iOS_Nama_OC_API_\345\217\202\350\200\203\346\226\207\346\241\243.md" old mode 100644 new mode 100755 diff --git a/docs/iOS_Nama_SDK_Integration_Guide.md b/docs/iOS_Nama_SDK_Integration_Guide.md index af258ace..060b3ac1 100755 --- a/docs/iOS_Nama_SDK_Integration_Guide.md +++ b/docs/iOS_Nama_SDK_Integration_Guide.md @@ -800,7 +800,7 @@ load the prop `tongue.bundle`, ```objective-c NSData *tongueData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tongue.bundle" ofType:nil]]; -int ret0 = fuLoadTongueModel((void *)tongueData.bytes, (int)tongueData.length) ; +int ret0 = fuLoadTongueModel((void *)tongueData.bytes, (int)tongueData.length); ``` ### 4.10 Face Fusion diff --git "a/docs/iOS_Nama_SDK_\351\233\206\346\210\220\346\214\207\345\257\274\346\226\207\346\241\243.md" "b/docs/iOS_Nama_SDK_\351\233\206\346\210\220\346\214\207\345\257\274\346\226\207\346\241\243.md" index 7ce4d358..ff19defd 100755 --- "a/docs/iOS_Nama_SDK_\351\233\206\346\210\220\346\214\207\345\257\274\346\226\207\346\241\243.md" +++ "b/docs/iOS_Nama_SDK_\351\233\206\346\210\220\346\214\207\345\257\274\346\226\207\346\241\243.md" @@ -1,161 +1,5 @@ # SDK集成指导文档-iOS ------- - -级别:Public -更新日期:2022-09-09 -SDK版本: 8.3.1 - -### 最新更新内容: - -1)适配Mac M系列平台 -2)鉴权模块升级 -3)新增表情系数映射接口、人脸检测频率接口 -4)修复一些bug - ------- - -级别:Public -更新日期:2022-07-21 -SDK版本: 8.3.0 - -### 最新更新内容: - -1)优化人像分割效果:全面提升人像分割效果,优化了分割精度、迟滞感、边缘细腻度 -2)优化绿幕分割效果:全面提升绿幕、白幕分割效果,优化了绿幕场景下边缘泛绿、锯齿、抖动的问题;白幕场景下背景闪烁、轮廓不干净的问题 -3)优化手势识别效果:优化手势识别检出率,并针对性地解决一些误检问题 -4)优化美颜效果:优化瘦脸效果,新增眉毛上下、眉间距2个功能 -5)优化美妆效果:更新4款眉毛效果 -6)解决部分已知bug - ------- - -级别:Public -更新日期:2022-06-16 -SDK版本: 8.2.1 - -### 最新更新内容: - -1)修复一些bug - ------- - -级别:Public -更新日期:2022-04-15 -SDK版本: 8.2.0 - -### 最新更新内容: - -1)提升美颜效果,包括6大功能维度:祛黑眼圈功能保留卧蚕,优化祛黑效果;祛法令纹改善涂抹问题;嘴型功能、大眼功能优化等比例问题;小脸功能优化侧脸自然度问题;新增粉嫩透亮的美白功能 -2)提高人脸检测功能小人脸模型的检出率,更好地支持远距离场景 -3)提高人脸基础关键点稳定性 -4)解决部分bug - ------- - -级别:Public -更新日期:2022-01-27 -SDK版本: 8.1.0 - -### 最新更新内容: - -1)更新人脸检测模型为全角度,高端机可自由选择是否启动小人脸检测 -2)更新PTA侧驱动相关接口 -3)解决部分已知bug - ------- - -级别:Public -更新日期:2021-12-24 -SDK版本: 8.0.2 - -### 最新更新内容: - -1)解决部分bug - ------- - -级别:Public -更新日期:2021-11-17 -SDK版本: 8.0.1 - -### 最新更新内容: - -1)解决部分bug - ------- - -级别:Public -更新日期:2021-10-27 -SDK版本: 8.0.0 - -### 最新更新内容: - -1)美颜特效优化,优化了磨皮、大眼、脸型等8大功能,对皮肤细节、轮廓线条、变形比例等多维度的效果进行提升 -2)新增分机型适配策略,在高端机上使用效果更佳的均匀磨皮,中低端机上使用性能效果均衡的精细磨皮,提高整体设备的利用率 -3)美妆优化,优化了口红、眉毛、睫毛、美瞳的自然度,新增了口红质地和风格组合妆 -4)人脸检测算法优化,优化了检出率及误检率 -5)人像分割算法优化,优化PC端半身场景下,分割准确性、分割边缘平滑度、背景误识别等问题 -6)新增绿幕安全区域功能,支持根据模板对制定区域进行绿幕抠像,模板支持客户自定义 -7)优化多个功能混用时的渲染时序问题 -8)解决一些bug - ------- - -级别:Public -更新日期:2021-07-09 -SDK版本: 7.4.1 - -### 最新更新内容: - -1)更新精品贴纸8款,包含2款PK游戏,5款装饰及互动贴纸,1款全身驱动道具 -2)更新2款中国风Animoji模型 -3)修复人像分割贴纸效果问题,修复后人像分割结果和贴纸效果会同时出现 -4)修复一些bug,包括高分辨率磨皮效果问题,人脸检测与贴纸绘制的时序问题 - ------- - -级别:Public -更新日期:2021-04-19 -SDK版本: 7.4.0 - ------- - -### 最新更新内容: - -2021-04-19 7.4.0更新说明 -1)【Demo层】重构特效Demo,将面向过程变成改为面向对象,整体结构逻辑更清晰,客户调用更便捷。同时具有节省内存、优化itemID自动销毁逻辑、精简用户传入信息过程,低耦合性提高架构灵活度等多方优势 -2)新增情绪识别功能,支持8种基本的饱满情绪检测 -3)新增内容服务模块,展示游戏道具及精品贴纸,主要包括游戏类、情节类、头饰类、氛围类等丰富的特效道具 -4)新增异步接口,改善用户在低端设备上帧率不足问题 -5)优化美体性能,Android端帧率上升24%,iOS端耗时下降13% -6)优化人像分割性能,Andriod端帧率上升39%,iOS耗时下降39% -7)优化人像分割效果,主要包括优化缝隙问题,使人像分割更加贴合人体,不会有明显空隙;提升人体分割准确性,减少背景误识别情况 -8)增加人像分割新玩法,开放用户自定义背景接口,便于用户快速换背景;支持人像描边玩法,可自定义描边的宽度、距离、颜色 -9)增加Animoji无尾熊模型;优化Animoji面部驱动效果,提升驱动后模型的稳定性和灵敏度 -10)优化美妆效果,主要包括唇部遮挡时口红不再显现;提升美瞳的贴合度;增加多款美瞳素材 - ------- - -### 最新更新内容: - -**2021-1-25 v7.3.2: ** - -更新内容 - -- 优化人脸表情跟踪驱动性能。 -- fuSetup 函数改为线程安全。 -- fuSetUp 、fuCreateItemFromPackage、fuLoadAIModel函数增加异常处理,增强鲁棒性。 -- 修复自定义哈哈镜功能效果问题。 -- 修复SDK在Mac 10.11上crash问题。 -- 修复SDK在贴纸和Animoji混用时crash问题。 - ------- -## 目录: -本文档内容目录: - -[TOC] - ------ ## 1. 简介 本文档旨在说明如何将Faceunity Nama SDK集成宿主APP中。 @@ -172,33 +16,36 @@ SDK版本: 7.4.0 +docs //文档 +FUCommonUIComponent //UI组件 +FUVideoComponent //视频解码编码组件 + +FUBeautyComponent //美颜组件(UI和加载逻辑) + +FUMakeupComponent //美妆组件(UI和加载逻辑) + +FUGreenScreenComponent //绿幕组件(UI和加载逻辑) +FULiveDemo //原代码目录 - +Modules //所有功能模块 - +Homepage //主页模块 - +Render //特效渲染基础模块 - +Beauty //美颜模块 + +Homepage //主页模块 + +Render //相机、视频、图片渲染模块,所有特效渲染模块基于此模块 + +MediaPicker //视频、图片选择模块 + +Modules //所有特效功能模块 + +Beauty //美颜模块 + +Makeup //美妆模块 ... - +Helpers //主要业务管理类 - +UI //公共UI控件 - +Protocol //接口文件 - +Category //类别 - -FUManager //Nama业务管理类 - ... - +Config //配置文件目录 - -FULiveDefine.h //宏、常量声明 - -DataSource //主界面,权限,item 道具配置类 - -makeup.json //美妆单个妆数组 - -makeup_whole.json //美妆整体妆容配置 - +Resource - +items //各个模块道具资源 - +Lib //nama SDK - -authpack.h //权限文件 - -FURenderKit.framework //动态库 - +Resources //各个能力相关的资源 - +docs //文档目录 - +Pods //三方库管理 - -FULiveDemo.xcworkspace //工程文件 - + +Helper //工具类 + +Category //类别 + -FULiveDefine //宏、枚举、内联函数等 + -FUNetworkingHelper //网络请求工具 + -FUUtility //共用方法类 + +Resource //资源文件(JSON、Bundle) + +Homepage //主页模块资源 + +Render //相机、视频、图片渲染模块资源 + +Sticker //贴纸模块资源 + ... + +Application //工程文件 + -Assets //图片资源 + -Localizable.strings //国际化支持字符串文件 + ... + +FURenderKit + +FURenderKit.framework //FURenderKit动态库 + +Resources //FURenderKit必要资源 + -FURenderKitManger //FURenderKit管理类 + -authpack.h //鉴权文件(需要替换自己的鉴权文件) ``` ------ @@ -221,24 +68,24 @@ Xcode 8或更高版本 Nama全功能版本(支持物理特效): ``` -pod 'Nama', '8.3.0' +pod 'Nama', '8.4.0' ``` Nama-lite版本(体积更小,包含人脸相关的功能(海报换脸除外)): ``` -pod 'Nama-lite', '8.3.0' +pod 'Nama-lite', '8.4.0' ``` FURenderKit全功能版本(支持物理特效): ``` -pod 'FURenderKit', '8.3.0' +pod 'FURenderKit', '8.4.0' ``` FURenderKit-lite版本: ``` -pod 'FURenderKit-lite', '8.3.0' +pod 'FURenderKit-lite', '8.4.0' ``` 接下来执行: @@ -255,15 +102,15 @@ pod repo update 或 pod setup #### 3.2.2 直接下载 -Nama全功能版本(支持物理特效):[FaceUnity-SDK-iOS-v8.3.1.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FaceUnity-SDK-iOS-v8.3.1.zip) +Nama全功能版本(支持物理特效):[FaceUnity-SDK-iOS-v8.4.0.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FaceUnity-SDK-iOS-v8.4.0.zip) -Nama-lite版本: 版(体积更小,包含人脸相关的功能(海报换脸除外)):[FaceUnity-SDK-iOS-lite-v8.3.1.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FaceUnity-SDK-iOS-lite-v8.3.1.zip) +Nama-lite版本: 版(体积更小,包含人脸相关的功能(海报换脸除外)):[FaceUnity-SDK-iOS-lite-v8.4.0.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FaceUnity-SDK-iOS-lite-v8.4.0.zip) FURenderKit全功能版本(支持物理特效): - [FURenderKit-v8.3.1.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FURenderKit-v8.3.1.zip) + [FURenderKit-v8.4.0.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FURenderKit-v8.4.0.zip) FURenderKit-lite版本: - [FURenderKit-lite-v8.3.1.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FURenderKit-lite-v8.3.1.zip) + [FURenderKit-lite-v8.4.0.zip](https://fu-sdk.oss-cn-hangzhou.aliyuncs.com/FURenderKit-lite-v8.4.0.zip) 下载完成并解压后将库文件夹拖入到工程中,并勾选上 Copy items if needed,如图: @@ -780,7 +627,7 @@ int itemHandle = [FURenderer itemWithContentsOfFile:path]; ```objective-c NSData *tongueData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tongue.bundle" ofType:nil]]; -int ret0 = fuLoadTongueModel((void *)tongueData.bytes, (int)tongueData.length) ; +int ret0 = fuLoadTongueModel((void *)tongueData.bytes, (int)tongueData.length); ``` ### 4.8 海报换脸 diff --git "a/docs/resource/\344\272\272\344\275\223\345\212\250\344\275\234\350\257\206\345\210\253\346\226\207\346\241\243.md" "b/docs/\344\272\272\344\275\223\345\212\250\344\275\234\350\257\206\345\210\253\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\344\272\272\344\275\223\345\212\250\344\275\234\350\257\206\345\210\253\346\226\207\346\241\243.md" rename to "docs/\344\272\272\344\275\223\345\212\250\344\275\234\350\257\206\345\210\253\346\226\207\346\241\243.md" diff --git "a/docs/resource/\346\265\267\346\212\245\346\215\242\350\204\270\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\346\265\267\346\212\245\346\215\242\350\204\270\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\346\265\267\346\212\245\346\215\242\350\204\270\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\346\265\267\346\212\245\346\215\242\350\204\270\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/FULiveDemo/Lib/FURenderKit.framework/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" similarity index 84% rename from "FULiveDemo/Lib/FURenderKit.framework/FURenderKit\345\277\253\351\200\237\351\233\206\346\210\220\346\226\207\346\241\243.md" rename to "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" index f61ef975..36487454 100644 --- "a/FULiveDemo/Lib/FURenderKit.framework/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" @@ -4,7 +4,7 @@ ### 通过cocoapods集成 ``` -pod 'FURenderKit', '8.3.0' +pod 'FURenderKit', '8.4.0' ``` 接下来执行: @@ -314,26 +314,93 @@ AI能力相关的功能都通过FUAIKit 加载或获取 @property (nonatomic, assign) FUFaceProcessorFaceLandmarkQuality faceProcessorFaceLandmarkQuality; // 人脸算法质量 -//加载 AI bundle +/// 加载AI模型 +/// @param type AI类型 +/// @param dataPath 模型路径 + (void)loadAIModeWithAIType:(FUAITYPE)type dataPath:(NSString *)dataPath; -//卸载 AI bundle + +/// 卸载AI模型 +/// @param type AI 类型 + (void)unloadAIModeForAIType:(FUAITYPE)type; -//卸载所有 AI bundle + +/// 卸载所有的AI模型 + (void)unloadAllAIMode; +/// 判断某 AI 模型是否加载 +/// @param type AI 类型 + (BOOL)loadedAIType:(FUAITYPE)type; -//加载舌头驱动 + +/// 加载舌头模型 +/// @param modePath 舌头模型地址 + (void)loadTongueMode:(NSString *)modePath; -//脸部类型 单独加载 + +/// 设置 AI 识别类型 +/// @param type AI 识别类型 + (void)setTrackFaceAIType:(FUAITYPE)type; +/// 对输入的图像进行 AI 识别,支持人脸、身体、手指能类型的识别 + (int)trackFaceWithInput:(FUTrackFaceInput *)trackFaceInput; -// Reset ai model HumanProcessor's tracking state. -+ (void)resetHumanProcessor; -//get ai model HumanProcessor's tracking result. -+ (int)aiHumanProcessorNums; -//人脸检测置信度 + +/// 图像明显发生改变时调用该接口重置内部检测结果 ++ (void)resetTrackedResult; + +/// 跟踪到的人脸数量 ++ (int)aiFaceProcessorNums; + +/// 设置面部参数 ++ (void)setFaceTrackParam:(NSString *)param value:(int)value; + +/// 获取人脸信息: ++ (int)getFaceInfo:(int)faceId + name:(NSString *)name + pret:(float *)pret + number:(int)number; + +/// 设置了InputCameraMatrix之后获取获取人脸信息 ++ (int)getRotatedFaceInfo:(int)faceId + name:(NSString *)name + pret:(float *)pret + number:(int)number; + +/// 人脸检测置信度 + (float)fuFaceProcessorGetConfidenceScore:(int)index; + +/// 设置跟踪到人脸时每次检测的间隔帧数 +/// @param frames 帧数 +/// @note 底层默认间隔帧数为7 ++ (void)setFaceProcessorDetectEveryFramesWhenFace:(int)frames; + +/// 设置未跟踪到人脸时每次检测的间隔帧数 +/// @param frames 帧数 +/// @note 底层默认间隔帧数为7 ++ (void)setFaceProcessorDetectEveryFramesWhenNoFace:(int)frames; + +/// 设置人脸离开延迟打开或关闭 +/// @param enable YES为打开 NO为关闭 ++ (void)setFaceDelayLeaveEnable:(BOOL)enable; + +/// 跟踪到的人体数量 ++ (int)aiHumanProcessorNums; + +/// 重置身体识别 ++ (void)resetHumanProcessor; + +/// 设置人体分割场景类型 ++ (void)setHumanSegmentationSceneType:(FUHumanSegmentationSceneType)type; + +/// 跟踪到的手势数量 ++ (int)aiHandDistinguishNums; + +/// 获取手势类型 +/// @param handIndex aiHandDistinguishNums返回手的索引 ++ (FUAIGESTURETYPE)fuHandDetectorGetResultGestureType:(int)handIndex; + +/// 设置未跟踪到手势时每次检测的间隔帧数 +/// @param frames 帧数 ++ (void)setHandDetectEveryFramesWhenNoHand:(int)frames; + +/// 动作识别: actionId index of fuHumanProcessorGetNumResults ++ (int)fuHumanProcessorGetResultActionType:(int)actionId; ``` 其他接口参考 FUAIKit.h @@ -367,7 +434,7 @@ beauty.filterName = FUFilterOrigin; beauty.colorLevel = 0.3; beauty.redLevel = 0.3; -beauty.blurLevel = 0.7*6; +beauty.blurLevel = 4.2; beauty.heavyBlur = 0; beauty.blurType = 3; @@ -381,6 +448,7 @@ beauty.removeNasolabialFoldsStrength = 0.0; beauty.faceShapeLevel = 1.0; beauty.changeFrames = 0; beauty.faceShape = 4; +beauty.faceThreed = 0.0; beauty.eyeEnlarging = 0.4; beauty.cheekThinning = 0.0; @@ -403,6 +471,10 @@ beauty.intensityLowerJaw= 0.0; beauty.intensityEyeCircle = 0.0; beauty.intensityBrowHeight = 0.5; beauty.intensityBrowSpace = 0.5; +beauty.intensityEyeLid = 0.0; +beauty.intensityEyeHeight = 0.5; +beauty.intensityBrowThick = 0.5; +beauty.intensityLipThick = 0.5; ``` @@ -426,47 +498,55 @@ FUSticker *sticker1 = [[FUSticker alloc] initWithPath:path1 name:@"sticker"]; [[FURenderKit shareRenderKit].stickerContainer removeSticker:sticker1]; ``` -带属性的特殊贴纸说明: +### 人像分割 + +初始化一个FUAISegment的实例,修改好参数后可以直接赋值给 FURenderKit或者也可以参考贴纸的方式加入stickerContainer中;修改属性示例如下,属性对应的含义详见FUAISegment.h 注释: ```objective-c -1. 人像分割 FUAISegment - 外轮廓bundle 的用法 -NSString *path = [[NSBundle mainBundle] pathForResource:@"human_outline" ofType:@"bundle"]; -FUAISegment *outline = [FUAISegment alloc] initWithPath:path name:@"sticker"]; +1. 外轮廓bundle的用法 +NSString *path = [[NSBundle mainBundle] pathForResource:@"human_outline_740" ofType:@"bundle"]; +FUAISegment *outline = [FUAISegment alloc] initWithPath:path name:@"human_outline"]; 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]; +[FURenderKit shareRenderKit].segmentation = outline; -1. 人像分割 FUAISegment - 自定义背景视频 +2. 自定义背景视频的用法 NSString *path = [[NSBundle mainBundle] pathForResource:@"bg_segment" ofType:@"bundle"]; -FUAISegment *segment = [FUAISegment alloc] initWithPath:path name:@"sticker"]; +FUAISegment *segment = [FUAISegment alloc] initWithPath:path name:@"bg_segment"]; segment.videoPath = @“背景视频路径”;//NSURL or NSString [segment startVideoDecode]; -//获取视频解析的第一帧图片 -UIImage *image = [segment readFirstFrame]; -[[FURenderKit shareRenderKit].stickerContainer replaceSticker:outline withSticker:segment completion:nil]; +[FURenderKit shareRenderKit].segmentation = segment; -1. 人像分割 FUAISegment - 自定义背景照片 +3. 自定义背景照片的用法 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 向下 +### 音乐滤镜 + +初始化一个FUMusicFilter的实例,修改好参数后可以直接赋值给 FURenderKit或者也可以参考贴纸的方式加入stickerContainer中;修改属性示例如下,属性对应的含义详见FUMusicFilter.h 注释: -4. FUMusicFilter - 音乐滤镜 +```objective-c NSString *path = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"bundle"]; FUMusicFilter *music = [FUMusicFilter alloc] initWithPath:path name:@"music"]; music.musicPath = "音乐文件路径"; +[FURenderKit shareRenderKit].musicFilter = music; ``` -带属性的特殊贴纸说明: +### 其他带属性的特殊贴纸说明 + +```objective-c +1. FUAnimoji - 表情 +NSString *path = [[NSBundle mainBundle] pathForResource:@"animoji" ofType:@"bundle"]; +FUAnimoji *animoji = [FUAnimoji alloc] initWithPath:path name:@"animoji"]; +animoji.flowEnable = YES; //卡通表情是否跟随人物移动而移动, YES,跟随, NO 不跟随 +2. FUGesture -- 手势 +NSString *path = [[NSBundle mainBundle] pathForResource:@"fugesture" ofType:@"bundle"]; +FUGesture *gesture = [FUGesture alloc] initWithPath:path name:@"animoji"]; +gesture.handOffY = YES; //可以单独调整比心的偏移量,> 0 向上,< 0 向下 +``` ### 海报换脸 diff --git "a/docs/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" similarity index 94% rename from "docs/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" rename to "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" index 4a27c616..c226ee09 100644 --- "a/docs/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" @@ -1,6 +1,6 @@ ---- -更新时间: 2022-07-21 +更新时间: 2022-10-28 创建时间: 2020-01-22 @@ -132,6 +132,7 @@ ____ | colorLevel | double | 美白 取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值0.0 | color_level | | redLevel | double | 红润 取值范围 0.0-1.0,0.0为无效果,1.0为最大效果,默认值0.0 | red_level | | sharpen | double | 锐化 锐化程度,取值范围0.0-1.0,默认0.0 | sharpen | +| faceThreed | double | 五官立体 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 | face_threed | | eyeBright | double | 亮眼 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 亮眼为高级美颜功能,需要相应证书权限才能使用 | eye_bright | | toothWhiten | double | 美牙 取值范围 0.0-1.0, 0.0为无效果,1.0为最大效果,默认值0.0 美牙为高级美颜功能,需要相应证书权限才能使用 | tooth_whiten | | removePouchStrength | double | 去黑眼圈 范围0.0~1.0, 0.0为无效果,1.0最强,默认0.0 去黑眼圈为高级美颜功能,需要相应证书权限才能使用 | remove_pouch_strength | @@ -160,13 +161,19 @@ ____ | intensityForehead | double | 额头调整程度范围0.0-1.0,0.5-0.0是变小,0.5-1.0是变大 默认0.5 | intensity_forehead | | intensityNose | double | 瘦鼻程度范围0.0-1.0 1.0程度最强 默认0.0 | intensity_nose | | intensityMouth | double | 嘴型调整程度范围0.0-1.0,0.5-0.0是变大,0.5-1.0是变小 默认0.5 | intensity_mouth | +| intensityLipThick | double | 嘴唇厚度 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变薄, 0.5-1是变厚, 默认值0.5 | intensity_lip_thick | +| intensityEyeHeight | double | 眼睛位置 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变低, 0.5-1是变高, 默认值0.5 | intensity_eye_height | | intensityCanthus | double | 开眼角程度范围0.0~1.0 1.0程度最强 默认0.0 | intensity_canthus | +| intensityEyeLid | double | 眼睑下至 取值范围 0.0-1.0, 0.0为无效果, 1.0为最大效果, 默认值0.0 | intensity_eye_lid | | 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-0.0是变短,0.5-1.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 | +| intensityEyeCircle | double | 圆眼程度范围0.0~1.0 1.0程度最强 | intensity_eye_circle | +| intensityBrowHeight | double | 眉毛上下 取值范围 0.0-1.0, 0.5-0是向上, 0.5-1是向下, 默认值0.5 | intensity_brow_height | +| intensityBrowSpace | double | 眉间距 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变小, 0.5-1是变大, 默认值0.5 | intensity_brow_space | +| intensityBrowThick | double | 眉毛粗细 取值范围 0.0-1.0, 默认值0.5, 0.5-0是变细, 0.5-1是变粗, 默认值0.5 | intensity_brow_thick | ____ @@ -290,6 +297,7 @@ ____ | cheek_narrow | 窄脸 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | | cheek_small | 小脸 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | | eye_enlarging | 大眼 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0), FUBeautyPropertyMode3(v8.2.0, 高性能设备推荐) | + | intensity_chin | 下巴 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.4.0) | | intensity_forehead | 额头 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | | intensity_nose | 瘦鼻 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0) | | intensity_mouth | 嘴型 | FUBeautyPropertyMode1, FUBeautyPropertyMode2(v8.0.0), FUBeautyPropertyMode3(v8.2.0, 高性能设备推荐) | @@ -325,6 +333,7 @@ ___ | ------------- | ---- | ------------------------------------------------------------ | --------------- | | isMakeUpOn | BOOL | 美妆开关,1开 0关 | is_makeup_on | | isClearMakeup | BOOL | 在解绑妆容时是否清空除口红以外的妆容,0表示不清空,1表示清空,口红可由强度进行设置 | is_clear_makeup | +| makeupSegmentation | BOOL | 美妆分割,1开 0关 | machine_level | | lipType | int | 口红类型 0雾面 2润泽Ⅰ 3珠光 6高性能(不支持双色)7润泽Ⅱ | lip_type | | isLipHighlightOn | BOOL | 是否开启口红高光 1开 0关 | makeup_lip_highlight_enable | | isTwoColor | int | 口红双色开关,0为关闭,1为开启,如果想使用咬唇,开启双色开关,并且将makeup_lip_color2的值都设置为0 | is_two_color | @@ -564,20 +573,6 @@ ___ * 接口说明 -```objective-c -/** - * 根据传入的图进和点位进行取色,获取到的颜色需要生效直接设置 self.keyColor - */ -+ (UIColor *)pixelColorWithmage:(UIImage *)originImage point:(CGPoint)point; -``` - -```objective-c -/** - * 根据传入的CVPixelBufferRef和点位进行取色 - */ -+ (UIColor *)pixelColorWithPixelBuffer:(CVPixelBufferRef)buffer point:(CGPoint)point; -``` - ```objective-c /** * 开始视频播放 @@ -600,16 +595,15 @@ ___ | backgroundImage | UIImage | 设置背景图片 | | | safeAreaImage | UIImage | 设置安全区域图片 | | | videoPath | NSString | 设置背景视频 | | -| keyColor | FUColor | 设置绿幕取色, 颜色值按照十六进制大小设置 ex: RGBA (255.0, 255.0, 255.0, 1.0) | key_color | -| chromaThres | double | 默认值为0.518,取值范围0.0-1.0,相似度:色度最大容差,色度最大容差值越大,更多幕景被抠除 | chroma_thres | -| chromaThrest | double | 默认值为0.22,取值范围0.0-1.0,平滑:色度最小限差,值越大,更多幕景被扣除 | chroma_thres_T | -| alphal | double | 默认值为0.0,取值范围0.0-1.0,祛色度:图像前后景祛色度过度,值越大,两者边缘处透明过度更平滑 | alpha_L | +| keyColor | FUColor | 设置绿幕关键颜色, 默认值为[0,255,0],取值范围[0-255,0-255,0-255] | key_color | +| chromaThres | double | 取值范围0.0-1.0,相似度:色度最大容差,色度最大容差值越大,更多幕景被抠除 | chroma_thres | +| chromaThrest | double | 取值范围0.0-1.0,平滑度:色度最小限差,值越大,更多幕景被扣除 | chroma_thres_T | +| alphal | double | 取值范围0.0-1.0,祛色度:图像前后景祛色度过度,值越大,两者边缘处透明过度更平滑 | 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 | 当前是否正在进行抠图,抠图就停止绿慕渲染 | | -| pause | BOOL | 是否停止渲染 | | +| pause | BOOL | 背景视频播放是否暂停 | | *** @@ -706,7 +700,7 @@ ___ | lineColor | FUColor | 轮廓分割线颜色 | lineColor | | backgroundImage | UIImage | 设置背景视频 | | | videoPath | NSURL 或者 NSString | 设置背景视频 | | -| pause | BOOL | 是否停止渲染 | | +| pause | BOOL | 背景视频播放是否暂停 | | * 接口说明 @@ -784,7 +778,7 @@ ___ | 属性名称 | 类型 | 说明 | key | | -------- | ------ | -------------------------------------- | ----- | -| style | double | 范围 0.0 - 7.0,对应不同的动漫滤镜效果 | style | +| style | FUComicFilterStyle | 范围 -1 - 7,对应不同的动漫滤镜效果 | style | * style 值介绍 diff --git "a/docs/resource/\347\273\277\345\271\225\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\347\273\277\345\271\225\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\347\273\277\345\271\225\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\347\273\277\345\271\225\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/docs/resource/\347\276\216\344\275\223\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\347\276\216\344\275\223\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\347\276\216\344\275\223\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\347\276\216\344\275\223\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/docs/resource/\347\276\216\345\217\221\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\347\276\216\345\217\221\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\347\276\216\345\217\221\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\347\276\216\345\217\221\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/docs/resource/\347\276\216\345\246\206\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\347\276\216\345\246\206\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\347\276\216\345\246\206\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\347\276\216\345\246\206\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/docs/resource/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/docs/resource/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243_\345\237\272\347\241\200\347\276\216\351\242\234.md" "b/docs/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243_\345\237\272\347\241\200\347\276\216\351\242\234.md" similarity index 100% rename from "docs/resource/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243_\345\237\272\347\241\200\347\276\216\351\242\234.md" rename to "docs/\347\276\216\351\242\234\351\201\223\345\205\267\345\212\237\350\203\275\346\226\207\346\241\243_\345\237\272\347\241\200\347\276\216\351\242\234.md" diff --git "a/docs/resource/\350\241\250\346\203\205\345\212\250\345\233\276\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\350\241\250\346\203\205\345\212\250\345\233\276\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\350\241\250\346\203\205\345\212\250\345\233\276\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\350\241\250\346\203\205\345\212\250\345\233\276\345\212\237\350\203\275\346\226\207\346\241\243.md" diff --git "a/docs/resource/\350\275\273\347\276\216\345\246\206\345\212\237\350\203\275\346\226\207\346\241\243.md" "b/docs/\350\275\273\347\276\216\345\246\206\345\212\237\350\203\275\346\226\207\346\241\243.md" similarity index 100% rename from "docs/resource/\350\275\273\347\276\216\345\246\206\345\212\237\350\203\275\346\226\207\346\241\243.md" rename to "docs/\350\275\273\347\276\216\345\246\206\345\212\237\350\203\275\346\226\207\346\241\243.md"