100Years 2 months ago
parent
commit
63cadf4ceb
61 changed files with 380 additions and 17 deletions
  1. 43 2
      Girly.xcodeproj/project.pbxproj
  2. 1 1
      Girly.xcodeproj/xcuserdata/100years.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 14 1
      Girly/AppDelegate.swift
  4. BIN
      Girly/Assets.xcassets/App-Icon.imageset/App-Icon 1.png
  5. BIN
      Girly/Assets.xcassets/App-Icon.imageset/App-Icon.png
  6. 1 1
      Girly/Assets.xcassets/App-Icon.imageset/Contents.json
  7. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-1024.png
  8. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png
  9. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png
  10. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
  11. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
  12. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png
  13. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png
  14. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
  15. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
  16. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
  17. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
  18. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png
  19. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png
  20. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png
  21. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
  22. BIN
      Girly/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
  23. BIN
      Girly/Assets.xcassets/Flash/launch_logo1.imageset/launch_logo1@2x.png
  24. BIN
      Girly/Assets.xcassets/Flash/launch_logo1.imageset/launch_logo1@3x.png
  25. 1 1
      Girly/Assets.xcassets/Flash/light_disco.imageset/Contents.json
  26. BIN
      Girly/Assets.xcassets/Flash/light_disco.imageset/light_disco@2.png
  27. BIN
      Girly/Assets.xcassets/Flash/light_disco.imageset/light_disco@2x.png
  28. BIN
      Girly/Assets.xcassets/Flash/light_disco.imageset/light_disco@3x.png
  29. BIN
      Girly/Assets.xcassets/Flash/light_night.imageset/light_night@2x.png
  30. BIN
      Girly/Assets.xcassets/Flash/light_night.imageset/light_night@3x.png
  31. BIN
      Girly/Assets.xcassets/Flash/light_sos.imageset/light_sos@2x.png
  32. BIN
      Girly/Assets.xcassets/Flash/light_sos.imageset/light_sos@3x.png
  33. BIN
      Girly/Assets.xcassets/Flash/light_warning.imageset/light_warning@2x.png
  34. BIN
      Girly/Assets.xcassets/Flash/light_warning.imageset/light_warning@3x.png
  35. 6 0
      Girly/Assets.xcassets/Launch/Contents.json
  36. 1 2
      Girly/Assets.xcassets/Launch/bootPage_0.imageset/Contents.json
  37. BIN
      Girly/Assets.xcassets/Launch/bootPage_0.imageset/bootPage_0.png
  38. 21 0
      Girly/Assets.xcassets/Launch/bootPage_1.imageset/Contents.json
  39. BIN
      Girly/Assets.xcassets/Launch/bootPage_1.imageset/bootPage_1.png
  40. 21 0
      Girly/Assets.xcassets/Launch/bootPage_2.imageset/Contents.json
  41. BIN
      Girly/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_2.png
  42. 22 0
      Girly/Assets.xcassets/Launch/launch_icon.imageset/Contents.json
  43. BIN
      Girly/Assets.xcassets/Launch/launch_icon.imageset/launch_icon@2x.png
  44. BIN
      Girly/Assets.xcassets/Launch/launch_icon.imageset/launch_icon@3x.png
  45. 22 0
      Girly/Assets.xcassets/Launch/launch_title.imageset/Contents.json
  46. BIN
      Girly/Assets.xcassets/Launch/launch_title.imageset/launch_title@2x.png
  47. BIN
      Girly/Assets.xcassets/Launch/launch_title.imageset/launch_title@3x.png
  48. 21 0
      Girly/Assets.xcassets/Light/lignt_tutorials.imageset/Contents.json
  49. BIN
      Girly/Assets.xcassets/Light/lignt_tutorials.imageset/lignt_tutorials@3x.png
  50. 22 0
      Girly/Assets.xcassets/icon/guide.imageset/Contents.json
  51. BIN
      Girly/Assets.xcassets/icon/guide.imageset/guide@2x.png
  52. BIN
      Girly/Assets.xcassets/icon/guide.imageset/guide@3x.png
  53. 17 7
      Girly/Base.lproj/LaunchScreen.storyboard
  54. 0 1
      Girly/Business/Light/TSLightVC.swift
  55. 11 0
      Girly/Business/Light/VC/TSLightGradientVC.swift
  56. 11 0
      Girly/Business/Light/VC/TSLightShapeVC.swift
  57. 11 0
      Girly/Business/Light/VC/TSLightSolidColorVC.swift
  58. 32 0
      Girly/Business/Light/VC/TSLigntTutorialsVC.swift
  59. 7 1
      Girly/Business/Setting/TSSettingVC.swift
  60. 75 0
      Girly/Common/TSBootPageVC/TSBootPageVC.swift
  61. 20 0
      Pods/Pods.xcodeproj/xcuserdata/100years.xcuserdatad/xcschemes/xcschememanagement.plist

+ 43 - 2
Girly.xcodeproj/project.pbxproj

@@ -89,6 +89,10 @@
 		A8BA8DB52D31FF87006CB966 /* TSTimerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BA8DB42D31FF85006CB966 /* TSTimerView.swift */; };
 		A8BA8DB72D3203C3006CB966 /* TSSettingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BA8DB62D3203BF006CB966 /* TSSettingCell.swift */; };
 		A8F76C492D36887800AA6E93 /* TSSOSLigntVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F76C482D36886F00AA6E93 /* TSSOSLigntVC.swift */; };
+		A8F774562D378AA400AA6E93 /* TSLigntTutorialsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F774552D378A9B00AA6E93 /* TSLigntTutorialsVC.swift */; };
+		A8F774592D378FBC00AA6E93 /* TSBootPageVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F774582D378FBB00AA6E93 /* TSBootPageVC.swift */; };
+		A8F7745C2D37A26A00AA6E93 /* SwiftUIX in Frameworks */ = {isa = PBXBuildFile; productRef = A8F7745B2D37A26A00AA6E93 /* SwiftUIX */; };
+		A8F7745F2D37A2B700AA6E93 /* SwiftUIX in Frameworks */ = {isa = PBXBuildFile; productRef = A8F7745E2D37A2B700AA6E93 /* SwiftUIX */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -177,6 +181,8 @@
 		A8BA8DB42D31FF85006CB966 /* TSTimerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTimerView.swift; sourceTree = "<group>"; };
 		A8BA8DB62D3203BF006CB966 /* TSSettingCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSSettingCell.swift; sourceTree = "<group>"; };
 		A8F76C482D36886F00AA6E93 /* TSSOSLigntVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSSOSLigntVC.swift; sourceTree = "<group>"; };
+		A8F774552D378A9B00AA6E93 /* TSLigntTutorialsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSLigntTutorialsVC.swift; sourceTree = "<group>"; };
+		A8F774582D378FBB00AA6E93 /* TSBootPageVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSBootPageVC.swift; sourceTree = "<group>"; };
 		BBACC86FF0E1F3F5E9AAF63F /* Pods_Girly.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Girly.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
@@ -185,7 +191,9 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				A8F7745F2D37A2B700AA6E93 /* SwiftUIX in Frameworks */,
 				760BC9A135CDA0AF907107A6 /* Pods_Girly.framework in Frameworks */,
+				A8F7745C2D37A26A00AA6E93 /* SwiftUIX in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -294,6 +302,7 @@
 		A8BA8D012D2D06A6006CB966 /* Common */ = {
 			isa = PBXGroup;
 			children = (
+				A8F774572D378FA800AA6E93 /* TSBootPageVC */,
 				A8BA8DAD2D30F112006CB966 /* TSFlashlightController */,
 				A8BA8DA62D30D283006CB966 /* TSAudioPlayer */,
 				A8BA8DA32D30C6B0006CB966 /* TSCustomTimer */,
@@ -374,6 +383,7 @@
 				A8BA8D4B2D2D3D15006CB966 /* TSLightSolidColorVC.swift */,
 				A8BA8D4D2D2D3D33006CB966 /* TSLightGradientVC.swift */,
 				A8BA8D4F2D2D3D55006CB966 /* TSLightShapeVC.swift */,
+				A8F774552D378A9B00AA6E93 /* TSLigntTutorialsVC.swift */,
 			);
 			path = VC;
 			sourceTree = "<group>";
@@ -524,6 +534,14 @@
 			path = TSFlashlightController;
 			sourceTree = "<group>";
 		};
+		A8F774572D378FA800AA6E93 /* TSBootPageVC */ = {
+			isa = PBXGroup;
+			children = (
+				A8F774582D378FBB00AA6E93 /* TSBootPageVC.swift */,
+			);
+			path = TSBootPageVC;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -570,6 +588,9 @@
 			);
 			mainGroup = A8BA8CC72D2D0558006CB966;
 			minimizedProjectReferenceProxies = 1;
+			packageReferences = (
+				A8F7745D2D37A2B700AA6E93 /* XCLocalSwiftPackageReference "../SwiftUIX-master" */,
+			);
 			preferredProjectObjectVersion = 77;
 			productRefGroup = A8BA8CD12D2D0558006CB966 /* Products */;
 			projectDirPath = "";
@@ -658,6 +679,7 @@
 				A8BA8D1C2D2D06B7006CB966 /* UIImage+Ex.swift in Sources */,
 				A8BA8D372D2D06C8006CB966 /* TSBaseNavigationC.swift in Sources */,
 				A8BA8D5E2D2E0932006CB966 /* PreviewView.swift in Sources */,
+				A8F774592D378FBC00AA6E93 /* TSBootPageVC.swift in Sources */,
 				A8BA8D5F2D2E0932006CB966 /* Gradient.swift in Sources */,
 				A8BA8D792D2E7122006CB966 /* TSLightShapeView.swift in Sources */,
 				A8BA8D602D2E0932006CB966 /* ColorSliderExtensions.swift in Sources */,
@@ -694,6 +716,7 @@
 				A8BA8DA82D30D290006CB966 /* TSAudioPlayer.swift in Sources */,
 				A8BA8D212D2D06B7006CB966 /* NSString+Ex.swift in Sources */,
 				A8BA8D222D2D06B7006CB966 /* Array+Ex.swift in Sources */,
+				A8F774562D378AA400AA6E93 /* TSLigntTutorialsVC.swift in Sources */,
 				A8BA8D442D2D1F77006CB966 /* TSMirrorVC.swift in Sources */,
 				A8BA8D972D2FE405006CB966 /* TSWarningLightVC.swift in Sources */,
 				A8BA8DB72D3203C3006CB966 /* TSSettingCell.swift in Sources */,
@@ -742,7 +765,7 @@
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 7;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -776,7 +799,7 @@
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 7;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -944,6 +967,24 @@
 			defaultConfigurationName = Release;
 		};
 /* End XCConfigurationList section */
+
+/* Begin XCLocalSwiftPackageReference section */
+		A8F7745D2D37A2B700AA6E93 /* XCLocalSwiftPackageReference "../SwiftUIX-master" */ = {
+			isa = XCLocalSwiftPackageReference;
+			relativePath = "../SwiftUIX-master";
+		};
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+		A8F7745B2D37A26A00AA6E93 /* SwiftUIX */ = {
+			isa = XCSwiftPackageProductDependency;
+			productName = SwiftUIX;
+		};
+		A8F7745E2D37A2B700AA6E93 /* SwiftUIX */ = {
+			isa = XCSwiftPackageProductDependency;
+			productName = SwiftUIX;
+		};
+/* End XCSwiftPackageProductDependency section */
 	};
 	rootObject = A8BA8CC82D2D0558006CB966 /* Project object */;
 }

+ 1 - 1
Girly.xcodeproj/xcuserdata/100years.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>Girly.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>13</integer>
+			<integer>0</integer>
 		</dict>
 	</dict>
 	<key>SuppressBuildableAutocreation</key>

+ 14 - 1
Girly/AppDelegate.swift

@@ -16,11 +16,24 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
         window = UIWindow(frame: UIScreen.main.bounds)
         window?.backgroundColor = UIColor.white
         window?.makeKeyAndVisible()
-        window?.rootViewController = TSTabBarController()
+        
+        JudgmentSkipPage()
 
         return true
     }
 
 
+    func JudgmentSkipPage() {
+        if UserDefaults.standard.string(forKey: "isFirstInstallApp") == nil {
+            window?.rootViewController = TSBootPageVC { [weak self]  in
+                guard let self = self else { return }
+                UserDefaults.standard.set("1", forKey: "isFirstInstallApp")
+                UserDefaults.standard.synchronize()
+                window?.rootViewController = TSTabBarController()
+            }
+        }else{
+            window?.rootViewController = TSTabBarController()
+        }
+    }
 }
 

BIN
Girly/Assets.xcassets/App-Icon.imageset/App-Icon 1.png


BIN
Girly/Assets.xcassets/App-Icon.imageset/App-Icon.png


+ 1 - 1
Girly/Assets.xcassets/App-Icon.imageset/Contents.json

@@ -5,7 +5,7 @@
       "scale" : "1x"
     },
     {
-      "filename" : "App-Icon 1.png",
+      "filename" : "App-Icon.png",
       "idiom" : "universal",
       "scale" : "2x"
     },

BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-1024.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png


BIN
Girly/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png


BIN
Girly/Assets.xcassets/Flash/launch_logo1.imageset/launch_logo1@2x.png


BIN
Girly/Assets.xcassets/Flash/launch_logo1.imageset/launch_logo1@3x.png


+ 1 - 1
Girly/Assets.xcassets/Flash/light_disco.imageset/Contents.json

@@ -5,7 +5,7 @@
       "scale" : "1x"
     },
     {
-      "filename" : "light_disco@2.png",
+      "filename" : "light_disco@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },

BIN
Girly/Assets.xcassets/Flash/light_disco.imageset/light_disco@2.png


BIN
Girly/Assets.xcassets/Flash/light_disco.imageset/light_disco@2x.png


BIN
Girly/Assets.xcassets/Flash/light_disco.imageset/light_disco@3x.png


BIN
Girly/Assets.xcassets/Flash/light_night.imageset/light_night@2x.png


BIN
Girly/Assets.xcassets/Flash/light_night.imageset/light_night@3x.png


BIN
Girly/Assets.xcassets/Flash/light_sos.imageset/light_sos@2x.png


BIN
Girly/Assets.xcassets/Flash/light_sos.imageset/light_sos@3x.png


BIN
Girly/Assets.xcassets/Flash/light_warning.imageset/light_warning@2x.png


BIN
Girly/Assets.xcassets/Flash/light_warning.imageset/light_warning@3x.png


+ 6 - 0
Girly/Assets.xcassets/Launch/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 1 - 2
Girly/Assets.xcassets/Flash/launch_logo1.imageset/Contents.json → Girly/Assets.xcassets/Launch/bootPage_0.imageset/Contents.json

@@ -5,12 +5,11 @@
       "scale" : "1x"
     },
     {
-      "filename" : "launch_logo1@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "launch_logo1@3x.png",
+      "filename" : "bootPage_0.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

BIN
Girly/Assets.xcassets/Launch/bootPage_0.imageset/bootPage_0.png


+ 21 - 0
Girly/Assets.xcassets/Launch/bootPage_1.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bootPage_1.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Girly/Assets.xcassets/Launch/bootPage_1.imageset/bootPage_1.png


+ 21 - 0
Girly/Assets.xcassets/Launch/bootPage_2.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bootPage_2.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Girly/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_2.png


+ 22 - 0
Girly/Assets.xcassets/Launch/launch_icon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "launch_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "launch_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Girly/Assets.xcassets/Launch/launch_icon.imageset/launch_icon@2x.png


BIN
Girly/Assets.xcassets/Launch/launch_icon.imageset/launch_icon@3x.png


+ 22 - 0
Girly/Assets.xcassets/Launch/launch_title.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "launch_title@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "launch_title@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Girly/Assets.xcassets/Launch/launch_title.imageset/launch_title@2x.png


BIN
Girly/Assets.xcassets/Launch/launch_title.imageset/launch_title@3x.png


+ 21 - 0
Girly/Assets.xcassets/Light/lignt_tutorials.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "lignt_tutorials@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Girly/Assets.xcassets/Light/lignt_tutorials.imageset/lignt_tutorials@3x.png


+ 22 - 0
Girly/Assets.xcassets/icon/guide.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "guide@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "guide@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Girly/Assets.xcassets/icon/guide.imageset/guide@2x.png


BIN
Girly/Assets.xcassets/icon/guide.imageset/guide@3x.png


+ 17 - 7
Girly/Base.lproj/LaunchScreen.storyboard

@@ -16,19 +16,28 @@
                         <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch_logo1" translatesAutoresizingMaskIntoConstraints="NO" id="QnY-ie-uPp">
-                                <rect key="frame" x="131.66666666666666" y="324" width="129.99999999999997" height="180"/>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch_icon" translatesAutoresizingMaskIntoConstraints="NO" id="ZcR-K4-fu1">
+                                <rect key="frame" x="146.66666666666666" y="280" width="100" height="100"/>
                                 <constraints>
-                                    <constraint firstAttribute="height" constant="180" id="UT1-77-OCS"/>
-                                    <constraint firstAttribute="width" constant="130" id="phI-UG-3y1"/>
+                                    <constraint firstAttribute="width" constant="100" id="g0D-mR-kQM"/>
+                                    <constraint firstAttribute="height" constant="100" id="wFe-5w-Zd0"/>
+                                </constraints>
+                            </imageView>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch_title" translatesAutoresizingMaskIntoConstraints="NO" id="WP9-35-dVQ">
+                                <rect key="frame" x="161" y="392" width="71" height="51"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="51" id="5jH-Cv-hf5"/>
+                                    <constraint firstAttribute="width" constant="71" id="nQj-4Z-7dp"/>
                                 </constraints>
                             </imageView>
                         </subviews>
                         <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                         <color key="backgroundColor" red="0.066666666666666666" green="0.066666666666666666" blue="0.066666666666666666" alpha="1" colorSpace="calibratedRGB"/>
                         <constraints>
-                            <constraint firstItem="QnY-ie-uPp" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="ZeP-Fw-zsW"/>
-                            <constraint firstItem="QnY-ie-uPp" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="265" id="cGH-Uo-Jq2"/>
+                            <constraint firstItem="ZcR-K4-fu1" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" constant="280" id="XCC-s7-cFZ"/>
+                            <constraint firstItem="WP9-35-dVQ" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="aOF-fc-yFd"/>
+                            <constraint firstItem="WP9-35-dVQ" firstAttribute="top" secondItem="ZcR-K4-fu1" secondAttribute="bottom" constant="12" id="lUm-LT-hr0"/>
+                            <constraint firstItem="ZcR-K4-fu1" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="mqp-j3-Ma4"/>
                         </constraints>
                     </view>
                 </viewController>
@@ -38,6 +47,7 @@
         </scene>
     </scenes>
     <resources>
-        <image name="launch_logo1" width="130" height="180"/>
+        <image name="launch_icon" width="100" height="100"/>
+        <image name="launch_title" width="68.333335876464844" height="28.666666030883789"/>
     </resources>
 </document>

+ 0 - 1
Girly/Business/Light/TSLightVC.swift

@@ -33,7 +33,6 @@ class TSLightVC : TSBaseVC{
         indicator.indicatorHeight = 4
         indicator.indicatorColor = .themeColor
         segmentedView.indicators = [indicator]
-        segmentedView.dataSource = segmentedDataSource
         return segmentedView
     }()
     

+ 11 - 0
Girly/Business/Light/VC/TSLightGradientVC.swift

@@ -64,6 +64,17 @@ class TSLightGradientVC: TSBaseVC{
             make.bottom.equalTo(-12)
         }
         
+        let guideBtn = UIButton.createButton(image: UIImage(named: "guide"),backgroundColor: UIColor.fromHex("000000", alpha: 0.2),corner: 8.0) { [weak self]  in
+            guard let self = self else { return }
+            kPresentModalVC(target: self, modelVC: TSLigntTutorialsVC())
+        }
+        view.addSubview(guideBtn)
+        guideBtn.snp.makeConstraints { make in
+            make.top.equalTo(16)
+            make.leading.equalTo(12)
+            make.width.height.equalTo(36)
+        }
+        
         let fullScreenBtn = UIButton.createButton(image: UIImage(named: "fullScreen"),backgroundColor: UIColor.fromHex("000000", alpha: 0.2),corner: 8.0) { [weak self]  in
             guard let self = self else { return }
             kPresentModalVC(target: self, modelVC: TSFullScreenVC.creatGradientVC(cgcolors:getCurrentColorGradient()),transitionStyle: .crossDissolve)

+ 11 - 0
Girly/Business/Light/VC/TSLightShapeVC.swift

@@ -70,6 +70,17 @@ class TSLightShapeVC: TSBaseVC{
             make.bottom.equalTo(-12)
         }
 
+        let guideBtn = UIButton.createButton(image: UIImage(named: "guide"),backgroundColor: UIColor.fromHex("000000", alpha: 0.2),corner: 8.0) { [weak self]  in
+            guard let self = self else { return }
+            kPresentModalVC(target: self, modelVC: TSLigntTutorialsVC())
+        }
+        view.addSubview(guideBtn)
+        guideBtn.snp.makeConstraints { make in
+            make.top.equalTo(16)
+            make.leading.equalTo(12)
+            make.width.height.equalTo(36)
+        }
+        
         let fullScreenBtn = UIButton.createButton(image: UIImage(named: "fullScreen"),backgroundColor: UIColor.fromHex("000000", alpha: 0.2),corner: 8.0) { [weak self]  in
             guard let self = self else { return }
             kPresentModalVC(target: self, modelVC: TSFullScreenVC.creatShapeVC(color: shapeView.color, shapeNamed: shapeView.imageNamed),transitionStyle: .crossDissolve)

+ 11 - 0
Girly/Business/Light/VC/TSLightSolidColorVC.swift

@@ -60,6 +60,17 @@ class TSLightSolidColorVC: TSBaseVC{
             make.bottom.equalTo(-12)
         }
 
+        let guideBtn = UIButton.createButton(image: UIImage(named: "guide"),backgroundColor: UIColor.fromHex("000000", alpha: 0.2),corner: 8.0) { [weak self]  in
+            guard let self = self else { return }
+            kPresentModalVC(target: self, modelVC: TSLigntTutorialsVC())
+        }
+        view.addSubview(guideBtn)
+        guideBtn.snp.makeConstraints { make in
+            make.top.equalTo(16)
+            make.leading.equalTo(12)
+            make.width.height.equalTo(36)
+        }
+        
         let fullScreenBtn = UIButton.createButton(image: UIImage(named: "fullScreen"),backgroundColor: UIColor.fromHex("000000", alpha: 0.2),corner: 8.0) { [weak self]  in
             guard let self = self else { return }
             kPresentModalVC(target: self, modelVC: TSFullScreenVC.creatSolidColorVC(color: topView.backgroundColor ?? .white),transitionStyle: .crossDissolve)

+ 32 - 0
Girly/Business/Light/VC/TSLigntTutorialsVC.swift

@@ -0,0 +1,32 @@
+//
+//  TSLigntTutorialsVC.swift
+//  Girly
+//
+//  Created by 100Years on 2025/1/14.
+//
+
+class TSLigntTutorialsVC: TSBaseVC {
+    
+    lazy var imageView: UIImageView = {
+        let imageView = UIImageView.createImageView(imageName: "lignt_tutorials")
+        imageView.frame = CGRectMake(16, 12, k_ScreenWidth-32, 556*kDesignScale)
+        return imageView
+    }()
+    
+    lazy var scrollView: UIScrollView = {
+        let scrollView = UIScrollView()
+        scrollView.backgroundColor = .clear
+        scrollView.frame = self.contentView.bounds
+        scrollView.contentSize = imageView.size
+        return scrollView
+    }()
+
+    override func createView() {
+        addNormalNavBarView()
+        setPageTitle("How to use?".localized)
+        contentView.addSubview(scrollView)
+        scrollView.addSubview(imageView)
+    }
+    
+
+}

+ 7 - 1
Girly/Business/Setting/TSSettingVC.swift

@@ -131,7 +131,13 @@ class TSSettingVC: TSBaseVC {
             height: cellH,
             rectCorner:[.bottomLeft,.bottomRight],
             tapBlock: {[weak self] itemModel, index, view  in
-
+                
+                guard let self = self else { return }
+                let vc = TSBootPageVC {
+                    
+                }
+                vc.hidesBottomBarWhenPushed = true
+                navigationController?.pushViewController(vc, animated: true)
             }))
         
         return dataArray

+ 75 - 0
Girly/Common/TSBootPageVC/TSBootPageVC.swift

@@ -0,0 +1,75 @@
+//
+//  TSBootPageVC.swift
+//  Girly
+//
+//  Created by 100Years on 2025/1/14.
+//
+
+class TSBootPageVC: TSBaseVC {
+    
+    var onComplete:(()->Void)
+    
+    init(onComplete: @escaping () -> Void) {
+        self.onComplete = onComplete
+        super.init()
+    }
+    
+    @MainActor required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    lazy var scrollView: UIScrollView = {
+        let scrollView = UIScrollView()
+        scrollView.isScrollEnabled = false
+        scrollView.frame = self.view.bounds
+
+        let imageView0 = UIImageView.createImageView(imageName: "bootPage_0")
+        imageView0.frame = CGRectMake(0, 0, k_ScreenWidth, k_ScreenHeight)// 813*kDesignScale)
+        scrollView.addSubview(imageView0)
+        
+        let imageView1 = UIImageView.createImageView(imageName: "bootPage_1")
+        imageView1.frame = CGRectMake(k_ScreenWidth, 0, k_ScreenWidth, 813*kDesignScale)
+        scrollView.addSubview(imageView1)
+        
+        let imageView2 = UIImageView.createImageView(imageName: "bootPage_2")
+        imageView2.frame = CGRectMake(k_ScreenWidth*2, 0, k_ScreenWidth, 813*kDesignScale)
+        scrollView.addSubview(imageView2)
+        
+        let btnH = k_ScreenHeight/5
+        let btnTop = btnH*4
+        
+        let button0 = UIButton(frame: CGRectMake(0, btnTop, k_ScreenWidth, btnH))
+        button0.tag = 1
+        button0.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
+        scrollView.addSubview(button0)
+        
+        let button1 = UIButton(frame: CGRectMake(k_ScreenWidth, btnTop, k_ScreenWidth, btnH))
+        button1.tag = 2
+        button1.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
+        scrollView.addSubview(button1)
+        
+        let button2 = UIButton(frame: CGRectMake(k_ScreenWidth*2, btnTop, k_ScreenWidth, btnH))
+        button2.tag = 3
+        button2.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
+        scrollView.addSubview(button2)
+        
+        return scrollView
+    }()
+    
+    
+    @objc func clickBtn(_ btn:UIButton){
+        if btn.tag <= 2{
+            scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(btn.tag), 0)
+        }else{
+            onComplete()
+            self.navBarClickLeftAction()
+        }
+    }
+    
+    override func createView() {
+        setNavBarViewHidden(true)
+        self.view.backgroundColor = .black
+        self.view.addSubview(scrollView)
+    }
+
+}

+ 20 - 0
Pods/Pods.xcodeproj/xcuserdata/100years.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -8,51 +8,71 @@
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>2</integer>
 		</dict>
 		<key>JXSegmentedView.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>1</integer>
 		</dict>
 		<key>MultiSlider-MultiSlider.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>4</integer>
 		</dict>
 		<key>MultiSlider.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>3</integer>
 		</dict>
 		<key>ObjectMapper.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>5</integer>
 		</dict>
 		<key>Pods-Girly.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>6</integer>
 		</dict>
 		<key>SnapKit-SnapKit_Privacy.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>8</integer>
 		</dict>
 		<key>SnapKit.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>7</integer>
 		</dict>
 		<key>SweeterSwift-SweeterSwift.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>10</integer>
 		</dict>
 		<key>SweeterSwift.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
+			<key>orderHint</key>
+			<integer>9</integer>
 		</dict>
 	</dict>
 	<key>SuppressBuildableAutocreation</key>