100Years пре 3 недеља
родитељ
комит
5d30edaf97
38 измењених фајлова са 119 додато и 104 уклоњено
  1. 4 4
      AIRingtone.xcodeproj/project.pbxproj
  2. 9 0
      AIRingtone/AppDelegate.swift
  3. 0 0
      AIRingtone/Assets.xcassets/Discover/square_bottom_shadow.imageset/Contents.json
  4. 0 0
      AIRingtone/Assets.xcassets/Discover/square_bottom_shadow.imageset/discovercell_shadow@2x.png
  5. 0 0
      AIRingtone/Assets.xcassets/Discover/square_bottom_shadow.imageset/discovercell_shadow@3x.png
  6. 22 0
      AIRingtone/Assets.xcassets/Discover/square_top_shadow.imageset/Contents.json
  7. BIN
      AIRingtone/Assets.xcassets/Discover/square_top_shadow.imageset/square_top_shadow@2x.png
  8. BIN
      AIRingtone/Assets.xcassets/Discover/square_top_shadow.imageset/square_top_shadow@3x.png
  9. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_0.imageset/bootPage_0@2x.png
  10. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_0.imageset/bootPage_0@3x.png
  11. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_1.imageset/bootPage_1@2x.png
  12. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_1.imageset/bootPage_1@3x.png
  13. 2 2
      AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/Contents.json
  14. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_1@2x.png
  15. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_1@3x.png
  16. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_2@2x.png
  17. BIN
      AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_2@3x.png
  18. BIN
      AIRingtone/Assets.xcassets/Tabbar/tabbar_select_discover.imageset/tabbar_select_discover@2x.png
  19. BIN
      AIRingtone/Assets.xcassets/Tabbar/tabbar_select_discover.imageset/tabbar_select_discover@3x.png
  20. BIN
      AIRingtone/Assets.xcassets/Tabbar/tabbar_unSelect_discover.imageset/tabbar_unSelect_discover@2x.png
  21. BIN
      AIRingtone/Assets.xcassets/Tabbar/tabbar_unSelect_discover.imageset/tabbar_unSelect_discover@3x.png
  22. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_ads.imageset/vip_ads@2x.png
  23. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_ads.imageset/vip_ads@3x.png
  24. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_photo.imageset/vip_photo@2x.png
  25. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_photo.imageset/vip_photo@3x.png
  26. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_pic.imageset/vip_pic@2x.png
  27. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_pic.imageset/vip_pic@3x.png
  28. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_ringtone.imageset/vip_ringtone@2x.png
  29. BIN
      AIRingtone/Assets.xcassets/VIP/listIcon/vip_ringtone.imageset/vip_ringtone@3x.png
  30. BIN
      AIRingtone/Assets.xcassets/VIP/upvote_black.imageset/upvote_black@2x.png
  31. BIN
      AIRingtone/Assets.xcassets/VIP/upvote_black.imageset/upvote_black@3x.png
  32. 2 70
      AIRingtone/Business/LaunchVC/TSBootPageVC.swift
  33. 1 1
      AIRingtone/Business/TSAIPhotoVC/TSTextGeneralPicVC/View/TSPromptStyleView.swift
  34. 13 1
      AIRingtone/Business/TSDiscoverVC/TSDiscoverVC/View/TSDiscoverCell.swift
  35. 54 20
      AIRingtone/Business/TSPurchaseMembershipVC/TSPurchaseVC.swift
  36. 8 3
      AIRingtone/Business/TSSetingVC/SetingVC/TSSetingVC.swift
  37. 2 2
      AIRingtone/Business/TSTabBarController/TSTabBarController.swift
  38. 2 1
      AIRingtone/Common/Purchase/TSPurchaseManager/TSPurchaseTool.swift

+ 4 - 4
AIRingtone.xcodeproj/project.pbxproj

@@ -1323,7 +1323,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 3;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIRingtone/Info.plist;
@@ -1342,7 +1342,7 @@
 					"$(inherited)",
 					"$(PROJECT_DIR)/AIRingtone/Common/Tool/TSBandRingTool/libmp3",
 				);
-				MARKETING_VERSION = 1.6;
+				MARKETING_VERSION = 1.7;
 				PRODUCT_BUNDLE_IDENTIFIER = ai.ringtones.com;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -1365,7 +1365,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 3;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIRingtone/Info.plist;
@@ -1384,7 +1384,7 @@
 					"$(inherited)",
 					"$(PROJECT_DIR)/AIRingtone/Common/Tool/TSBandRingTool/libmp3",
 				);
-				MARKETING_VERSION = 1.6;
+				MARKETING_VERSION = 1.7;
 				PRODUCT_BUNDLE_IDENTIFIER = ai.ringtones.com;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

+ 9 - 0
AIRingtone/AppDelegate.swift

@@ -148,6 +148,15 @@ extension AppDelegate {
         }
     }
     
+    
+    static func setsTopDayPopPurchase() {
+        let currentDate = Date()
+        let dateFormatter = DateFormatter()
+        dateFormatter.dateFormat = "yyyyMMdd"
+        let currentDateString = dateFormatter.string(from: currentDate)
+        UserDefaults.standard.set(currentDateString, forKey: "kEveryDayPopPurchase")
+    }
+    
     func checkAppConfig(){
         _ = TSNetworkShared.get(urlType: .config) { data,error in
             

+ 0 - 0
AIRingtone/Assets.xcassets/Discover/discovercell_shadow.imageset/Contents.json → AIRingtone/Assets.xcassets/Discover/square_bottom_shadow.imageset/Contents.json


+ 0 - 0
AIRingtone/Assets.xcassets/Discover/discovercell_shadow.imageset/discovercell_shadow@2x.png → AIRingtone/Assets.xcassets/Discover/square_bottom_shadow.imageset/discovercell_shadow@2x.png


+ 0 - 0
AIRingtone/Assets.xcassets/Discover/discovercell_shadow.imageset/discovercell_shadow@3x.png → AIRingtone/Assets.xcassets/Discover/square_bottom_shadow.imageset/discovercell_shadow@3x.png


+ 22 - 0
AIRingtone/Assets.xcassets/Discover/square_top_shadow.imageset/Contents.json

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

BIN
AIRingtone/Assets.xcassets/Discover/square_top_shadow.imageset/square_top_shadow@2x.png


BIN
AIRingtone/Assets.xcassets/Discover/square_top_shadow.imageset/square_top_shadow@3x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_0.imageset/bootPage_0@2x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_0.imageset/bootPage_0@3x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_1.imageset/bootPage_1@2x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_1.imageset/bootPage_1@3x.png


+ 2 - 2
AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/Contents.json

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

BIN
AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_1@2x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_1@3x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_2@2x.png


BIN
AIRingtone/Assets.xcassets/Launch/bootPage_2.imageset/bootPage_2@3x.png


BIN
AIRingtone/Assets.xcassets/Tabbar/tabbar_select_discover.imageset/tabbar_select_discover@2x.png


BIN
AIRingtone/Assets.xcassets/Tabbar/tabbar_select_discover.imageset/tabbar_select_discover@3x.png


BIN
AIRingtone/Assets.xcassets/Tabbar/tabbar_unSelect_discover.imageset/tabbar_unSelect_discover@2x.png


BIN
AIRingtone/Assets.xcassets/Tabbar/tabbar_unSelect_discover.imageset/tabbar_unSelect_discover@3x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_ads.imageset/vip_ads@2x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_ads.imageset/vip_ads@3x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_photo.imageset/vip_photo@2x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_photo.imageset/vip_photo@3x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_pic.imageset/vip_pic@2x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_pic.imageset/vip_pic@3x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_ringtone.imageset/vip_ringtone@2x.png


BIN
AIRingtone/Assets.xcassets/VIP/listIcon/vip_ringtone.imageset/vip_ringtone@3x.png


BIN
AIRingtone/Assets.xcassets/VIP/upvote_black.imageset/upvote_black@2x.png


BIN
AIRingtone/Assets.xcassets/VIP/upvote_black.imageset/upvote_black@3x.png


+ 2 - 70
AIRingtone/Business/LaunchVC/TSBootPageVC.swift

@@ -18,7 +18,7 @@ class TSBootPageVC: TSBaseVC {
         fatalError("init(coder:) has not been implemented")
     }
     var index:Int = 0
-    let titleStrings = ["Create Ringtones with AI".localized,"Thousands of Ringtones".localized,"Calling Theme Surprise You".localized]
+    let titleStrings = ["Hot TikTok Ringtones".localized,"Create Ringtones with AI".localized,"Discover 100,000+ Ringtones".localized]
     let imageStrings = ["bootPage_0","bootPage_1","bootPage_2"]
     
     
@@ -45,75 +45,6 @@ class TSBootPageVC: TSBaseVC {
         return continueBtn
     }()
     
-//    lazy var scrollView: UIScrollView = {
-//        let scrollView = UIScrollView()
-//        scrollView.isScrollEnabled = false
-//        scrollView.frame = self.view.bounds
-//
-//        let imageView0 = UIImageView.createImageView(imageName: "bootPage_0",contentMode: .scaleAspectFill)
-//        imageView0.frame = CGRectMake(0, 0, k_ScreenWidth, k_ScreenHeight)
-//        scrollView.addSubview(imageView0)
-//        
-//        let imageView1 = UIImageView.createImageView(imageName: "bootPage_1",contentMode: .scaleAspectFill)
-//        imageView1.frame = CGRectMake(k_ScreenWidth, 0, k_ScreenWidth, k_ScreenHeight)
-//        scrollView.addSubview(imageView1)
-//        
-//        let imageView2 = UIImageView.createImageView(imageName: "bootPage_2",contentMode: .scaleAspectFill)
-//        imageView2.frame = CGRectMake(k_ScreenWidth*2, 0, k_ScreenWidth, k_ScreenHeight)
-//        scrollView.addSubview(imageView2)
-//        
-//        let btnH = k_ScreenHeight/5
-//        let btnTop = btnH*4
-//        
-//        let button0 = UIButton(frame: CGRectMake(0, btnTop, k_ScreenWidth, btnH))
-//        button0.tag = 1
-//        button0.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
-//        scrollView.addSubview(button0)
-//        
-//        let button1 = UIButton(frame: CGRectMake(k_ScreenWidth, btnTop, k_ScreenWidth, btnH))
-//        button1.tag = 2
-//        button1.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
-//        scrollView.addSubview(button1)
-//        
-//        let button2 = UIButton(frame: CGRectMake(k_ScreenWidth*2, btnTop, k_ScreenWidth, btnH))
-//        button2.tag = 3
-//        button2.addTarget(self, action: #selector(clickBtn(_:)), for: .touchUpInside)
-//        scrollView.addSubview(button2)
-//        
-//        scrollView.addSubview(titleLabel)
-//        scrollView.addSubview(continueBtn)
-//        continueBtn.snp.makeConstraints { make in
-//            make.width.equalTo(continueBtn.width)
-//            make.height.equalTo(continueBtn.height)
-//            make.bottom.equalTo(-61)
-//            make.centerY.equalToSuperview()
-//        }
-//        
-//        titleLabel.snp.makeConstraints { make in
-//            make.leading.equalTo(16)
-//            make.trailing.equalTo(-16)
-//            make.bottom.equalTo(continueBtn.snp.top).offset(-36)
-//        }
-//        return scrollView
-//    }()
-//    
-//    override func createView() {
-//        setNavBarViewHidden(true)
-//        self.view.backgroundColor = .black
-//        self.view.addSubview(scrollView)
-//        titleLabel.text = titleStrings.safeString(At: index)
-//    }
-    
-    
-//    @objc func clickBtn(_ btn:UIButton){
-//        if btn.tag <= 2{
-//            scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(btn.tag), 0)
-//        }else{
-//            onComplete()
-//            self.navBarClickLeftAction()
-//        }
-//    }
-    
     @objc func clickBtn(_ btn:UIButton){
         if btn.tag <= 2{
             scrollView.contentOffset = CGPointMake(k_ScreenWidth*CGFloat(btn.tag), 0)
@@ -179,6 +110,7 @@ class TSBootPageVC: TSBaseVC {
                 onComplete()
             }
             self.navigationController?.pushViewController(vc, animated: true)
+            AppDelegate.setsTopDayPopPurchase()
         }
         
     }

+ 1 - 1
AIRingtone/Business/TSAIPhotoVC/TSTextGeneralPicVC/View/TSPromptStyleView.swift

@@ -134,7 +134,7 @@ class TSPTPSelectStyleCCell: TSBaseCollectionCell {
     }()
     
     lazy var shadowImageView: UIImageView = {
-        let shadowImageView = UIImageView.createImageView(imageName: "discovercell_shadow",contentMode: .scaleAspectFill)
+        let shadowImageView = UIImageView.createImageView(imageName: "square_bottom_shadow",contentMode: .scaleAspectFill)
         return shadowImageView
     }()
     

+ 13 - 1
AIRingtone/Business/TSDiscoverVC/TSDiscoverVC/View/TSDiscoverCell.swift

@@ -21,8 +21,14 @@ class TSDiscoverCell: TSBaseCollectionCell {
         return imageView
     }()
     
+    lazy var shadowImageView: UIImageView = {
+        let shadowImageView = UIImageView.createImageView(imageName: "square_top_shadow",contentMode: .scaleAspectFill)
+        return shadowImageView
+    }()
+
+    
     lazy var textLabel: UILabel = {
-        let textLabel = UILabel.createLabel(font: .font(size: 14),textColor: .white,textAlignment: .center,numberOfLines: 0)
+        let textLabel = UILabel.createLabel(font: .font(size: 18,weight: .medium),textColor: .white,textAlignment: .center,numberOfLines: 0)
         textLabel.addShadow(shadowColor: UIColor.black.cgColor, shadowOffset: CGSize(width: 0, height: 2), shadowRadius: 2, shadowOpacity: 0.6)
         return textLabel
     }()
@@ -34,6 +40,12 @@ class TSDiscoverCell: TSBaseCollectionCell {
             make.top.bottom.leading.trailing.equalTo(0)
         }
         
+        bgContentView.addSubview(shadowImageView)
+        shadowImageView.snp.makeConstraints { make in
+            make.top.leading.trailing.equalTo(0)
+            make.height.equalTo(41.0)
+        }
+        
         bgContentView.addSubview(textLabel)
         textLabel.snp.makeConstraints { make in
             make.leading.equalTo(6)

+ 54 - 20
AIRingtone/Business/TSPurchaseMembershipVC/TSPurchaseVC.swift

@@ -10,7 +10,7 @@ import SwiftUI
 import SwiftUIX
 class PurchaseViewModel : ObservableObject{
     
-    @Published var selectedType: PremiumPeriod = .month
+    @Published var selectedType: PremiumPeriod = .year
     
     /// 订阅publisher
     let buyPublisher  = PassthroughSubject<Bool,Never>()
@@ -41,15 +41,32 @@ class TSPurchaseVC: TSBaseVC {
         return vc
     }()
     
+    lazy var closeBtn: UIButton = {
+        let closeBtn = UIButton.createButton(image: UIImage(named: "close_gray")){ [weak self]  in
+            guard let self = self else { return }
+            closePage()
+        }
+        return closeBtn
+    }()
     override func createView() {
-        addNormalNavBarView()
-        _ = setNavigationItem("", imageName: "close_gray", direction: .left, action: #selector(closePage))
+//        addNormalNavBarView()
+//        _ = setNavigationItem("", imageName: "close_gray", direction: .left, action: #selector(closePage))
+        
+        setNavBarViewHidden(true)
         setViewBgImageNamed(named: "purchase_bj")
 
         contentView.addSubview(hostVc.view)
         hostVc.view.snp.makeConstraints { make in
             make.leading.trailing.bottom.top.equalToSuperview()
         }
+        
+        contentView.addSubview(closeBtn)
+        closeBtn.snp.makeConstraints { make in
+            make.leading.equalTo(10)
+            make.top.equalTo(k_Height_StatusBar + 4)
+            make.width.height.equalTo(36)
+        }
+        
     }
     
     override func dealThings() {
@@ -212,7 +229,7 @@ struct PurchaseView :View {
     
     var body: some View {
         ScrollView {
-//            Spacer().frame(height: 44)
+            Spacer().frame(height:k_Height_StatusBar + 6)
             
             VStack {
                 Image("vip_big_icon").resizable().frame(width: 163, height: 163)
@@ -230,24 +247,25 @@ struct PurchaseView :View {
                 
                 ZStack {
                     VStack(alignment: .leading,spacing: 20) {
-                        
+                        let w = 28.0
+                        let h = 28.0
                         HStack(spacing: 16) {
-                            Image("vip_ringtone").resizable().frame(width: 32, height: 32)
+                            Image("vip_ringtone").resizable().frame(width: w, height: h)
                             Text("Unlimited ringtones generation")
                         }
                         
                         HStack(spacing: 16) {
-                            Image("vip_pic").resizable().frame(width: 32, height: 32)
+                            Image("vip_pic").resizable().frame(width: w, height: h)
                             Text("Generate unlimited contact poster&photo")
                         }
                         
                         HStack(spacing: 16) {
-                            Image("vip_photo").resizable().frame(width: 32, height: 32)
+                            Image("vip_photo").resizable().frame(width: w, height: h)
                             Text("Unlock all premium calling theme")
                         }
                         
                         HStack(spacing: 16) {
-                            Image("vip_ads").resizable().frame(width: 32, height: 32)
+                            Image("vip_ads").resizable().frame(width: w, height: h)
                             Text("100% No Ads").multilineTextAlignment(.leading)
                         }
                         
@@ -256,19 +274,26 @@ struct PurchaseView :View {
          
             }
             
-            Spacer().frame(height: 48)
+            Spacer().frame(height: 22)
             
             
             VStack(spacing: 12) {
                 
+                ZStack(alignment: .topTrailing) {
+                    PurchaseItemView(title: "One Year", type: .year, selectedType: $viewModel.selectedType).onTapGesture {
+                        viewModel.selectedType = .year
+                    }
+                    
+                    TSVipRecView().offset(y:-14)
+                }
+          
                 ZStack(alignment: .topTrailing) {
                     PurchaseItemView(title: "One Month", type: .month, selectedType: $viewModel.selectedType).onTapGesture {
                         viewModel.selectedType = .month
                     }
-//                    TSVipRecView()
-//                        .offset(y:-14)
+
                 }
-          
+               
 //                HStack {
 //                    PurchaseItemView(title: "One Year", type: .year, selectedType: $viewModel.selectedType).onTapGesture {
 //                        viewModel.selectedType = .year
@@ -334,27 +359,36 @@ struct PurchaseItemView: View {
     @Binding var selectedType: PremiumPeriod
 
     var body: some View {
+        let themeColor = Color.hex("#E661F6")
+        let fontColor = type == selectedType ? UIColor.mainText.color : UIColor.textAssist.color
+        
         ZStack {
-            Color.clear
+            if type == selectedType {
+                themeColor.opacity(0.1)
+            }else{
+                Color.white.opacity(0.1)
+            }
+            
             HStack {
                 VStack(alignment: .leading, spacing: 8) {
-                    Text(title).font(.font(size: 14)).foregroundColor(UIColor.textAssist.color)
-                    Text(kPurchaseDefault.price(for: type) ?? "--").font(.font(size: 18,weight: .medium)).foregroundColor(UIColor.mainText.color)
+                    Text(title).font(.font(size: 14)).foregroundColor(fontColor)
+                    Text(kPurchaseDefault.price(for: type) ?? "--").font(.font(size: 18,weight: .medium)).foregroundColor(fontColor)
                 }
                 Spacer()
                 if type == selectedType {
                     Image(.radioboxSelected)
                 }
             }.padding(.horizontal)
+
         }
         .frame(height: 74) // 设置高度
         .cornerRadius(16.0) // 圆角
        
         .overlay(
             RoundedRectangle(cornerRadius: 16)
-                .stroke(Color.hex("#E661F6"), lineWidth: type == selectedType ? 1 : 0) // 边框
+                .stroke(themeColor, lineWidth: type == selectedType ? 1 : 0) // 边框
         )
-        .shadow(color: Color.hex("#E661F6"), radius: 4, x: 0, y: 1)
+        .shadow(color: type == selectedType ? themeColor : Color.clear, radius: 4, x: 0, y: 1)
     }
 }
 
@@ -364,10 +398,10 @@ struct TSVipRecView: View {
         
         HStack(spacing: 4) {
             Image("upvote_black").resizable().frame(width: 16, height: 16)
-            Text("80% Choose").font(.font(size: 12,weight: .medium)).foregroundColor(.hex("#111111"))
+            Text("Save 60%").font(.font(size: 12,weight: .medium)).foregroundColor(.white)
         }
         .padding(EdgeInsets(top: 6, leading: 6, bottom: 6, trailing: 6))
-        .background(Color.hex("#FECB34"))
+        .background(Color.hex("#E661F6"))
         .frame(height: 28) // 设置高度
         .cornerRadius([.topLeading, .topTrailing, .bottomLeading], 16.0)
     }

+ 8 - 3
AIRingtone/Business/TSSetingVC/SetingVC/TSSetingVC.swift

@@ -104,9 +104,14 @@ class TSSetingVC: TSBaseVC {
     }
     
     @objc func refreshView() {
-        if let newVerison = Float(kAppNewVerison),
-           let oldVerison = Float(appShortVersion()){
-            self.viewModel.isHaveNewVersion = newVerison > oldVerison
+        
+        if UIApplication.compareAppVersions(newVersion1: kAppNewVerison, oldVersion: appShortVersion()) == .newer {
+            self.viewModel.isHaveNewVersion = true
         }
+        
+//        if let newVerison = Float(kAppNewVerison),
+//           let oldVerison = Float(appShortVersion()){
+//            self.viewModel.isHaveNewVersion = newVerison > oldVerison
+//        }
     }
 }

+ 2 - 2
AIRingtone/Business/TSTabBarController/TSTabBarController.swift

@@ -24,8 +24,8 @@ class TSTabBarController: UITabBarController {
     }
 
     @objc private func setUpData() {
-        viewControllerArray = ["TSAIRintoneVC","TSDiscoverVC","TSThemeVC","TSSetingVC"]
-        titleArray = ["AI","Discover","Contact","Setting"]
+        viewControllerArray = ["TSDiscoverVC","TSAIRintoneVC","TSThemeVC","TSSetingVC"]
+        titleArray = ["Rintone","AI","Contact","Setting"]
         
         selectedImageArray = [
             "tabbar_select_rintone",

+ 2 - 1
AIRingtone/Common/Purchase/TSPurchaseManager/TSPurchaseTool.swift

@@ -104,7 +104,8 @@ extension TSPurchaseTool{
     func luanchuPrchase() {
         kPurchaseDefault.AppleSharedKey = "4ed5151881304025bfee0295ee459422"
         kPurchaseDefault.purchaseProducts = [
-            PurchaseProduct(productId: "01", period:.month)
+            PurchaseProduct(productId: "01", period:.month),
+            PurchaseProduct(productId: "02", period:.year)
         ]
         kPurchaseDefault.requestProducts()