Bläddra i källkod

3.6.11(3)
1.修改 App 名称回Chibii
2.修改引导页
3.icon更换

100Years 1 vecka sedan
förälder
incheckning
e9d1e1da63
80 ändrade filer med 456 tillägg och 244 borttagningar
  1. 6 2
      AIEmoji.xcodeproj/project.pbxproj
  2. BIN
      AIEmoji/Assets.xcassets/App-Icon.imageset/App-Icon.png
  3. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-1024.png
  4. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png
  5. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png
  6. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
  7. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
  8. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png
  9. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png
  10. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
  11. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
  12. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
  13. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
  14. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png
  15. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png
  16. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png
  17. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
  18. BIN
      AIEmoji/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
  19. 0 22
      AIEmoji/Assets.xcassets/Launch/flickering_screen.imageset/Contents.json
  20. BIN
      AIEmoji/Assets.xcassets/Launch/flickering_screen.imageset/flickering_screen@2x.png
  21. BIN
      AIEmoji/Assets.xcassets/Launch/flickering_screen.imageset/flickering_screen@3x.png
  22. 2 2
      AIEmoji/Assets.xcassets/Launch/launch.imageset/Contents.json
  23. BIN
      AIEmoji/Assets.xcassets/Launch/launch.imageset/launch@2x.png
  24. BIN
      AIEmoji/Assets.xcassets/Launch/launch.imageset/launch@3x.png
  25. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_0.imageset/bootPage_0@2x.png
  26. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_0.imageset/bootPage_0@3x.png
  27. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_1.imageset/bootPage_1.png
  28. 0 59
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/Contents.json
  29. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@2x 1.png
  30. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@2x.png
  31. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@3x 1.png
  32. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@3x.png
  33. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2@2x.png
  34. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2@3x.png
  35. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_3.imageset/bootPage_3@2x.png
  36. BIN
      AIEmoji/Assets.xcassets/boot/bootPage_3.imageset/bootPage_3@3x.png
  37. BIN
      AIEmoji/Assets.xcassets/boot/boot_deepseek.imageset/boot_deepseek@2x.png
  38. BIN
      AIEmoji/Assets.xcassets/boot/boot_deepseek.imageset/boot_deepseek@3x.png
  39. 1 2
      AIEmoji/Assets.xcassets/boot/boot_image_0_0.imageset/Contents.json
  40. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_0_0.imageset/boot_image_0_0.png
  41. 1 2
      AIEmoji/Assets.xcassets/boot/boot_image_0_1.imageset/Contents.json
  42. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_0_1.imageset/boot_image_0_1.png
  43. 21 0
      AIEmoji/Assets.xcassets/boot/boot_image_0_2.imageset/Contents.json
  44. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_0_2.imageset/boot_image_0_2.png
  45. 21 0
      AIEmoji/Assets.xcassets/boot/boot_image_0_3.imageset/Contents.json
  46. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_0_3.imageset/boot_image_0_3.png
  47. 21 0
      AIEmoji/Assets.xcassets/boot/boot_image_1_0.imageset/Contents.json
  48. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_1_0.imageset/boot_image_1_0.png
  49. 21 0
      AIEmoji/Assets.xcassets/boot/boot_image_1_1.imageset/Contents.json
  50. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_1_1.imageset/boot_image_1_1.png
  51. 21 0
      AIEmoji/Assets.xcassets/boot/boot_image_1_2.imageset/Contents.json
  52. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_1_2.imageset/boot_image_1_2.png
  53. 1 1
      AIEmoji/Assets.xcassets/boot/boot_image_2.imageset/Contents.json
  54. BIN
      AIEmoji/Assets.xcassets/boot/boot_image_2.imageset/boot_image_2.png
  55. 0 22
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_0.imageset/Contents.json
  56. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_0.imageset/boot_comparison_new_0@2x.png
  57. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_0.imageset/boot_comparison_new_0@3x.png
  58. 0 22
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_1.imageset/Contents.json
  59. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_1.imageset/boot_comparison_new_1@2x.png
  60. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_1.imageset/boot_comparison_new_1@3x.png
  61. 0 22
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_0.imageset/Contents.json
  62. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_0.imageset/boot_comparison_old_0@2x.png
  63. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_0.imageset/boot_comparison_old_0@3x.png
  64. 0 22
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_1.imageset/Contents.json
  65. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_1.imageset/boot_comparison_old_1@2x.png
  66. BIN
      AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_1.imageset/boot_comparison_old_1@3x.png
  67. 7 19
      AIEmoji/Base.lproj/LaunchScreen.storyboard
  68. 1 1
      AIEmoji/Business/AIChat/TSChatViewController/TSChatViewController/TSChatViewController+Keyboard.swift
  69. 109 0
      AIEmoji/Business/General/TYCycleImageView.swift
  70. 186 45
      AIEmoji/Business/LaunchVC/TSBootPageVC.swift
  71. 1 1
      AIEmoji/Common/Tool/TSCommonTool/TSCommonTool.swift
  72. 4 0
      AIEmoji/de.lproj/Localizable.strings
  73. 4 0
      AIEmoji/en.lproj/Localizable.strings
  74. 4 0
      AIEmoji/es.lproj/Localizable.strings
  75. 4 0
      AIEmoji/ja.lproj/Localizable.strings
  76. 4 0
      AIEmoji/ko.lproj/Localizable.strings
  77. 4 0
      AIEmoji/pt-BR.lproj/Localizable.strings
  78. 4 0
      AIEmoji/pt-PT.lproj/Localizable.strings
  79. 4 0
      AIEmoji/zh-Hans.lproj/Localizable.strings
  80. 4 0
      AIEmoji/zh-Hant.lproj/Localizable.strings

+ 6 - 2
AIEmoji.xcodeproj/project.pbxproj

@@ -147,6 +147,7 @@
 		A88508882DBCD944000FBCEC /* MemoryLeakChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88508872DBCD940000FBCEC /* MemoryLeakChecker.swift */; };
 		A885088D2DBCE7BE000FBCEC /* TSPTPHistoryVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A885088C2DBCE7BC000FBCEC /* TSPTPHistoryVC.swift */; };
 		A88508B62DBF142B000FBCEC /* TSGennertatorSelectStyleVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88508B52DBF142A000FBCEC /* TSGennertatorSelectStyleVC.swift */; };
+		A8990DE92DDF241500DD55FE /* TYCycleImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8990DE82DDF241300DD55FE /* TYCycleImageView.swift */; };
 		A899D34A2D827A0E00AB9C1C /* TSChatThinkingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A899D3492D8279FB00AB9C1C /* TSChatThinkingModel.swift */; };
 		A89EA64B2D59A588000EB181 /* MessageKit in Frameworks */ = {isa = PBXBuildFile; productRef = A89EA64A2D59A588000EB181 /* MessageKit */; };
 		A89EA6542D59A9F4000EB181 /* TSTextLayoutSizeCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A89EA64F2D59A9F4000EB181 /* TSTextLayoutSizeCalculator.swift */; };
@@ -435,6 +436,7 @@
 		A88508872DBCD940000FBCEC /* MemoryLeakChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryLeakChecker.swift; sourceTree = "<group>"; };
 		A885088C2DBCE7BC000FBCEC /* TSPTPHistoryVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPTPHistoryVC.swift; sourceTree = "<group>"; };
 		A88508B52DBF142A000FBCEC /* TSGennertatorSelectStyleVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSGennertatorSelectStyleVC.swift; sourceTree = "<group>"; };
+		A8990DE82DDF241300DD55FE /* TYCycleImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TYCycleImageView.swift; sourceTree = "<group>"; };
 		A899D3492D8279FB00AB9C1C /* TSChatThinkingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSChatThinkingModel.swift; sourceTree = "<group>"; };
 		A89EA64C2D59A9F4000EB181 /* CustomMessageFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomMessageFlowLayout.swift; sourceTree = "<group>"; };
 		A89EA64E2D59A9F4000EB181 /* TSLayoutSizeCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSLayoutSizeCalculator.swift; sourceTree = "<group>"; };
@@ -1965,6 +1967,7 @@
 		A8F776402D3B75EA00AA6E93 /* General */ = {
 			isa = PBXGroup;
 			children = (
+				A8990DE82DDF241300DD55FE /* TYCycleImageView.swift */,
 				A82D609C2DBA0FDD00596190 /* TSAppBtnView */,
 				A85E47992D6808B30018D62D /* TSBigIconBrowseVC */,
 				A89EA6BD2D5E03CD000EB181 /* Ex */,
@@ -2318,6 +2321,7 @@
 				A8F7754E2D39E59100AA6E93 /* TSActionInfoModel.swift in Sources */,
 				A8F776452D3DE8A800AA6E93 /* TSSmallIconBrowseVC.swift in Sources */,
 				A88508B62DBF142B000FBCEC /* TSGennertatorSelectStyleVC.swift in Sources */,
+				A8990DE92DDF241500DD55FE /* TYCycleImageView.swift in Sources */,
 				A80E72632D40925000C64288 /* TSDiyKeyboardVM.swift in Sources */,
 				A8F775432D39346400AA6E93 /* TSSetingModel.swift in Sources */,
 				A89EA6BA2D5DDE5B000EB181 /* TSPageNullView.swift in Sources */,
@@ -2517,7 +2521,7 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIEmoji/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = Picguru;
+				INFOPLIST_KEY_CFBundleDisplayName = Chibii;
 				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Allow us to access photos to upload your photos to generate new styles.";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
@@ -2556,7 +2560,7 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIEmoji/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = Picguru;
+				INFOPLIST_KEY_CFBundleDisplayName = Chibii;
 				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Allow us to access photos to upload your photos to generate new styles.";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


+ 0 - 22
AIEmoji/Assets.xcassets/Launch/flickering_screen.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/Launch/flickering_screen.imageset/flickering_screen@2x.png


BIN
AIEmoji/Assets.xcassets/Launch/flickering_screen.imageset/flickering_screen@3x.png


+ 2 - 2
AIEmoji/Assets.xcassets/boot/bootPage_3.imageset/Contents.json → AIEmoji/Assets.xcassets/Launch/launch.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/Launch/launch.imageset/launch@2x.png


BIN
AIEmoji/Assets.xcassets/Launch/launch.imageset/launch@3x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_0.imageset/bootPage_0@2x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_0.imageset/bootPage_0@3x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_1.imageset/bootPage_1.png


+ 0 - 59
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/Contents.json

@@ -1,59 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "scale" : "1x"
-    },
-    {
-      "filename" : "bootPage_2@2x.png",
-      "idiom" : "universal",
-      "scale" : "2x"
-    },
-    {
-      "filename" : "bootPage_2@3x.png",
-      "idiom" : "universal",
-      "scale" : "3x"
-    },
-    {
-      "idiom" : "universal",
-      "locale" : "zh-Hans",
-      "scale" : "1x"
-    },
-    {
-      "filename" : "bootPage_2-zh-Hans@2x.png",
-      "idiom" : "universal",
-      "locale" : "zh-Hans",
-      "scale" : "2x"
-    },
-    {
-      "filename" : "bootPage_2-zh-Hans@3x.png",
-      "idiom" : "universal",
-      "locale" : "zh-Hans",
-      "scale" : "3x"
-    },
-    {
-      "idiom" : "universal",
-      "locale" : "zh-Hant",
-      "scale" : "1x"
-    },
-    {
-      "filename" : "bootPage_2-zh-Hans@2x 1.png",
-      "idiom" : "universal",
-      "locale" : "zh-Hant",
-      "scale" : "2x"
-    },
-    {
-      "filename" : "bootPage_2-zh-Hans@3x 1.png",
-      "idiom" : "universal",
-      "locale" : "zh-Hant",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "author" : "xcode",
-    "version" : 1
-  },
-  "properties" : {
-    "localizable" : true
-  }
-}

BIN
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@2x 1.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@2x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@3x 1.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2-zh-Hans@3x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2@2x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_2.imageset/bootPage_2@3x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_3.imageset/bootPage_3@2x.png


BIN
AIEmoji/Assets.xcassets/boot/bootPage_3.imageset/bootPage_3@3x.png


BIN
AIEmoji/Assets.xcassets/boot/boot_deepseek.imageset/boot_deepseek@2x.png


BIN
AIEmoji/Assets.xcassets/boot/boot_deepseek.imageset/boot_deepseek@3x.png


+ 1 - 2
AIEmoji/Assets.xcassets/boot/bootPage_0.imageset/Contents.json → AIEmoji/Assets.xcassets/boot/boot_image_0_0.imageset/Contents.json

@@ -1,16 +1,15 @@
 {
   "images" : [
     {
+      "filename" : "boot_image_0_0.png",
       "idiom" : "universal",
       "scale" : "1x"
     },
     {
-      "filename" : "bootPage_0@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "bootPage_0@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

BIN
AIEmoji/Assets.xcassets/boot/boot_image_0_0.imageset/boot_image_0_0.png


+ 1 - 2
AIEmoji/Assets.xcassets/boot/boot_deepseek.imageset/Contents.json → AIEmoji/Assets.xcassets/boot/boot_image_0_1.imageset/Contents.json

@@ -1,16 +1,15 @@
 {
   "images" : [
     {
+      "filename" : "boot_image_0_1.png",
       "idiom" : "universal",
       "scale" : "1x"
     },
     {
-      "filename" : "boot_deepseek@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "boot_deepseek@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

BIN
AIEmoji/Assets.xcassets/boot/boot_image_0_1.imageset/boot_image_0_1.png


+ 21 - 0
AIEmoji/Assets.xcassets/boot/boot_image_0_2.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/boot_image_0_2.imageset/boot_image_0_2.png


+ 21 - 0
AIEmoji/Assets.xcassets/boot/boot_image_0_3.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/boot_image_0_3.imageset/boot_image_0_3.png


+ 21 - 0
AIEmoji/Assets.xcassets/boot/boot_image_1_0.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/boot_image_1_0.imageset/boot_image_1_0.png


+ 21 - 0
AIEmoji/Assets.xcassets/boot/boot_image_1_1.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/boot_image_1_1.imageset/boot_image_1_1.png


+ 21 - 0
AIEmoji/Assets.xcassets/boot/boot_image_1_2.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/boot_image_1_2.imageset/boot_image_1_2.png


+ 1 - 1
AIEmoji/Assets.xcassets/boot/bootPage_1.imageset/Contents.json → AIEmoji/Assets.xcassets/boot/boot_image_2.imageset/Contents.json

@@ -1,11 +1,11 @@
 {
   "images" : [
     {
+      "filename" : "boot_image_2.png",
       "idiom" : "universal",
       "scale" : "1x"
     },
     {
-      "filename" : "bootPage_1.png",
       "idiom" : "universal",
       "scale" : "2x"
     },

BIN
AIEmoji/Assets.xcassets/boot/boot_image_2.imageset/boot_image_2.png


+ 0 - 22
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_0.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_0.imageset/boot_comparison_new_0@2x.png


BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_0.imageset/boot_comparison_new_0@3x.png


+ 0 - 22
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_1.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_1.imageset/boot_comparison_new_1@2x.png


BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_new_1.imageset/boot_comparison_new_1@3x.png


+ 0 - 22
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_0.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_0.imageset/boot_comparison_old_0@2x.png


BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_0.imageset/boot_comparison_old_0@3x.png


+ 0 - 22
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_1.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_1.imageset/boot_comparison_old_1@2x.png


BIN
AIEmoji/Assets.xcassets/boot/comparison/boot_comparison_old_1.imageset/boot_comparison_old_1@3x.png


+ 7 - 19
AIEmoji/Base.lproj/LaunchScreen.storyboard

@@ -16,29 +16,17 @@
                         <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4uJ-ka-kwa">
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch" translatesAutoresizingMaskIntoConstraints="NO" id="CSy-NA-31p">
                                 <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
-                                <subviews>
-                                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="flickering_screen" translatesAutoresizingMaskIntoConstraints="NO" id="HdT-v6-sco">
-                                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
-                                    </imageView>
-                                </subviews>
-                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                <constraints>
-                                    <constraint firstItem="HdT-v6-sco" firstAttribute="leading" secondItem="4uJ-ka-kwa" secondAttribute="leading" id="SZb-PN-b8m"/>
-                                    <constraint firstItem="HdT-v6-sco" firstAttribute="top" secondItem="4uJ-ka-kwa" secondAttribute="top" id="etb-xJ-vJ2"/>
-                                    <constraint firstAttribute="trailing" secondItem="HdT-v6-sco" secondAttribute="trailing" id="f32-iW-KPB"/>
-                                    <constraint firstAttribute="bottom" secondItem="HdT-v6-sco" secondAttribute="bottom" id="uR6-1o-Rb5"/>
-                                </constraints>
-                            </view>
+                            </imageView>
                         </subviews>
                         <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                         <color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         <constraints>
-                            <constraint firstItem="4uJ-ka-kwa" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="ckQ-P2-0YV"/>
-                            <constraint firstAttribute="trailing" secondItem="4uJ-ka-kwa" secondAttribute="trailing" id="coz-Rm-99U"/>
-                            <constraint firstItem="4uJ-ka-kwa" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="dko-Er-VTr"/>
-                            <constraint firstAttribute="bottom" secondItem="4uJ-ka-kwa" secondAttribute="bottom" id="raZ-Ga-N0y"/>
+                            <constraint firstItem="CSy-NA-31p" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="4kF-2v-u3b"/>
+                            <constraint firstAttribute="bottom" secondItem="CSy-NA-31p" secondAttribute="bottom" id="6Td-cS-Fax"/>
+                            <constraint firstItem="CSy-NA-31p" firstAttribute="trailing" secondItem="6Tk-OE-BBY" secondAttribute="trailing" id="X2c-K3-Zsb"/>
+                            <constraint firstItem="CSy-NA-31p" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="Z9Z-2A-5Iu"/>
                         </constraints>
                     </view>
                 </viewController>
@@ -48,6 +36,6 @@
         </scene>
     </scenes>
     <resources>
-        <image name="flickering_screen" width="375" height="812"/>
+        <image name="launch" width="375" height="812"/>
     </resources>
 </document>

+ 1 - 1
AIEmoji/Business/AIChat/TSChatViewController/TSChatViewController/TSChatViewController+Keyboard.swift

@@ -62,7 +62,7 @@ extension TSChatViewController{
 
 
 extension TSChatViewController{
-    ßß
+    
     func setUpInputBarType(){
         inputBarBgView.addSubview(inputBarTopView)
         inputBarTopView.snp.makeConstraints { make in

+ 109 - 0
AIEmoji/Business/General/TYCycleImageView.swift

@@ -0,0 +1,109 @@
+//
+//  TYCycleImageView.swift
+//  AIEmoji
+//
+//  Created by 100Years on 2025/5/22.
+//
+
+import TYCyclePagerView
+
+
+class TYCycleImageModel {
+    var image:UIImage     //图片
+    init(image: UIImage) {
+        self.image = image
+    }
+}
+
+class TYCycleImageView: TSBaseView {
+    var lastIndex:Int = 0
+    var itemSize:CGSize = UIScreen.main.bounds.size
+    var itemModelArray:[TYCycleImageModel] = [TYCycleImageModel](){
+        didSet{
+            itemSize = self.bounds.size
+            cyclePagerView.reloadData()
+        }
+    }
+
+    lazy var cyclePagerView: TYCyclePagerView = {
+        let pagerView = TYCyclePagerView()
+        pagerView.isInfiniteLoop = true
+        pagerView.autoScrollInterval = 0.0
+        pagerView.delegate = self
+        pagerView.dataSource = self
+        pagerView.layout.layoutType = TYCyclePagerTransformLayoutType.linear
+        pagerView.register(TYCycleImageViewCell.classForCoder(), forCellWithReuseIdentifier: TYCycleImageViewCell.reuseIdentifier)
+        return pagerView
+    }()
+    
+    
+    override func creatUI() {
+        addSubview(cyclePagerView)
+        cyclePagerView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+    }
+
+}
+
+
+extension TYCycleImageView : TYCyclePagerViewDelegate, TYCyclePagerViewDataSource{
+    
+    func numberOfItems(in pageView: TYCyclePagerView) -> Int {
+        return itemModelArray.count
+    }
+    
+    func pagerView(_ pagerView: TYCyclePagerView, cellForItemAt index: Int) -> UICollectionViewCell {
+        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: TYCycleImageViewCell.reuseIdentifier, for: index) as! TYCycleImageViewCell
+        
+        if let itemModel = itemModelArray.safeObj(At: index) {
+            cell.itemModel = itemModel
+        }
+        
+        return cell
+    }
+    
+    func layout(for pageView: TYCyclePagerView) -> TYCyclePagerViewLayout {
+        let layout = TYCyclePagerViewLayout()
+        layout.itemSize = itemSize
+        layout.itemSpacing = 0
+        layout.itemHorizontalCenter = true
+        layout.layoutType = .normal
+        return layout
+    }
+
+
+    func pagerView(_ pageView: TYCyclePagerView, didSelectedItemCell cell: UICollectionViewCell, at index: Int) {
+ 
+    }
+    
+    func pagerViewDidScroll(_ pageView: TYCyclePagerView) {
+        lastIndex = pageView.curIndex
+    }
+   
+}
+
+
+class TYCycleImageViewCell: TSBaseCollectionCell {
+    static let reuseIdentifier = "TYCycleImageViewCell"
+
+    var itemModel:TYCycleImageModel?{
+        didSet{
+            imageView.image = itemModel?.image
+        }
+    }
+    
+    lazy var imageView: UIImageView = {
+        let imageView = UIImageView()
+        return imageView
+    }()
+
+    override func creatUI() {
+        addSubview(imageView)
+        imageView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+    }
+    
+}
+

+ 186 - 45
AIEmoji/Business/LaunchVC/TSBootPageVC.swift

@@ -5,6 +5,7 @@
 //  Created by 100Years on 2025/1/14.
 //
 
+
 class TSBootPageVC: TSBaseVC {
     
     var onComplete:(()->Void)
@@ -18,8 +19,7 @@ class TSBootPageVC: TSBaseVC {
         fatalError("init(coder:) has not been implemented")
     }
     var index:Int = 0
-    let titleStrings = ["Change Hair Color".localized,"Anime Effect".localized,"Super AI Store".localized]
-    let imageStrings = ["bootPage_3","bootPage_0","bootPage_1"]
+    let titleStrings = ["40+ Photo Styles".localized,"Change Hairstyle & Color".localized,"Photo Enhancer & Restore Old Photo".localized]
     
     lazy var titleLabel: UILabel = {
         let titleLabel = UILabel.createLabel(text: titleStrings.safeString(At: index),font: .font(size: 20,weight: .semibold),textColor: .themeColor,textAlignment:.center,numberOfLines: 0)
@@ -45,28 +45,25 @@ class TSBootPageVC: TSBaseVC {
         return continueBtn
     }()
     
-    lazy var comparisonView0: TSImageComparisonView = {
-        let comparisonView = TSImageComparisonView(frame: UIScreen.main.bounds)
-        comparisonView.isRunloop = true
-        comparisonView.configure(
-            oldImage: UIImage(named: "boot_comparison_old_0"),
-            newImage: UIImage(named: "boot_comparison_new_0")
-        )
-        
-        kDelayMainShort {
-            self.comparisonView0.startAnimation(direction: .rightToLeft)
-        }
-        
+    let imageViewH:CGFloat = 678.0*kDesignScale
+    lazy var comparisonView0: TYCycleImageView = {
+        let comparisonView = TYCycleImageView(frame: CGRectMake(0, 0, k_ScreenWidth, imageViewH))
+        comparisonView.itemModelArray = [
+            TYCycleImageModel(image: .bootImage00),
+            TYCycleImageModel(image: .bootImage01),
+            TYCycleImageModel(image: .bootImage02),
+            TYCycleImageModel(image: .bootImage03)]
+        comparisonView.cyclePagerView.autoScrollInterval = 0.8
         return comparisonView
     }()
     
-    lazy var comparisonView1: TSImageComparisonView = {
-        let comparisonView = TSImageComparisonView(frame: UIScreen.main.bounds)
-        comparisonView.isRunloop = true
-        comparisonView.configure(
-            oldImage: UIImage(named: "boot_comparison_old_1"),
-            newImage: UIImage(named: "boot_comparison_new_1")
-        )
+    lazy var comparisonView1: TYCycleImageView = {
+        let comparisonView = TYCycleImageView(frame: CGRectMake(0, 0, k_ScreenWidth, imageViewH))
+        comparisonView.itemModelArray = [
+            TYCycleImageModel(image: .bootImage10),
+            TYCycleImageModel(image: .bootImage11),
+            TYCycleImageModel(image: .bootImage12)
+        ]
         return comparisonView
     }()
     
@@ -76,20 +73,17 @@ class TSBootPageVC: TSBaseVC {
         let scrollView = UIScrollView()
         scrollView.isScrollEnabled = false
         scrollView.frame = self.view.bounds
-
-        for (idx ,string) in imageStrings.enumerated() {
+        
+        for idx in 0...3 {
             if idx == 0 {
-                comparisonView0.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+                comparisonView0.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, imageViewH)
                 scrollView.addSubview(comparisonView0)
             }else if idx == 1 {
-                comparisonView1.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+                comparisonView1.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, imageViewH)
                 scrollView.addSubview(comparisonView1)
-            }else if idx == 2 {
-                boatAnimateScrollView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
-                scrollView.addSubview(boatAnimateScrollView)
             }else{
-                let imageView = UIImageView.createImageView(imageName: string,contentMode: .scaleAspectFill)
-                imageView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+                let imageView = UIImageView.createImageView(image: .bootImage2,contentMode: .scaleAspectFill)
+                imageView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, imageViewH)
                 scrollView.addSubview(imageView)
             }
    
@@ -98,12 +92,6 @@ class TSBootPageVC: TSBaseVC {
         return scrollView
     }()
     
-//    lazy var deepseek: UIImageView = {
-//        let deepseek = UIImageView.createImageView(imageName: "boot_deepseek")
-//        deepseek.isHidden = true
-//        return deepseek
-//    }()
-    
     override func createView() {
         setNavBarViewHidden(true)
         self.view.backgroundColor = .black
@@ -113,9 +101,6 @@ class TSBootPageVC: TSBaseVC {
         overlayImageView.frame = CGRectMake(0, k_ScreenHeight-407*kDesignScale, k_ScreenWidth, 407*kDesignScale)
         view.addSubview(overlayImageView)
 
-//        deepseek.frame = CGRectMake((k_ScreenWidth-220)/2 , k_ScreenHeight-183-48, 220, 48)
-//        view.addSubview(deepseek)
-        
         view.addSubview(titleLabel)
         view.addSubview(continueBtn)
         continueBtn.snp.makeConstraints { make in
@@ -139,14 +124,11 @@ class TSBootPageVC: TSBaseVC {
         dePrint("clickContinue index=\(index)")
         titleLabel.text = titleStrings.safeString(At: index)
         
-//        deepseek.isHidden = !(index == pageIndex)//第二页
-        
         if index == 1{
-            self.comparisonView0.stopAnimation()
-            self.comparisonView1.startAnimation(direction: .rightToLeft)
+            comparisonView0.cyclePagerView.autoScrollInterval = 0.0
+            comparisonView1.cyclePagerView.autoScrollInterval = 0.8
         }
-  
-        
+
         if index <= pageIndex{
             scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(index), 0)
         }else{
@@ -163,6 +145,165 @@ class TSBootPageVC: TSBaseVC {
 }
 
 
+
+//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")
+//    }
+//    var index:Int = 0
+//    let titleStrings = ["Change Hair Color".localized,"Anime Effect".localized,"Super AI Store".localized]
+//    let imageStrings = ["bootPage_3","bootPage_0","bootPage_1"]
+//    
+//    lazy var titleLabel: UILabel = {
+//        let titleLabel = UILabel.createLabel(text: titleStrings.safeString(At: index),font: .font(size: 20,weight: .semibold),textColor: .themeColor,textAlignment:.center,numberOfLines: 0)
+//        return titleLabel
+//    }()
+//         
+//    lazy var continueBtn: UIButton = {
+//        let continueBtn = kCreateNormalSubmitBtn(title: "Continue".localized) { [weak self]  in
+//            guard let self = self else { return }
+//            clickContinue()
+//        }
+//        continueBtn.frame = CGRect(x: 0, y: 0, width: 343, height: 50)
+//        continueBtn.titleLabel?.font = .font(size: 18,weight: .medium)
+//        continueBtn.cornerRadius = 25.0
+//        let imageView = UIImageView.createImageView(imageName: "launch_rightArrow",contentMode: .scaleToFill)
+//        continueBtn.addSubview(imageView)
+//        imageView.snp.makeConstraints { make in
+//            make.width.height.equalTo(24)
+//            make.centerY.equalToSuperview()
+//            make.trailing.equalTo(-24)
+//        }
+//        
+//        return continueBtn
+//    }()
+//    
+//    lazy var comparisonView0: TSImageComparisonView = {
+//        let comparisonView = TSImageComparisonView(frame: UIScreen.main.bounds)
+//        comparisonView.isRunloop = true
+//        comparisonView.configure(
+//            oldImage: UIImage(named: "boot_comparison_old_0"),
+//            newImage: UIImage(named: "boot_comparison_new_0")
+//        )
+//        
+//        kDelayMainShort {
+//            self.comparisonView0.startAnimation(direction: .rightToLeft)
+//        }
+//        
+//        return comparisonView
+//    }()
+//    
+//    lazy var comparisonView1: TSImageComparisonView = {
+//        let comparisonView = TSImageComparisonView(frame: UIScreen.main.bounds)
+//        comparisonView.isRunloop = true
+//        comparisonView.configure(
+//            oldImage: UIImage(named: "boot_comparison_old_1"),
+//            newImage: UIImage(named: "boot_comparison_new_1")
+//        )
+//        return comparisonView
+//    }()
+//    
+//    let boatAnimateScrollView:TSBootImagesAnimateScrollView = TSBootImagesAnimateScrollView()
+//    
+//    lazy var scrollView: UIScrollView = {
+//        let scrollView = UIScrollView()
+//        scrollView.isScrollEnabled = false
+//        scrollView.frame = self.view.bounds
+//
+//        for (idx ,string) in imageStrings.enumerated() {
+//            if idx == 0 {
+//                comparisonView0.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+//                scrollView.addSubview(comparisonView0)
+//            }else if idx == 1 {
+//                comparisonView1.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+//                scrollView.addSubview(comparisonView1)
+//            }else if idx == 2 {
+//                boatAnimateScrollView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+//                scrollView.addSubview(boatAnimateScrollView)
+//            }else{
+//                let imageView = UIImageView.createImageView(imageName: string,contentMode: .scaleAspectFill)
+//                imageView.frame = CGRectMake(k_ScreenWidth * CGFloat(idx), 0, k_ScreenWidth, k_ScreenHeight)
+//                scrollView.addSubview(imageView)
+//            }
+//   
+//        }
+//
+//        return scrollView
+//    }()
+//    
+////    lazy var deepseek: UIImageView = {
+////        let deepseek = UIImageView.createImageView(imageName: "boot_deepseek")
+////        deepseek.isHidden = true
+////        return deepseek
+////    }()
+//    
+//    override func createView() {
+//        setNavBarViewHidden(true)
+//        self.view.backgroundColor = .black
+//        self.view.addSubview(scrollView)
+//        
+//        let overlayImageView = UIImageView.createImageView(imageName: "boot_overlay",contentMode: .scaleToFill)
+//        overlayImageView.frame = CGRectMake(0, k_ScreenHeight-407*kDesignScale, k_ScreenWidth, 407*kDesignScale)
+//        view.addSubview(overlayImageView)
+//
+////        deepseek.frame = CGRectMake((k_ScreenWidth-220)/2 , k_ScreenHeight-183-48, 220, 48)
+////        view.addSubview(deepseek)
+//        
+//        view.addSubview(titleLabel)
+//        view.addSubview(continueBtn)
+//        continueBtn.snp.makeConstraints { make in
+//            make.width.equalTo(continueBtn.width)
+//            make.height.equalTo(continueBtn.height)
+//            make.bottom.equalTo(-26-k_Height_safeAreaInsetsBottom())
+//            make.centerX.equalToSuperview()
+//        }
+//        
+//        titleLabel.snp.makeConstraints { make in
+//            make.leading.equalTo(16)
+//            make.trailing.equalTo(-16)
+//            make.bottom.equalTo(continueBtn.snp.top).offset(-36)
+//        }
+//        
+//        boatAnimateScrollView.startAnimation()
+//    }
+//    var pageIndex = 2//最大坐标
+//    func clickContinue(){
+//        index+=1
+//        dePrint("clickContinue index=\(index)")
+//        titleLabel.text = titleStrings.safeString(At: index)
+//        
+////        deepseek.isHidden = !(index == pageIndex)//第二页
+//        
+//        if index == 1{
+//            self.comparisonView0.stopAnimation()
+//            self.comparisonView1.startAnimation(direction: .rightToLeft)
+//        }
+//  
+//        
+//        if index <= pageIndex{
+//            scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(index), 0)
+//        }else{
+//            let vc = TSPurchaseVC()
+//            vc.closePageBlock = { [weak self]  in
+//                guard let self = self else { return }
+//                onComplete()
+//            }
+//            self.navigationController?.pushViewController(vc, animated: false)
+//            AppDelegate.setsTopDayPopPurchase()
+//        }
+//        
+//    }
+//}
+
+
 class TSBootImagesAnimateScrollView: TSBaseView {
     
     lazy var imageScroll1 = createImageScroll(imageName: "boot_img_premium_photos_1", direction: .leftToRight)

+ 1 - 1
AIEmoji/Common/Tool/TSCommonTool/TSCommonTool.swift

@@ -221,7 +221,7 @@ func kExecuteOnMainThread(_ block: @escaping () -> Void) {
     }
 }
 
-let kAppName:String = "Picguru" //Chibii Chibi Ghiblii AI Image Picguru
+let kAppName:String = "Chibii" //Chibii Chibi Ghiblii AI Image Picguru
 let kUploadImageMaxBit10Size:Int = 10 * 1024 * 1024 //10M
 let kUploadImageMaxBit5Size:Int = 5 * 1024 * 1024 //5M
 

+ 4 - 0
AIEmoji/de.lproj/Localizable.strings

@@ -399,3 +399,7 @@
 "Congratulations on being VIP of the Year!" = "Herzlichen Glückwunsch zum VIP des Jahres!";
 "Upgrade to PRO" = "Upgrade auf PRO";
 "Upgrade" = "Upgrade";
+
+"40+ Photo Styles" = "40+ Photo Styles";
+"Change Hairstyle & Color" = "Change Hairstyle & Color";
+"Photo Enhancer & Restore Old Photo" = "Photo Enhancer & Restore Old Photo";

+ 4 - 0
AIEmoji/en.lproj/Localizable.strings

@@ -396,3 +396,7 @@
 "Congratulations on being VIP of the Year!" = "Congratulations on being VIP of the Year!";
 "Upgrade to PRO" = "Upgrade to PRO";
 "Upgrade" = "Upgrade";
+
+"40+ Photo Styles" = "40+ Photo Styles";
+"Change Hairstyle & Color" = "Change Hairstyle & Color";
+"Photo Enhancer & Restore Old Photo" = "Photo Enhancer & Restore Old Photo";

+ 4 - 0
AIEmoji/es.lproj/Localizable.strings

@@ -396,3 +396,7 @@
 "Congratulations on being VIP of the Year!" = "¡Felicitaciones por ser VIP del año!";
 "Upgrade to PRO" = "Actualízate a PRO";
 "Upgrade" = "Mejora";
+
+"40+ Photo Styles" = "40+ Photo Styles";
+"Change Hairstyle & Color" = "Change Hairstyle & Color";
+"Photo Enhancer & Restore Old Photo" = "Photo Enhancer & Restore Old Photo";

+ 4 - 0
AIEmoji/ja.lproj/Localizable.strings

@@ -395,3 +395,7 @@
 "Congratulations on being VIP of the Year!" = "VIP オブ ザ イヤー受賞おめでとうございます!";
 "Upgrade to PRO" = "PRO にアップグレード";
 "Upgrade" = "アップグレード";
+
+"40+ Photo Styles" = "40+写真スタイル";
+"Change Hairstyle & Color" = "ヘアスタイルと髪色を変更する";
+"Photo Enhancer & Restore Old Photo" = "写真の強化&古い写真の修復";

+ 4 - 0
AIEmoji/ko.lproj/Localizable.strings

@@ -401,3 +401,7 @@
 "Congratulations on being VIP of the Year!" = "올해의 VIP가 되신 것을 축하드립니다!";
 "Upgrade to PRO" = "PRO로 업그레이드";
 "Upgrade" = "업그레이드";
+
+"40+ Photo Styles" = "40+ 사진 스타일";
+"Change Hairstyle & Color" = "헤어스타일 및 머리색 변경";
+"Photo Enhancer & Restore Old Photo" = "사진 개선 & 오래된 사진 복구";

+ 4 - 0
AIEmoji/pt-BR.lproj/Localizable.strings

@@ -395,3 +395,7 @@
 "Congratulations on being VIP of the Year!" = "Parabéns por ser VIP do Ano!";
 "Upgrade to PRO" = "Atualize para PRO";
 "Upgrade" = "Atualizar";
+
+"40+ Photo Styles" = "40+ Photo Styles";
+"Change Hairstyle & Color" = "Change Hairstyle & Color";
+"Photo Enhancer & Restore Old Photo" = "Photo Enhancer & Restore Old Photo";

+ 4 - 0
AIEmoji/pt-PT.lproj/Localizable.strings

@@ -395,3 +395,7 @@
 "Congratulations on being VIP of the Year!" = "Parabéns por ser VIP do Ano!";
 "Upgrade to PRO" = "Atualize para PRO";
 "Upgrade" = "Atualizar";
+
+"40+ Photo Styles" = "40+ Photo Styles";
+"Change Hairstyle & Color" = "Change Hairstyle & Color";
+"Photo Enhancer & Restore Old Photo" = "Photo Enhancer & Restore Old Photo";

+ 4 - 0
AIEmoji/zh-Hans.lproj/Localizable.strings

@@ -397,3 +397,7 @@
 "Congratulations on being VIP of the Year!" = "恭喜你成为年度 VIP!";
 "Upgrade to PRO" = "升级成为会员";
 "Upgrade" = "升级";
+
+"40+ Photo Styles" = "40+照片样式";
+"Change Hairstyle & Color" = "更改发型和发色";
+"Photo Enhancer & Restore Old Photo" = "照片增强&修复老照片";

+ 4 - 0
AIEmoji/zh-Hant.lproj/Localizable.strings

@@ -387,3 +387,7 @@
 "Congratulations on being VIP of the Year!" = "恭喜你成為年度 VIP!";
 "Upgrade to PRO" = "陞級成為會員";
 "Upgrade" = "升級";
+
+"40+ Photo Styles" = "40+照片樣式";
+"Change Hairstyle & Color" = "更改髮型和髮色";
+"Photo Enhancer & Restore Old Photo" = "照片增强&修復老照片";