Explorar el Código

文生图尺寸开发一半

100Years hace 1 mes
padre
commit
f38245bc10
Se han modificado 28 ficheros con 422 adiciones y 48 borrados
  1. 6 2
      AIEmoji.xcodeproj/project.pbxproj
  2. 6 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/Contents.json
  3. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio16_9.imageset/Contents.json
  4. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio16_9.imageset/ttp_ratio16_9@2x.png
  5. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio16_9.imageset/ttp_ratio16_9@3x.png
  6. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio1_1.imageset/Contents.json
  7. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio1_1.imageset/ttp_ratio1_1@2x.png
  8. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio1_1.imageset/ttp_ratio1_1@3x.png
  9. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio2_3.imageset/Contents.json
  10. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio2_3.imageset/ttp_ratio2_3@2x.png
  11. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio2_3.imageset/ttp_ratio2_3@3x.png
  12. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_2.imageset/Contents.json
  13. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_2.imageset/ttp_ratio3_2@2x.png
  14. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_2.imageset/ttp_ratio3_2@3x.png
  15. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_4.imageset/Contents.json
  16. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_4.imageset/ttp_ratio3_4@2x.png
  17. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_4.imageset/ttp_ratio3_4@3x.png
  18. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio4_3.imageset/Contents.json
  19. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio4_3.imageset/ttp_ratio4_3@2x.png
  20. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio4_3.imageset/ttp_ratio4_3@3x.png
  21. 22 0
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio9_16.imageset/Contents.json
  22. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio9_16.imageset/ttp_ratio9_16@2x.png
  23. BIN
      AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio9_16.imageset/ttp_ratio9_16@3x.png
  24. 79 44
      AIEmoji/Business/TSAILIstVC/TSAIExpandImageVC/TSAIExpandImageVM.swift
  25. 12 1
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC.swift
  26. 5 0
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/VM/TSTTPInputVM.swift
  27. 159 0
      AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/View/TSTTPRatioView.swift
  28. 1 1
      AIEmoji/Common/Tool/TSCommonTool/TSCommonTool.swift

+ 6 - 2
AIEmoji.xcodeproj/project.pbxproj

@@ -15,6 +15,7 @@
 		A80327C32D81581D00AF7878 /* TSTTPStyleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80327C22D81580800AF7878 /* TSTTPStyleView.swift */; };
 		A80327C52D81584500AF7878 /* TSGeneralBtnView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80327C42D81582F00AF7878 /* TSGeneralBtnView.swift */; };
 		A804B9812DBF500E00C494C7 /* SwiftUIX in Frameworks */ = {isa = PBXBuildFile; productRef = A804B9802DBF500E00C494C7 /* SwiftUIX */; };
+		A804B98F2DC0F0F700C494C7 /* TSTTPRatioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A804B98E2DC0F0D800C494C7 /* TSTTPRatioView.swift */; };
 		A80E721A2D3F393A00C64288 /* DiyStickerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80E72192D3F393500C64288 /* DiyStickerModel.swift */; };
 		A80E721E2D3F3A7500C64288 /* DiyElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80E721D2D3F3A7500C64288 /* DiyElement.swift */; };
 		A80E72202D3F3A8600C64288 /* DiyElementBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80E721F2D3F3A8600C64288 /* DiyElementBaseView.swift */; };
@@ -261,6 +262,7 @@
 		A80327C02D8157C500AF7878 /* TSTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTitleView.swift; sourceTree = "<group>"; };
 		A80327C22D81580800AF7878 /* TSTTPStyleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTTPStyleView.swift; sourceTree = "<group>"; };
 		A80327C42D81582F00AF7878 /* TSGeneralBtnView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSGeneralBtnView.swift; sourceTree = "<group>"; };
+		A804B98E2DC0F0D800C494C7 /* TSTTPRatioView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTTPRatioView.swift; sourceTree = "<group>"; };
 		A80E72192D3F393500C64288 /* DiyStickerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiyStickerModel.swift; sourceTree = "<group>"; };
 		A80E721D2D3F3A7500C64288 /* DiyElement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiyElement.swift; sourceTree = "<group>"; };
 		A80E721F2D3F3A8600C64288 /* DiyElementBaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiyElementBaseView.swift; sourceTree = "<group>"; };
@@ -591,6 +593,7 @@
 				A875870E2D81689600286A66 /* TSPTPEnterView.swift */,
 				A80327C42D81582F00AF7878 /* TSGeneralBtnView.swift */,
 				A80327C22D81580800AF7878 /* TSTTPStyleView.swift */,
+				A804B98E2DC0F0D800C494C7 /* TSTTPRatioView.swift */,
 				A80327C02D8157C500AF7878 /* TSTitleView.swift */,
 				A80327BE2D81576C00AF7878 /* TSPromptTextView.swift */,
 			);
@@ -2312,6 +2315,7 @@
 				A8F776372D3A806E00AA6E93 /* TSGenmojiItemCell.swift in Sources */,
 				A89EA6692D59AA31000EB181 /* CameraInputBarAccessoryView.swift in Sources */,
 				A89EA66B2D59AA31000EB181 /* TSTextMessageContentCell.swift in Sources */,
+				A804B98F2DC0F0F700C494C7 /* TSTTPRatioView.swift in Sources */,
 				A83404D52D9D28D700C140E4 /* TSAIPhotoBrowseVC.swift in Sources */,
 				A89EA66C2D59AA31000EB181 /* TSMessageContentCell.swift in Sources */,
 				A87587122D81702700286A66 /* TSUserDefaultData.swift in Sources */,
@@ -2421,7 +2425,7 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIEmoji/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = Chibii;
+				INFOPLIST_KEY_CFBundleDisplayName = "AI Image";
 				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Allow us to access photos to upload your photos to generate new styles.";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
@@ -2460,7 +2464,7 @@
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIEmoji/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = Chibii;
+				INFOPLIST_KEY_CFBundleDisplayName = "AI Image";
 				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Allow us to access photos to upload your photos to generate new styles.";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;

+ 6 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/Contents.json

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

+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio16_9.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio16_9.imageset/ttp_ratio16_9@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio16_9.imageset/ttp_ratio16_9@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio1_1.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio1_1.imageset/ttp_ratio1_1@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio1_1.imageset/ttp_ratio1_1@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio2_3.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio2_3.imageset/ttp_ratio2_3@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio2_3.imageset/ttp_ratio2_3@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_2.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_2.imageset/ttp_ratio3_2@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_2.imageset/ttp_ratio3_2@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_4.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_4.imageset/ttp_ratio3_4@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio3_4.imageset/ttp_ratio3_4@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio4_3.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio4_3.imageset/ttp_ratio4_3@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio4_3.imageset/ttp_ratio4_3@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio9_16.imageset/Contents.json

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

BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio9_16.imageset/ttp_ratio9_16@2x.png


BIN
AIEmoji/Assets.xcassets/TextGeneralPicture/ratio/ttp_ratio9_16.imageset/ttp_ratio9_16@3x.png


+ 79 - 44
AIEmoji/Business/TSAILIstVC/TSAIExpandImageVC/TSAIExpandImageVM.swift

@@ -8,56 +8,91 @@
 import ObjectMapper
 import Alamofire
 
-class TSAIExpandImageVM {
+
+// MARK: - 比例枚举
+enum AspectRatio: Int ,CaseIterable {
+    case ratio1_1 = 0
+    case ratio16_9
+    case ratio9_16
+    case ratio4_3
+    case ratio3_4
+    case ratio2_3
+    case ratio3_2
     
-    // MARK: - 比例枚举
-    enum AspectRatio: Int {
-        case ratio1_1 = 0
-        case ratio16_9
-        case ratio9_16
-        case ratio4_3
-        case ratio3_4
-        case ratio2_3
-        case ratio3_2
-        
-        var value: CGFloat {
-            switch self {
-            case .ratio1_1: return 1.0
-            case .ratio16_9: return 16.0/9.0
-            case .ratio9_16: return 9.0/16.0
-            case .ratio4_3: return 4.0/3.0
-            case .ratio3_4: return 3.0/4.0
-            case .ratio2_3: return 2.0/3.0
-            case .ratio3_2: return 3.0/2.0
-            }
+    var value: CGFloat {
+        switch self {
+        case .ratio1_1: return 1.0
+        case .ratio16_9: return 16.0/9.0
+        case .ratio9_16: return 9.0/16.0
+        case .ratio4_3: return 4.0/3.0
+        case .ratio3_4: return 3.0/4.0
+        case .ratio2_3: return 2.0/3.0
+        case .ratio3_2: return 3.0/2.0
         }
-        
-        var displayName: String {
-            switch self {
-            case .ratio1_1: return "1:1"
-            case .ratio16_9: return "16:9"
-            case .ratio9_16: return "9:16"
-            case .ratio4_3: return "4:3"
-            case .ratio3_4: return "3:4"
-            case .ratio2_3: return "2:3"
-            case .ratio3_2: return "3:2"
-            }
+    }
+    
+    var displayName: String {
+        switch self {
+        case .ratio1_1: return "1:1"
+        case .ratio16_9: return "16:9"
+        case .ratio9_16: return "9:16"
+        case .ratio4_3: return "4:3"
+        case .ratio3_4: return "3:4"
+        case .ratio2_3: return "2:3"
+        case .ratio3_2: return "3:2"
         }
-        
-        static func creatAspectRatio(string:String)->AspectRatio{
-            switch string {
-            case "1:1": return .ratio1_1
-            case "16:9": return .ratio16_9
-            case "9:16": return .ratio9_16
-            case "4:3": return .ratio4_3
-            case "3:4": return .ratio3_4
-            case "2:3": return .ratio2_3
-            case "3:2": return .ratio3_2
-            default: return .ratio1_1
-            }
+    }
+    
+    static func creatAspectRatio(string:String)->AspectRatio{
+        switch string {
+        case "1:1": return .ratio1_1
+        case "16:9": return .ratio16_9
+        case "9:16": return .ratio9_16
+        case "4:3": return .ratio4_3
+        case "3:4": return .ratio3_4
+        case "2:3": return .ratio2_3
+        case "3:2": return .ratio3_2
+        default: return .ratio1_1
+        }
+    }
+    
+
+}
+extension AspectRatio {
+    
+    //ttp文生图比例 size
+    var ttpSize:CGSize{
+        switch self {
+        case .ratio1_1: return CGSize(width: 1440, height: 1440)
+        case .ratio16_9: return CGSize(width: 1440, height: 800)
+        case .ratio9_16: return CGSize(width: 800, height: 1440)
+        case .ratio4_3: return CGSize(width: 1440, height: 1056)
+        case .ratio3_4: return CGSize(width: 1056, height: 1440)
+        case .ratio2_3: return CGSize(width: 960, height: 1440)
+        case .ratio3_2: return CGSize(width: 1440, height: 960)
         }
     }
+    
+    //ttp文生图比例 size
+    var ttpImageNamed:String{
+        switch self {
+        case .ratio1_1: return "ttp_ratio1_1"
+        case .ratio16_9: return "ttp_ratio16_9"
+        case .ratio9_16: return "ttp_ratio9_16"
+        case .ratio4_3: return "ttp_ratio4_3"
+        case .ratio3_4: return "ttp_ratio3_4"
+        case .ratio2_3: return "ttp_ratio2_3"
+        case .ratio3_2: return "ttp_ratio3_2"
+        }
+    }
+    
+    static func ttpDataArray()->[AspectRatio]{
+        return AspectRatio.allCases
+    }
+}
 
+class TSAIExpandImageVM {
+    
     var currentRatio: AspectRatio{
         if let selectStyleModel = selectStyleModel {
             return AspectRatio.creatAspectRatio(string: selectStyleModel.imageText)

+ 12 - 1
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/TSTTPInputVC.swift

@@ -61,7 +61,18 @@ class TSTTPInputVC: TSBaseVC {
         return promptStyleView
     }()
     
-    
+    //###################################### 尺寸类型 ######################################
+    lazy var ratioStyleView: TSTTPRatioView = {
+        let ratioStyleView = TSTTPRatioView()
+        ratioStyleView.currentIndexPath = IndexPath(item: viewModel.selectedStyleIndex, section: 0)
+        ratioStyleView.dataArray = viewModel.ptpStyleModels
+        ratioStyleView.selectedValueBlock = { [weak self] model in
+            guard let self = self else { return }
+            viewModel.selectPromptModel = model
+            updateVipView()
+        }
+        return ratioStyleView
+    }()
     //###################################### Button ######################################
     lazy var creatBtnView:TSGeneralBtnView  = {
         let creatBtnView = TSGeneralBtnView {[weak self] in

+ 5 - 0
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/VM/TSTTPInputVM.swift

@@ -36,6 +36,11 @@ class TSTTPInputVM {
         return ptpStyleModels
     }()
     
+    lazy var <#property name#>: [AspectRatio] = {
+        <#statements#>
+        return <#value#>
+    }()
+    
     //输入框内容
     var promptText:String = "" {
         didSet{

+ 159 - 0
AIEmoji/Business/TSTextGeneralPictureVC/TSTTPInputVC/View/TSTTPRatioView.swift

@@ -0,0 +1,159 @@
+//
+//  TSTTPRatioView.swift
+//  AIEmoji
+//
+//  Created by 100Years on 2025/4/29.
+//
+
+class TSTTPRatioView:TSBaseView {
+    
+    var selectedValueBlock:((TSGenerateStyleModel)->Void)?
+    
+    var dataArray: [TSGenerateStyleModel] = [TSGenerateStyleModel](){
+        didSet{
+            styleCollectionView.reloadData()
+            if dataArray.count > 0 {
+                self.styleCollectionView.selectItem(at: self.currentIndexPath, animated: false, scrollPosition: .centeredHorizontally)
+            }
+        }
+    }
+    
+    lazy var layout: UICollectionViewFlowLayout = {
+        let layout = UICollectionViewFlowLayout()
+        layout.scrollDirection = .horizontal
+        layout.itemSize = CGSize(width: 68, height: 80)
+        layout.minimumInteritemSpacing = 12.0
+        layout.minimumLineSpacing = 0.0
+        layout.sectionInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)
+        return layout
+    }()
+    
+    
+    lazy var styleCollectionView: UICollectionView = {
+        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
+        collectionView.delegate = self
+        collectionView.dataSource = self
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        collectionView.backgroundColor = .clear
+        collectionView.register(TSTTPRatioViewCell.self, forCellWithReuseIdentifier: TSTTPRatioViewCell.cellID)
+        if #available(iOS 11.0, *) {
+            collectionView.contentInsetAdjustmentBehavior = .never
+        }
+        return collectionView
+    }()
+
+    var currentIndexPath:IndexPath = IndexPath(item: 0, section: 0)
+    
+    
+    lazy var titleView: TSTitleView = {
+        let titleView = TSTitleView()
+        titleView.titleLab.text = "Ratio".localized
+        return titleView
+    }()
+    
+    
+    override func creatUI() {
+        
+        let titleViewH = titleView.viewH
+        contentView.addSubview(titleView)
+        titleView.snp.makeConstraints { make in
+            make.top.equalTo(0)
+            make.leading.trailing.equalTo(0)
+            make.height.equalTo(titleViewH)
+        }
+        
+        currentIndexPath = IndexPath(item: 0, section: 0)
+        contentView.addSubview(styleCollectionView)
+        styleCollectionView.snp.makeConstraints { make in
+            make.top.equalTo(titleView.snp.bottom)
+            make.leading.trailing.equalTo(0)
+            make.height.equalTo(110)
+            make.bottom.equalTo(0)
+        }
+    }
+    
+    func unCheck(){
+        styleCollectionView.deselectItem(at: currentIndexPath, animated: true)
+    }
+    
+}
+
+extension TSTTPRatioView: UICollectionViewDataSource ,UICollectionViewDelegate {
+    
+    public func numberOfSections(in collectionView: UICollectionView) -> Int {
+        return 1
+    }
+    
+    public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return dataArray.count
+    }
+    
+    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        
+        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TSTTPRatioViewCell.cellID, for: indexPath)
+        if let cell = cell as? TSTTPRatioViewCell,let itemModel = dataArray.safeObj(At: indexPath.item){
+            cell.itemModel = itemModel
+        }
+        return cell
+    }
+
+    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
+        if let model = dataArray.safeObj(At: indexPath.item){
+            currentIndexPath = indexPath
+            selectedValueBlock?(model)
+        }
+    }
+}
+
+class TSTTPRatioViewCell: TSBaseCollectionCell {
+    
+    static let cellID = "TSTTPRatioViewCell"
+
+    override var isSelected: Bool{
+        didSet{
+            boardImageView.isHidden = isSelected ? false : true
+        }
+    }
+    
+    var itemModel:TSGenerateStyleModel = TSGenerateStyleModel(){
+        didSet{
+            imageView.image = UIImage(named: itemModel.imageName)
+        }
+    }
+
+    lazy var boardImageView: UIImageView = {
+        let boardImageView = UIImageView.createImageView(imageName: "ttp_selected_border")
+        boardImageView.isHidden = true
+        return boardImageView
+    }()
+
+    
+    lazy var imageView: UIImageView = {
+        let imageView = UIImageView()
+        imageView.cornerRadius = 40.0
+        return imageView
+    }()
+    
+
+    override func creatUI() {
+        //cell 100*110
+   
+        bgContentView.addSubview(imageView)
+        imageView.snp.makeConstraints { make in
+            make.top.equalTo(0)
+            make.centerX.equalToSuperview()
+            make.width.height.equalTo(80)
+        }
+        
+
+        
+        imageView.addSubview(boardImageView)
+        boardImageView.snp.makeConstraints { make in
+            make.top.bottom.leading.trailing.equalTo(0)
+        }
+
+    }
+    
+}
+

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

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