소스 검색

2.3(2)上线

100Years 2 주 전
부모
커밋
e115967752
48개의 변경된 파일324개의 추가작업 그리고 98개의 파일을 삭제
  1. 24 4
      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. 22 0
      AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_10.imageset/Contents.json
  20. BIN
      AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_10.imageset/ttr_style_10@2x.png
  21. BIN
      AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_10.imageset/ttr_style_10@3x.png
  22. 22 0
      AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_hot.imageset/Contents.json
  23. BIN
      AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_hot.imageset/ttr_style_hot@2x.png
  24. BIN
      AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_hot.imageset/ttr_style_hot@3x.png
  25. 22 0
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_10.imageset/Contents.json
  26. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_10.imageset/ptp_style_10@2x.png
  27. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_10.imageset/ptp_style_10@3x.png
  28. 22 0
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_hot.imageset/Contents.json
  29. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_hot.imageset/ptp_style_hot@2x.png
  30. BIN
      AIEmoji/Assets.xcassets/PTP/style/ptp_style_hot.imageset/ptp_style_hot@3x.png
  31. 1 1
      AIEmoji/Business/AIChat/TSChatViewController/Views/TSMessageContentCell.swift
  32. 32 0
      AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/Cell/TSPTPSelectStyleCell.swift
  33. 3 1
      AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/M/TSPTPStyleModel.swift
  34. 70 6
      AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/TSPhotoToPhotoVC.swift
  35. 1 1
      AIEmoji/Business/TSSetingVC/SetingVC/TSSetingVC.swift
  36. 1 1
      AIEmoji/Business/TSTabBarController/TSTabBarController.swift
  37. 2 13
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC.swift
  38. 4 1
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/VM/TSTTPInputVM.swift
  39. 2 1
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/View/TSPromptTextView.swift
  40. 36 0
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/View/TSTTPStyleView.swift
  41. 20 59
      AIEmoji/Business/TSTextGeneralPictureVC/TSTextGeneralPictureVC/TSTextGeneralPictureVC.swift
  42. 10 10
      AIEmoji/Business/TSTextGeneralPictureVC/TSTextGeneralPictureVC/ViewModel/TSTextGeneralPictureVM.swift
  43. 11 0
      AIEmoji/Common/Ex/UIFont+TSEx.swift
  44. 5 0
      AIEmoji/Info.plist
  45. BIN
      AIEmoji/Res/AccentURW.ttf
  46. BIN
      AIEmoji/Res/Poppins-BlackItalic.ttf
  47. 7 0
      AIEmoji/Res/photo_to_photo_style.json
  48. 7 0
      AIEmoji/Res/text_to_photo_style.json

+ 24 - 4
AIEmoji.xcodeproj/project.pbxproj

@@ -90,6 +90,9 @@
 		A80EDE022D6F1CCD003CD332 /* TSPTPGeneratorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80EDE012D6F1CCB003CD332 /* TSPTPGeneratorVC.swift */; };
 		A80EDE062D6F3491003CD332 /* TSPTPBrowseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80EDE052D6F3490003CD332 /* TSPTPBrowseVC.swift */; };
 		A80EDE082D700395003CD332 /* rotatingAnimation.gif in Resources */ = {isa = PBXBuildFile; fileRef = A80EDE072D700395003CD332 /* rotatingAnimation.gif */; };
+		A83404C82D9BEC0E00C140E4 /* UIFont+TSEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83404C72D9BEC0700C140E4 /* UIFont+TSEx.swift */; };
+		A83404CC2D9BEED800C140E4 /* Poppins-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A83404CB2D9BEED800C140E4 /* Poppins-BlackItalic.ttf */; };
+		A83404CE2D9BF0D600C140E4 /* AccentURW.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A83404CD2D9BF0D600C140E4 /* AccentURW.ttf */; };
 		A85E478F2D67115A0018D62D /* TSTextGeneralPictureVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85E478E2D6711590018D62D /* TSTextGeneralPictureVC.swift */; };
 		A85E47922D6728A00018D62D /* TSTextGeneralPictureVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85E47912D67289F0018D62D /* TSTextGeneralPictureVM.swift */; };
 		A85E47962D672ADA0018D62D /* TSTextPicGennerateVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85E47952D672AD90018D62D /* TSTextPicGennerateVC.swift */; };
@@ -281,6 +284,9 @@
 		A80EDE012D6F1CCB003CD332 /* TSPTPGeneratorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPTPGeneratorVC.swift; sourceTree = "<group>"; };
 		A80EDE052D6F3490003CD332 /* TSPTPBrowseVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPTPBrowseVC.swift; sourceTree = "<group>"; };
 		A80EDE072D700395003CD332 /* rotatingAnimation.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = rotatingAnimation.gif; sourceTree = "<group>"; };
+		A83404C72D9BEC0700C140E4 /* UIFont+TSEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+TSEx.swift"; sourceTree = "<group>"; };
+		A83404CB2D9BEED800C140E4 /* Poppins-BlackItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Poppins-BlackItalic.ttf"; sourceTree = "<group>"; };
+		A83404CD2D9BF0D600C140E4 /* AccentURW.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = AccentURW.ttf; sourceTree = "<group>"; };
 		A85E478E2D6711590018D62D /* TSTextGeneralPictureVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTextGeneralPictureVC.swift; sourceTree = "<group>"; };
 		A85E47912D67289F0018D62D /* TSTextGeneralPictureVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTextGeneralPictureVM.swift; sourceTree = "<group>"; };
 		A85E47952D672AD90018D62D /* TSTextPicGennerateVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTextPicGennerateVC.swift; sourceTree = "<group>"; };
@@ -966,6 +972,14 @@
 			path = TSPTPBrowseVC;
 			sourceTree = "<group>";
 		};
+		A83404C62D9BEC0300C140E4 /* Ex */ = {
+			isa = PBXGroup;
+			children = (
+				A83404C72D9BEC0700C140E4 /* UIFont+TSEx.swift */,
+			);
+			path = Ex;
+			sourceTree = "<group>";
+		};
 		A85E478D2D670DF10018D62D /* TSTextGeneralPictureVC */ = {
 			isa = PBXGroup;
 			children = (
@@ -1279,6 +1293,7 @@
 		A8F774D82D38EA8C00AA6E93 /* Common */ = {
 			isa = PBXGroup;
 			children = (
+				A83404C62D9BEC0300C140E4 /* Ex */,
 				A89EA6AA2D5B3EE8000EB181 /* TSRealmManager */,
 				A80E73E32D533EB000C64288 /* Purchase */,
 				A8F774B52D38EA8C00AA6E93 /* GlobalImports */,
@@ -1535,6 +1550,8 @@
 		A8FB02AE2D3E38FA0031A396 /* Res */ = {
 			isa = PBXGroup;
 			children = (
+				A83404CD2D9BF0D600C140E4 /* AccentURW.ttf */,
+				A83404CB2D9BEED800C140E4 /* Poppins-BlackItalic.ttf */,
 				A80EDE072D700395003CD332 /* rotatingAnimation.gif */,
 				A89EA6972D5B19F0000EB181 /* Butterfly🦋.json */,
 				A80E723E2D3F4D3000C64288 /* Universe🌍.json */,
@@ -1639,6 +1656,8 @@
 			buildActionMask = 2147483647;
 			files = (
 				A80E72482D3F4F0A00C64288 /* templates.json in Resources */,
+				A83404CC2D9BEED800C140E4 /* Poppins-BlackItalic.ttf in Resources */,
+				A83404CE2D9BF0D600C140E4 /* AccentURW.ttf in Resources */,
 				A87587162D81734300286A66 /* text_to_photo_style.json in Resources */,
 				A8EEADD42D3E6C660032C5A0 /* Flower💐.json in Resources */,
 				A8EEADE92D3E76D90032C5A0 /* Beauty👸.json in Resources */,
@@ -1817,6 +1836,7 @@
 				A8F775002D38EA8C00AA6E93 /* WindowHelper.swift in Sources */,
 				A8F7764B2D3E008500AA6E93 /* TSEmojisChildColViewModel.swift in Sources */,
 				A80E72772D41EFF900C64288 /* TSEmojisTutorialsVC.swift in Sources */,
+				A83404C82D9BEC0E00C140E4 /* UIFont+TSEx.swift in Sources */,
 				A8F776482D3DE9F600AA6E93 /* TSSmallIconBrowseCell.swift in Sources */,
 				A8F7753D2D3918F800AA6E93 /* TSNetWork+Business.swift in Sources */,
 				A80327BF2D81578900AF7878 /* TSPromptTextView.swift in Sources */,
@@ -1897,7 +1917,7 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIEmoji/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = ArtVibe;
+				INFOPLIST_KEY_CFBundleDisplayName = Artt;
 				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Allow us to access Photos in order to save emoji to your device.";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
@@ -1908,7 +1928,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 2.2;
+				MARKETING_VERSION = 2.3;
 				PRODUCT_BUNDLE_IDENTIFIER = com.girl.music.wallpaper;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -1936,7 +1956,7 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIEmoji/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = ArtVibe;
+				INFOPLIST_KEY_CFBundleDisplayName = Artt;
 				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Allow us to access Photos in order to save emoji to your device.";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
@@ -1947,7 +1967,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 2.2;
+				MARKETING_VERSION = 2.3;
 				PRODUCT_BUNDLE_IDENTIFIER = com.girl.music.wallpaper;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

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


+ 22 - 0
AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_10.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_10.imageset/ttr_style_10@2x.png


BIN
AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_10.imageset/ttr_style_10@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_hot.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_hot.imageset/ttr_style_hot@2x.png


BIN
AIEmoji/Assets.xcassets/Genmoji/ttp_style/ttp_style_hot.imageset/ttr_style_hot@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/PTP/style/ptp_style_10.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_10.imageset/ptp_style_10@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_10.imageset/ptp_style_10@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/PTP/style/ptp_style_hot.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_hot.imageset/ptp_style_hot@2x.png


BIN
AIEmoji/Assets.xcassets/PTP/style/ptp_style_hot.imageset/ptp_style_hot@3x.png


+ 1 - 1
AIEmoji/Business/AIChat/TSChatViewController/Views/TSMessageContentCell.swift

@@ -266,7 +266,7 @@ class TSMessageContentCell: MessageCollectionViewCell {
         messagesCollectionView: MessagesCollectionView,
         dataSource: MessagesDataSource
     ) {
-        topContainerView.removeAllSubviews()
+        topContainerView.removeAllSubViews()
         delegate = messagesCollectionView.messageCellDelegate
         
         if let msgModel = message as? TSChatMessage {

+ 32 - 0
AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/Cell/TSPTPSelectStyleCell.swift

@@ -104,6 +104,26 @@ class TSPTPSelectStyleCCell: TSBaseCollectionCell {
     var itemModel:TSPTPStyleModel = TSPTPStyleModel(){
         didSet{
             imageView.image = UIImage(named: itemModel.imageName)
+
+            if itemModel.style == 1 {
+                hotImageView.isHidden = false
+                
+                let font = UIFont.font(name:.PoppinsBlackItalic,size: 18)
+                textLabel.font = font
+                textLabel.attributedText = NSAttributedString(
+                    string: itemModel.imageText,
+                    attributes: [
+                        .strokeColor: "#FFB73C".uiColor,       // 描边颜色
+                        .strokeWidth: -4.0,                // 负值表示同时填充和描边(正值仅描边)
+                        .foregroundColor: UIColor.white,   // 文字填充色
+                        .font: font
+                    ]
+                )
+            }else{
+                hotImageView.isHidden = true
+                textLabel.font = .font(size: 14)
+                textLabel.attributedText = nil
+            }
             textLabel.text = itemModel.imageText
         }
     }
@@ -113,6 +133,12 @@ class TSPTPSelectStyleCCell: TSBaseCollectionCell {
         return imageView
     }()
     
+    lazy var hotImageView: UIImageView = {
+        let hotImageView = UIImageView.createImageView(imageName: "ptp_style_hot")
+        hotImageView.isHidden = true
+        return hotImageView
+    }()
+    
     lazy var boardImageView: UIImageView = {
         let boardImageView = UIImageView.createImageView(imageName: "ptp_selected_border")
         boardImageView.isHidden = true
@@ -131,6 +157,12 @@ class TSPTPSelectStyleCCell: TSBaseCollectionCell {
             make.top.bottom.leading.trailing.equalTo(0)
         }
         
+        imageView.addSubview(hotImageView)
+        hotImageView.snp.makeConstraints { make in
+            make.top.leading.equalTo(0)
+            make.width.height.equalTo(36)
+        }
+        
         bgContentView.addSubview(boardImageView)
         boardImageView.snp.makeConstraints { make in
             make.top.bottom.leading.trailing.equalTo(0)

+ 3 - 1
AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/M/TSPTPStyleModel.swift

@@ -9,16 +9,18 @@
 import ObjectMapper
 
 class TSPTPStyleModel: TSBaseModel {
-    var image:UIImage?//给上传图片用的
+    var image:UIImage?//给上传图片用的,非模型使用
     var imageName:String = ""
     var imageText:String = ""
     var prompt:String = ""
     var isVip:Bool = false
+    var style:Int = 0 //0 普通类型,1 热门类型
     override func mapping(map: ObjectMapper.Map) {
         imageName               <- map["imageName"]
         imageText               <- map["imageText"]
         prompt                  <- map["prompt"]
         isVip                   <- map["isVip"]
+        style                   <- map["style"]
     }
 }
 

+ 70 - 6
AIEmoji/Business/TSPTPGeneratorVC/TSPhotoToPhotoVC/TSPhotoToPhotoVC.swift

@@ -15,6 +15,59 @@ class TSPhotoToPhotoVC: TSBaseVC {
         return vm
     }()
     
+    
+    lazy var vipBtn: UIButton = {
+       let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self]  in
+           guard let self = self else { return }
+           TSPurchaseVC.show(target: self) {
+     
+           }
+       }
+       return vipBtn
+   }()
+    
+    //###################################### 入口 view ######################################
+    lazy var navBarView: TSBaseNavContentBarView = {
+       let navBarView = TSBaseNavContentBarView()
+       
+       let titleImageView = UIImageView.createImageView(imageName: "nav_title_pic",contentMode: .scaleToFill)
+       navBarView.barView.addSubview(titleImageView)
+       titleImageView.snp.makeConstraints { make in
+           make.centerY.equalToSuperview()
+           make.left.equalTo(16)
+       }
+       
+       let keyboardBtn = UIButton.createButton(image: UIImage(named: "keyboard")) { [weak self]  in
+           guard let self = self else { return }
+           kPresentModalVC(target: self, modelVC: TSWallpaperVC())
+       }
+       navBarView.barView.addSubview(keyboardBtn)
+        keyboardBtn.snp.makeConstraints { make in
+           make.centerY.equalToSuperview()
+           make.trailing.equalTo(-16)
+           make.width.height.equalTo(24)
+       }
+       
+       navBarView.barView.addSubview(vipBtn)
+       vipBtn.snp.makeConstraints { make in
+           make.centerY.equalToSuperview()
+           make.trailing.equalTo(-60)
+           make.width.height.equalTo(24)
+       }
+       
+       return navBarView
+   }()
+    
+    
+    //###################################### 入口 view ######################################
+    
+    lazy var bannerBtn: UIButton = {
+        let bannerBtn = UIButton.createButton(backgroundImage: UIImage(named: "ptp_banner"))
+        bannerBtn.addTarget(self, action: #selector(clickPTPEnterView), for: .touchUpInside)
+        bannerBtn.frame = CGRect(x: 16, y: 17, width: k_ScreenWidth-32, height: 117)
+        return bannerBtn
+    }()
+    
     lazy var collectionComponent: TSCollectionViewComponent = {
         let layout = UICollectionViewFlowLayout()
         let cp = TSCollectionViewComponent(frame: CGRect.zero, layout: layout, attributes: [:])
@@ -100,9 +153,12 @@ class TSPhotoToPhotoVC: TSBaseVC {
     
     override func createView() {
     
-        addNormalNavBarView()
-        setPageTitle("AI Photo Generator".localized)
-        
+
+        navBarContentView.addSubview(navBarView)
+        navBarView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+            
         contentView.addSubview(collectionComponent.collectionView)
         collectionComponent.collectionView.snp.makeConstraints { make in
             make.edges.equalToSuperview()
@@ -119,6 +175,11 @@ class TSPhotoToPhotoVC: TSBaseVC {
             make.height.equalTo(48)
         }
         
+        //顶部入口跳转按钮
+        let vcViewH = bannerBtn.frame.origin.y+bannerBtn.frame.size.height
+        collectionComponent.collectionView.addSubview(bannerBtn)
+        collectionComponent.collectionView.contentInset = UIEdgeInsets(top: vcViewH, left: 0, bottom: 20, right: 0)
+        bannerBtn.y = -bannerBtn.frame.size.height
     }
     
     override func dealThings() {
@@ -128,13 +189,12 @@ class TSPhotoToPhotoVC: TSBaseVC {
     
     @objc func vipInfoChanged() {
         kExecuteOnMainThread {
-            //submitBtn
-//            self.submitBtn.setTitle(self.getVipText(), for: .normal)
             self.updateVipView()
         }
     }
     func updateVipView() {
         kExecuteOnMainThread {
+            self.vipBtn.isHidden = PurchaseManager.default.isVip
             kSetBtnVipIcon(btn: self.submitBtn, show: kPurchaseDefault.generateVipShow(type: .picToPic))
         }
     }
@@ -145,7 +205,11 @@ class TSPhotoToPhotoVC: TSBaseVC {
 }
 
 extension TSPhotoToPhotoVC {
-
+    
+    @objc func clickPTPEnterView() {
+        kPushVC(target: self, modelVC: TSTextGeneralPictureVC())
+    }
+    
     func uploadImage(){
         generateImage()
     }

+ 1 - 1
AIEmoji/Business/TSSetingVC/SetingVC/TSSetingVC.swift

@@ -68,7 +68,7 @@ class TSSetingVC: TSBaseVC {
             }
             
         }.store(in: &cancellable)
-        
+        vipInfoChanged()
         NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
     }
     

+ 1 - 1
AIEmoji/Business/TSTabBarController/TSTabBarController.swift

@@ -24,7 +24,7 @@ class TSTabBarController: UITabBarController {
     }
 
     @objc private func setUpData() {
-        viewControllerArray = ["TSTextGeneralPictureVC","TSChatViewController","TSEmojisVC","TSSetingVC"]
+        viewControllerArray = ["TSPhotoToPhotoVC","TSChatViewController","TSEmojisVC","TSSetingVC"]
 //        viewControllerArray = ["TSTTPInputVC","TSChatViewController","TSEmojisVC","TSSetingVC"]
         titleArray = ["Wallpaper","Chat","Emojis","Setting"]
         selectedImageArray = [

+ 2 - 13
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC.swift

@@ -12,7 +12,7 @@ class TSTTPInputVC: TSBaseVC {
             if cusStackView.viewH > 0{
                 return cusStackView.viewH
             }
-            return 627.0
+            return 489.0
         }
     }
     
@@ -30,16 +30,10 @@ class TSTTPInputVC: TSBaseVC {
     //###################################### cusStackView ######################################
     lazy var cusStackView: TSCustomStackView = {
         let cusStackView = TSCustomStackView(axis: .vertical,spacing: 8)
+        cusStackView.scrollView.isScrollEnabled = false
         return cusStackView
     }()
     
-    //###################################### 输入框 ######################################
-    lazy var enterView: TSPTPEnterView = {
-        let enterView = TSPTPEnterView()
-        enterView.bannerBtn.addTarget(self, action: #selector(clickPTPEnterView), for: .touchUpInside)
-        return enterView
-    }()
-    
     //###################################### 输入框 ######################################
     lazy var promptTextView: TSPromptTextView = {
         let promptTextView = TSPromptTextView(randomTextArray: kRandomTextArray) { [weak self] text in
@@ -94,8 +88,6 @@ class TSTTPInputVC: TSBaseVC {
             make.top.leading.bottom.trailing.equalTo(0)
         }
 
-        
-        cusStackView.addSubviewToStack(enterView)
         cusStackView.addSubviewToStack(promptTextView)
         
         cusStackView.addSubviewToStack(promptStyleView)
@@ -124,9 +116,6 @@ class TSTTPInputVC: TSBaseVC {
         view.endEditing(true)
     }
     
-    @objc func clickPTPEnterView() {
-        jumpPTPBlock?()
-    }
     func updateVipView() {
         kExecuteOnMainThread {
             kSetBtnVipIcon(btn: self.creatBtnView.creatBtn, show: kPurchaseDefault.generateVipShow(type: .textGeneratePic))

+ 4 - 1
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/VM/TSTTPInputVM.swift

@@ -70,8 +70,11 @@ extension TSTTPInputVM {
 
     var prompt:String{
         var prompt = promptText
+//        if let selectPromptModel = selectPromptModel {
+//            prompt+=", \(selectPromptModel.prompt)"
+//        }
         if let selectPromptModel = selectPromptModel {
-            prompt+=", \(selectPromptModel.prompt)"
+            prompt = "\(selectPromptModel.prompt)," + prompt
         }
         return prompt
     }

+ 2 - 1
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/View/TSPromptTextView.swift

@@ -96,7 +96,8 @@ class TSPromptTextView : TSBaseView{
             make.top.equalTo(57)
             make.leading.equalTo(16)
             make.trailing.equalTo(-16)
-            make.height.equalTo(182.0*kDesignScale)
+            make.height.equalTo(182.0)
+//            make.height.equalTo(182.0*kDesignScale)
 //            make.bottom.equalTo(-20)
             make.bottom.equalTo(0)
         }

+ 36 - 0
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/View/TSTTPStyleView.swift

@@ -119,21 +119,50 @@ class TSPromptStyleViewCell: TSBaseCollectionCell {
     var itemModel:TSPTPStyleModel = TSPTPStyleModel(){
         didSet{
             imageView.image = UIImage(named: itemModel.imageName)
+    
+            if itemModel.style == 1 {
+                hotImageView.isHidden = false
+                
+//                let font = UIFont.font(name:.PoppinsBlackItalic,size: 18)
+//                textLabel.font = font
+//                textLabel.attributedText = NSAttributedString(
+//                    string: itemModel.imageText,
+//                    attributes: [
+//                        .strokeColor: "#FFB73C".uiColor,       // 描边颜色
+//                        .strokeWidth: -4.0,                // 负值表示同时填充和描边(正值仅描边)
+//                        .foregroundColor: UIColor.white,   // 文字填充色
+//                        .font: font
+//                    ]
+//                )
+            }else{
+                hotImageView.isHidden = true
+//                textLabel.font = .font(size: 14)
+//                textLabel.attributedText = nil
+                
+            }
             textLabel.text = itemModel.imageText
         }
     }
     
     lazy var imageView: UIImageView = {
         let imageView = UIImageView()
+        imageView.cornerRadius = 40.0
         return imageView
     }()
     
+    lazy var hotImageView: UIImageView = {
+        let hotImageView = UIImageView.createImageView(imageName: "ttp_style_hot")
+        hotImageView.isHidden = true
+        return hotImageView
+    }()
+    
     lazy var boardImageView: UIImageView = {
         let boardImageView = UIImageView.createImageView(imageName: "ttp_selected_border")
         boardImageView.isHidden = true
         return boardImageView
     }()
 
+    
     lazy var textLabel: UILabel = {
         let textLabel = UILabel.createLabel(font: .font(size: 14),textColor: .white,textAlignment: .center,numberOfLines: 0)
         return textLabel
@@ -149,6 +178,13 @@ class TSPromptStyleViewCell: TSBaseCollectionCell {
             make.width.height.equalTo(80)
         }
         
+        imageView.addSubview(hotImageView)
+        hotImageView.snp.makeConstraints { make in
+            make.leading.equalTo(0)
+            make.top.equalTo(0.0)
+            make.width.height.equalTo(36)
+        }
+        
         imageView.addSubview(boardImageView)
         boardImageView.snp.makeConstraints { make in
             make.top.bottom.leading.trailing.equalTo(0)

+ 20 - 59
AIEmoji/Business/TSTextGeneralPictureVC/TSTextGeneralPictureVC/TSTextGeneralPictureVC.swift

@@ -9,48 +9,6 @@ class TSTextGeneralPictureVC: TSBaseVC {
     
     var viewModel:TSTextGeneralPictureVM = TSTextGeneralPictureVM()
     
-    lazy var vipBtn: UIButton = {
-       let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self]  in
-           guard let self = self else { return }
-           TSPurchaseVC.show(target: self) {
-     
-           }
-       }
-       return vipBtn
-   }()
-    
-
-    lazy var navBarView: TSBaseNavContentBarView = {
-       let navBarView = TSBaseNavContentBarView()
-       
-       let titleImageView = UIImageView.createImageView(imageName: "nav_title_pic",contentMode: .scaleToFill)
-       navBarView.barView.addSubview(titleImageView)
-       titleImageView.snp.makeConstraints { make in
-           make.centerY.equalToSuperview()
-           make.left.equalTo(16)
-       }
-       
-       let keyboardBtn = UIButton.createButton(image: UIImage(named: "keyboard")) { [weak self]  in
-           guard let self = self else { return }
-           kPresentModalVC(target: self, modelVC: TSWallpaperVC())
-       }
-       navBarView.barView.addSubview(keyboardBtn)
-        keyboardBtn.snp.makeConstraints { make in
-           make.centerY.equalToSuperview()
-           make.trailing.equalTo(-16)
-           make.width.height.equalTo(24)
-       }
-       
-       navBarView.barView.addSubview(vipBtn)
-       vipBtn.snp.makeConstraints { make in
-           make.centerY.equalToSuperview()
-           make.trailing.equalTo(-60)
-           make.width.height.equalTo(24)
-       }
-       
-       return navBarView
-   }()
-    
     lazy var collectionComponent: TSCollectionViewComponent = {
         let layout = UICollectionViewFlowLayout()
         let cp = TSCollectionViewComponent(frame: CGRect.zero, layout: layout, attributes: [ :])
@@ -102,43 +60,46 @@ class TSTextGeneralPictureVC: TSBaseVC {
     }()
     
     override func createView() {
-    
-        navBarContentView.addSubview(navBarView)
-        navBarView.snp.makeConstraints { make in
-            make.edges.equalToSuperview()
-        }
+
+        addNormalNavBarView()
+        setPageTitle("AI Photo Generator".localized)
         
         contentView.addSubview(collectionComponent.collectionView)
         collectionComponent.collectionView.snp.makeConstraints { make in
             make.edges.equalToSuperview()
         }
         
-        let vcViewH = generalRintoneVC.viewH
-        collectionComponent.collectionView.addSubview(generalRintoneVC.view)
-        collectionComponent.collectionView.contentInset = UIEdgeInsets(top: vcViewH, left: 0, bottom: 20, right: 0)
-        generalRintoneVC.view.snp.makeConstraints { make in
-            make.top.equalTo(-vcViewH)
-            make.leading.trailing.equalTo(0)
-            make.height.equalTo(vcViewH)
-        }
-        
-        
         let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickCollectionView))
         tapGesture.cancelsTouchesInView = false // 确保不影响其他点击事件
         collectionComponent.collectionView.addGestureRecognizer(tapGesture)
 
         collectionComponent.clear()
         collectionComponent.reloadView(with:viewModel.colDataArray)
+        
+        self.collectionComponent.collectionView.addSubview(self.generalRintoneVC.view)
+        setUpGeneralRintoneView()
+        kDelayMainShort {
+            self.setUpGeneralRintoneView()
+        }
+    }
+    
+    func setUpGeneralRintoneView() {
+        let vcViewH = self.generalRintoneVC.viewH
+
+        self.collectionComponent.collectionView.contentInset = UIEdgeInsets(top: vcViewH, left: 0, bottom: 20, right: 0)
+        self.generalRintoneVC.view.snp.remakeConstraints { make in
+            make.top.equalTo(-vcViewH)
+            make.leading.trailing.equalTo(0)
+            make.height.equalTo(vcViewH)
+        }
     }
     
     override func dealThings() {
-        vipBtn.isHidden = PurchaseManager.default.isVip
         NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
     }
     
     @objc func vipInfoChanged() {
         kExecuteOnMainThread {
-            self.vipBtn.isHidden = PurchaseManager.default.isVip
             self.collectionComponent.reloadData()
         }
     }

+ 10 - 10
AIEmoji/Business/TSTextGeneralPictureVC/TSTextGeneralPictureVC/ViewModel/TSTextGeneralPictureVM.swift

@@ -8,16 +8,16 @@
 import ObjectMapper
 
 let kRandomTextArray:[String] = [
-    "Ultra-detailed northern lights over a glacial lake, mirrored reflections with vibrant turquoise and magenta hues, surreal celestial atmosphere, digital painting style with soft glow effects.",
-    "Neon-lit cyberpunk night market in a rainy Asian metropolis, holographic food stalls and floating drones, teal-orange color grading, retro-futuristic architecture with glowing Kanji signs",
-    "Macro photography of rainbow candy landscape with gummy bear mountains, chocolate river and lollipop trees, hyper-realistic textures under golden hour lighting",
-    "Traditional Chinese ink painting style phoenix soaring through misty mountain peaks, dynamic black brushstrokes with crimson accents on rice paper texture",
-    "Bioluminescent underwater metropolis with glass dome structures, schools of glowing fish weaving through coral skyscrapers, deep-sea blue palette with neon coral highlights",
-    "1950s retro sci-fi movie poster style wallpaper featuring a rocket orbiting Saturn, vintage orange-teal color scheme with halftone textures and hand-drawn typography",
-    "Minimalist wallpaper with overlapping translucent 3D geometric shapes in gradient pastel colors, clean negative space, soft shadows and metallic accents, 4K abstract design.",
-    "Steampunk floating library with brass gears and clockwork mechanisms, leather-bound books flying through amber-lit fog, Victorian-era architecture blended with retro-futurism",
-    "Zen rock garden transformed into cosmic landscape, black sand waves surrounding cratered moon-like stones, starry galaxy reflected in miniature, monochromatic with silver foil accents",
-    "Futuristic AI core visualization with flowing golden data streams through transparent quantum circuits, dark background with floating holographic equations, cybernetic glow effect"
+    "A serene lakeside at dusk, golden reflections of autumn trees rippling in the water, distant snow-capped mountains under pastel-colored clouds",
+    "Futuristic greenhouse floating above neon-lit cityscape, transparent domes filled with bioluminescent plants, soft light diffraction through glass panels",
+    "Mystical stone archway covered in glowing moss, leading to a hidden valley with floating rock formations and cascading waterfalls",
+    "Underground crystal cave illuminated by geothermal energy, prismatic light beams refracting through giant quartz clusters, steam rising from thermal pools",
+    "Cosmic library with levitating bookshelves, celestial maps projected in mid-air, reading nooks overlooking spiral galaxy through stained glass windows",
+    "Morning fog enveloping terraced rice fields, bamboo water wheels turning slowly, thatched cottages emerging from mist with mountain silhouette behind",
+    "Surreal marketplace at planetary twilight, floating lanterns casting geometric shadows, merchants selling exotic fruits with iridescent skins",
+    "Hyperrealistic macro view of dewdrops on spiderweb, morning sunlight creating rainbow spectra, blurred forest background with bokeh effects",
+    "Cybernetic wildlife sanctuary at dawn, solar-panel trees powering force fields, robotic caretakers feeding holographic animals in savanna simulation",
+    "Minimalist geometric landscape with gradient-colored pyramids, clean lines intersecting with organic cloud formations, symmetrical composition"
 ]
 
 

+ 11 - 0
AIEmoji/Common/Ex/UIFont+TSEx.swift

@@ -0,0 +1,11 @@
+//
+//  Untitled.swift
+//  AIEmoji
+//
+//  Created by 100Years on 2025/4/1.
+//
+
+public extension FontName {
+    static let AccentURW   = "AccentURW"
+    static let PoppinsBlackItalic   = "Poppins-BlackItalic"
+}

+ 5 - 0
AIEmoji/Info.plist

@@ -7,5 +7,10 @@
 		<key>NSAllowsArbitraryLoads</key>
 		<true/>
 	</dict>
+	<key>UIAppFonts</key>
+	<array>
+		<string>Poppins-BlackItalic.ttf</string>
+		<string>AccentURW.ttf</string>
+	</array>
 </dict>
 </plist>

BIN
AIEmoji/Res/AccentURW.ttf


BIN
AIEmoji/Res/Poppins-BlackItalic.ttf


+ 7 - 0
AIEmoji/Res/photo_to_photo_style.json

@@ -1,4 +1,11 @@
 [
+    {
+        "imageName": "ptp_style_10",
+        "imageText": "Ghibli",
+        "prompt":"ghibli style",
+        "style":1,
+        "isVip": false
+    },
     {
         "imageName": "ptp_style_0",
         "imageText": "Retro Anime",

+ 7 - 0
AIEmoji/Res/text_to_photo_style.json

@@ -1,4 +1,11 @@
 [
+    {
+        "imageName": "ttp_style_10",
+        "imageText": "Ghibli",
+        "prompt":"ghibli ${user_input}, Studio Ghibli-styled masterpiece,(Miyazaki's pastel palette:teal|ochre|coral), dynamic cloud shadows, (hand-drawn line imperfections:1.2), 3/4 perspective view,  (nature reclaiming civilization motif), (Kiki's Delivery Service lighting:1.1),  --no 3D,octane,hyperrealistic,digital art --style_boost 80",
+        "style":1,
+        "isVip": false
+    },
     {
         "imageName": "ttp_style_0",
         "imageText": "Pop Art",