Kaynağa Gözat

feat:3.6.6(1)
1.活照片开发完毕
2.新的升级弹窗

100Years 2 ay önce
ebeveyn
işleme
fcf1d79e3b
26 değiştirilmiş dosya ile 325 ekleme ve 24 silme
  1. 1 0
      Podfile
  2. 21 1
      Podfile.lock
  3. 16 0
      TSLiveWallpaper.xcodeproj/project.pbxproj
  4. 7 1
      TSLiveWallpaper/AppDelegate.swift
  5. 6 0
      TSLiveWallpaper/Assets.xcassets/AppUpdate/Contents.json
  6. 22 0
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_bg.imageset/Contents.json
  7. BIN
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_bg.imageset/app_update_bg@2x.png
  8. BIN
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_bg.imageset/app_update_bg@3x.png
  9. 22 0
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_close.imageset/Contents.json
  10. BIN
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_close.imageset/app_update_close@2x.png
  11. BIN
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_close.imageset/app_update_close@3x.png
  12. 22 0
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_icon.imageset/Contents.json
  13. BIN
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_icon.imageset/app_update_icon@2x.png
  14. BIN
      TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_icon.imageset/app_update_icon@3x.png
  15. 110 0
      TSLiveWallpaper/Business/General/TSAppUpdateAlertVC/TSAppUpdateAlertVC.swift
  16. 14 13
      TSLiveWallpaper/Business/TSAIListVC/TSAIListVC/TSAIListVM.swift
  17. 29 0
      TSLiveWallpaper/Business/TSAIListVC/TSAIListVC/View/TSAILIstCell.swift
  18. 1 1
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserCell.swift
  19. 2 2
      TSLiveWallpaper/Business/TSAIListVC/TSAIUploadPhotoVC/View/TSAIUploadPhotoTextView.swift
  20. 6 1
      TSLiveWallpaper/Business/TSTabBarController/TSTabBarController.swift
  21. 0 5
      TSLiveWallpaper/Common/Tool/TSCommonTool/TSCommonTool.swift
  22. 1 0
      TSLiveWallpaper/Data/TSAppUpdateManager/TSAppUpdateManager.swift
  23. BIN
      TSLiveWallpaper/Resource/animated_photos.webp
  24. 15 0
      TSLiveWallpaper/ar.lproj/Localizable.strings
  25. 15 0
      TSLiveWallpaper/en.lproj/Localizable.strings
  26. 15 0
      TSLiveWallpaper/es.lproj/Localizable.strings

+ 1 - 0
Podfile

@@ -28,6 +28,7 @@ target 'TSLiveWallpaper' do
   pod 'TSSmalCoacopods', :path => '../TSSmalCoacopods'
   pod "DynamicBlurView"
 #  pod 'TYCyclePagerView'
+  pod "KingfisherWebP"
 end
 
 

+ 21 - 1
Podfile.lock

@@ -18,8 +18,23 @@ PODS:
   - BetterSegmentedControl (2.0.1)
   - DynamicBlurView (5.0.3)
   - Kingfisher (7.10.0)
+  - KingfisherWebP (1.5.4):
+    - Kingfisher (~> 7.9)
+    - libwebp (>= 1.1.0)
   - KLExtension (0.1.0)
   - KLTips (0.1.0)
+  - libwebp (1.5.0):
+    - libwebp/demux (= 1.5.0)
+    - libwebp/mux (= 1.5.0)
+    - libwebp/sharpyuv (= 1.5.0)
+    - libwebp/webp (= 1.5.0)
+  - libwebp/demux (1.5.0):
+    - libwebp/webp
+  - libwebp/mux (1.5.0):
+    - libwebp/demux
+  - libwebp/sharpyuv (1.5.0)
+  - libwebp/webp (1.5.0):
+    - libwebp/sharpyuv
   - Localize-Swift (3.2.0):
     - Localize-Swift/LocalizeSwiftCore (= 3.2.0)
     - Localize-Swift/UIKit (= 3.2.0)
@@ -57,6 +72,7 @@ DEPENDENCIES:
   - BetterSegmentedControl (~> 2.0)
   - DynamicBlurView
   - Kingfisher (= 7.10.0)
+  - KingfisherWebP
   - KLExtension (from `https://gitee.com/WanlanNeel/klextension.git`)
   - KLTips (from `https://gitee.com/WanlanNeel/kltips.git`)
   - Localize-Swift (~> 3.2)
@@ -76,6 +92,8 @@ SPEC REPOS:
     - BetterSegmentedControl
     - DynamicBlurView
     - Kingfisher
+    - KingfisherWebP
+    - libwebp
     - Localize-Swift
     - MarqueeLabel
     - MJRefresh
@@ -114,8 +132,10 @@ SPEC CHECKSUMS:
   BetterSegmentedControl: 09607b27861d49cbce48b7673b74f9150a3d371a
   DynamicBlurView: b57e2f6aa33f85b2bcca272265162a3c7c5cc499
   Kingfisher: a18f05d3b6d37d8650ee4a3e61d57a28fc6207f6
+  KingfisherWebP: 2c8999d566cce1d3fa28edb7c8a0d259938402cd
   KLExtension: f8b2a92125ad4bbfc8920ed5e7269aefcdcaa0b3
   KLTips: 5cf05efac78b9c813887460bebbf436582b20536
+  libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
   Localize-Swift: 6f4475136bdb0d7b2882ea3d4ea919d70142b232
   MarqueeLabel: 4b46d196abd253448e830cbd976f9eacc3af0849
   MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961
@@ -128,6 +148,6 @@ SPEC CHECKSUMS:
   TYCyclePagerView: 2b051dade0615c70784aa34f40c646feeddb7344
   TZImagePickerController: d084a7b97c82d387e7669dd86dc9a9057500aacf
 
-PODFILE CHECKSUM: 74c4f0b01b5d032891fb6b6ff41b26a5594adbda
+PODFILE CHECKSUM: bca527c6f78cf9ec6fb822611cf787ac22a09933
 
 COCOAPODS: 1.16.2

+ 16 - 0
TSLiveWallpaper.xcodeproj/project.pbxproj

@@ -150,6 +150,8 @@
 		A8F8BCE02E04210000EF4AA6 /* TSAIPhotoDetailsVC+Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F8BCDF2E0420FB00EF4AA6 /* TSAIPhotoDetailsVC+Video.swift */; };
 		A8F8BCE32E0423B100EF4AA6 /* TSAIPhotoDetailsVC+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F8BCE22E0423AD00EF4AA6 /* TSAIPhotoDetailsVC+View.swift */; };
 		A8F8BCE62E04F62400EF4AA6 /* TSAIListPhotoGeneratorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F8BCE52E04F62200EF4AA6 /* TSAIListPhotoGeneratorModel.swift */; };
+		A8F8BCEB2E0501DC00EF4AA6 /* TSAppUpdateAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F8BCEA2E0501DB00EF4AA6 /* TSAppUpdateAlertVC.swift */; };
+		A8F8BCED2E0513D000EF4AA6 /* animated_photos.webp in Resources */ = {isa = PBXBuildFile; fileRef = A8F8BCEC2E0513D000EF4AA6 /* animated_photos.webp */; };
 		A8FD8F332DFBCB85008CAACF /* ZillaSlab-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A8FD8F322DFBCB85008CAACF /* ZillaSlab-Regular.ttf */; };
 		A8FD8F342DFBCB85008CAACF /* ZillaSlab-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A8FD8F312DFBCB85008CAACF /* ZillaSlab-Medium.ttf */; };
 		A8FD8F352DFBCB85008CAACF /* ZillaSlab-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A8FD8F302DFBCB85008CAACF /* ZillaSlab-BoldItalic.ttf */; };
@@ -318,6 +320,8 @@
 		A8F8BCDF2E0420FB00EF4AA6 /* TSAIPhotoDetailsVC+Video.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TSAIPhotoDetailsVC+Video.swift"; sourceTree = "<group>"; };
 		A8F8BCE22E0423AD00EF4AA6 /* TSAIPhotoDetailsVC+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TSAIPhotoDetailsVC+View.swift"; sourceTree = "<group>"; };
 		A8F8BCE52E04F62200EF4AA6 /* TSAIListPhotoGeneratorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIListPhotoGeneratorModel.swift; sourceTree = "<group>"; };
+		A8F8BCEA2E0501DB00EF4AA6 /* TSAppUpdateAlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAppUpdateAlertVC.swift; sourceTree = "<group>"; };
+		A8F8BCEC2E0513D000EF4AA6 /* animated_photos.webp */ = {isa = PBXFileReference; lastKnownFileType = file; path = animated_photos.webp; sourceTree = "<group>"; };
 		A8FD8F302DFBCB85008CAACF /* ZillaSlab-BoldItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ZillaSlab-BoldItalic.ttf"; sourceTree = "<group>"; };
 		A8FD8F312DFBCB85008CAACF /* ZillaSlab-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ZillaSlab-Medium.ttf"; sourceTree = "<group>"; };
 		A8FD8F322DFBCB85008CAACF /* ZillaSlab-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ZillaSlab-Regular.ttf"; sourceTree = "<group>"; };
@@ -554,6 +558,7 @@
 		A81CA4B12D1695F300A3AAC8 /* Resource */ = {
 			isa = PBXGroup;
 			children = (
+				A8F8BCEC2E0513D000EF4AA6 /* animated_photos.webp */,
 				A86857D62DF983620089D222 /* generat_loading.gif */,
 				606372D62D545E55005C82CF /* Example */,
 				A81F5B502D19684D00740085 /* Json */,
@@ -833,6 +838,7 @@
 		A86857AD2DF9218C0089D222 /* General */ = {
 			isa = PBXGroup;
 			children = (
+				A8F8BCE92E0501CF00EF4AA6 /* TSAppUpdateAlertVC */,
 			);
 			path = General;
 			sourceTree = "<group>";
@@ -1053,6 +1059,14 @@
 			path = Model;
 			sourceTree = "<group>";
 		};
+		A8F8BCE92E0501CF00EF4AA6 /* TSAppUpdateAlertVC */ = {
+			isa = PBXGroup;
+			children = (
+				A8F8BCEA2E0501DB00EF4AA6 /* TSAppUpdateAlertVC.swift */,
+			);
+			path = TSAppUpdateAlertVC;
+			sourceTree = "<group>";
+		};
 		A8FD8F362DFBD650008CAACF /* View */ = {
 			isa = PBXGroup;
 			children = (
@@ -1144,6 +1158,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				A8F8BCED2E0513D000EF4AA6 /* animated_photos.webp in Resources */,
 				603901222DF9770A0096551E /* Flash-old-Time.png in Resources */,
 				A87CF85A2E02AF070063CB7E /* InfoPlist.strings in Resources */,
 				A8C4C0A42D24218A003C46FC /* metadata.mov in Resources */,
@@ -1266,6 +1281,7 @@
 				A8F778B22D1BA07200BF55D5 /* TSRandomWallpaperBrowseSelectView.swift in Sources */,
 				A8477C9F2D22ABDA00DF0B93 /* TSEditLiveEidtCell.swift in Sources */,
 				A81CA4652D15685F00A3AAC8 /* TSLaunchVC.swift in Sources */,
+				A8F8BCEB2E0501DC00EF4AA6 /* TSAppUpdateAlertVC.swift in Sources */,
 				A81F5B402D194EA900740085 /* UIDevice+Extension.swift in Sources */,
 				A8F778AE2D1AC12400BF55D5 /* TSRandomWallpaperBrowseView.swift in Sources */,
 				A81F5B4B2D19658300740085 /* PhotoTools.swift in Sources */,

+ 7 - 1
TSLiveWallpaper/AppDelegate.swift

@@ -66,6 +66,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
     }
 }
 
+
+import KingfisherWebP
 extension AppDelegate {
     
     static func isFirstInstallApp() -> Bool {
@@ -85,10 +87,14 @@ extension AppDelegate {
         cache.diskStorage.config.sizeLimit = 0          // 无大小限制
         KingfisherManager.shared.cache = cache
         
+        
+        KingfisherManager.shared.defaultOptions += [
+            .processor(WebPProcessor.default),
+            .cacheSerializer(WebPSerializer.default),
+        ]
         checkAppConfig()
     }
     
-    
     func checkAppConfig() {
         TSAppUpdateManager.checkAppConfig()
     }

+ 6 - 0
TSLiveWallpaper/Assets.xcassets/AppUpdate/Contents.json

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

+ 22 - 0
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_bg.imageset/Contents.json

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

BIN
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_bg.imageset/app_update_bg@2x.png


BIN
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_bg.imageset/app_update_bg@3x.png


+ 22 - 0
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_close.imageset/Contents.json

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

BIN
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_close.imageset/app_update_close@2x.png


BIN
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_close.imageset/app_update_close@3x.png


+ 22 - 0
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_icon.imageset/Contents.json

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

BIN
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_icon.imageset/app_update_icon@2x.png


BIN
TSLiveWallpaper/Assets.xcassets/AppUpdate/app_update_icon.imageset/app_update_icon@3x.png


+ 110 - 0
TSLiveWallpaper/Business/General/TSAppUpdateAlertVC/TSAppUpdateAlertVC.swift

@@ -0,0 +1,110 @@
+//
+//  TSAppUpdateAlertVC.swift
+//  TSLiveWallpaper
+//
+//  Created by 100Years on 2025/6/19.
+//
+
+class TSAppUpdateAlertVC: TSBaseVC {
+
+    lazy var alertContent: UIView = {
+        let alertContent = UIView()
+        return alertContent
+    }()
+    
+
+    lazy var closeBtn: UIButton = {
+        let closeBtn = UIButton.createButton(image:.appUpdateClose){ [weak self]  in
+            guard let self = self else { return }
+            self.dismiss(animated: true)
+        }
+        return closeBtn
+    }()
+    
+    override func createView() {
+        setNavBarViewHidden(true)
+        
+        view.backgroundColor = .black.withAlphaComponent(0.6)
+        contentView.addSubview(alertContent)
+        alertContent.snp.makeConstraints { make in
+            make.leading.equalTo(32)
+            make.trailing.equalTo(-32)
+            make.centerY.equalToSuperview()
+        }
+        
+        let bgImageView = UIImageView.createImageView(image:.appUpdateBg,contentMode: .scaleToFill)
+        alertContent.addSubview(bgImageView)
+        bgImageView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+       
+        contentView.addSubview(closeBtn)
+        closeBtn.snp.makeConstraints { make in
+            make.centerX.equalToSuperview()
+            make.top.equalTo(alertContent.snp.bottom).offset(20)
+            make.width.height.equalTo(24)
+        }
+        
+        setUpAlertContent()
+
+    }
+}
+
+
+extension TSAppUpdateAlertVC {
+    
+    func setUpAlertContent(){
+        let leading = 16.0
+        
+        let titleLab = UILabel.createLabel(text: "New Update Available!".localized,font: .font(size: 20,weight: .semibold),textColor: .white)
+        alertContent.addSubview(titleLab)
+        titleLab.snp.makeConstraints { make in
+            make.leading.equalTo(leading)
+            make.trailing.equalTo(-80)
+            make.top.equalTo(24)
+        }
+        
+        
+        let iconImageView = UIImageView.createImageView(image:.appUpdateIcon)
+        alertContent.addSubview(iconImageView)
+        iconImageView.snp.makeConstraints { make in
+            make.top.equalTo(-24)
+            make.trailing.equalTo(-12)
+            make.width.height.equalTo(96)
+        }
+        
+        let infoLab = UILabel.createLabel(text: "🎨 Fresh styles, more vibrant than ever\n✨ Trendy effects for more magic\n⚡ Even faster speed".localized,font: .font(size: 14),textColor: .white)
+        alertContent.addSubview(infoLab)
+        infoLab.snp.makeConstraints { make in
+            make.top.equalTo(titleLab.snp.bottom).offset(40)
+            make.leading.equalTo(leading)
+            make.trailing.equalTo(-leading)
+        }
+        
+        infoLab.setLineSpacing(10.0)
+        
+        let infoLab1 = UILabel.createLabel(text: "Update now to unlock the best experience".localized,font: .font(size: 14),textColor: .white)
+        alertContent.addSubview(infoLab1)
+        infoLab1.snp.makeConstraints { make in
+            make.top.equalTo(infoLab.snp.bottom).offset(30)
+            make.leading.equalTo(leading)
+            make.trailing.equalTo(-leading)
+        }
+        
+        let updateBtn = UIButton.createButton(title: "Update".localized,backgroundColor: .white,font: .font(size: 16,weight: .medium),titleColor: "#111111".uiColor){ [weak self]  in
+            guard let self = self else { return }
+            if let url = URL(string: "https://apps.apple.com/app/id\(appid)"),
+                UIApplication.shared.canOpenURL(url) {
+                UIApplication.shared.open(url)
+            }
+        }
+        alertContent.addSubview(updateBtn)
+        updateBtn.snp.makeConstraints { make in
+            make.top.equalTo(infoLab1.snp.bottom).offset(24)
+            make.leading.equalTo(38)
+            make.trailing.equalTo(-38)
+            make.height.equalTo(48)
+            make.bottom.equalTo(-20)
+        }
+    }
+}

+ 14 - 13
TSLiveWallpaper/Business/TSAIListVC/TSAIListVC/TSAIListVM.swift

@@ -56,19 +56,20 @@ class TSAIListVM {
         
         
         //视频照片
-        sectionModel.addSubItemModel(
-            createItemModel(
-                leftImageName:"aiList_Animated",
-                leftTitle: "Animated Photos".localized,
-                leftSubTitle: "Turn photos into live moments ".localized,
-                rightViewStyle: 0,
-                tapBlock: { [weak self] model, _, _ in
-                   guard let self = self else { return }
-                    enterSelectPhotos(style: .creatVideo) { image in
-                        let baseVc = TSAIUploadPhotoVC(titleString: model.leftTitle ?? "",upLoadImage: image, generatorStyle: .creatVideo)
-                        kPushVC(target: self.target, modelVC: baseVc)
-                    }
-        }))
+        let animatedItemModel = createItemModel(
+            leftImageName:"aiList_Animated",
+            leftTitle: "Animated Photos".localized,
+            leftSubTitle: "Turn photos into live moments ".localized,
+            rightViewStyle: 0,
+            tapBlock: { [weak self] model, _, _ in
+               guard let self = self else { return }
+                enterSelectPhotos(style: .creatVideo) { image in
+                    let baseVc = TSAIUploadPhotoVC(titleString: model.leftTitle ?? "",upLoadImage: image, generatorStyle: .creatVideo)
+                    kPushVC(target: self.target, modelVC: baseVc)
+                }
+            })
+        animatedItemModel.leftImagePath = "animated_photos.webp"
+        sectionModel.addSubItemModel(animatedItemModel)
 
         
         //照片高清修复

+ 29 - 0
TSLiveWallpaper/Business/TSAIListVC/TSAIListVC/View/TSAILIstCell.swift

@@ -17,6 +17,20 @@ class TSAILIstCell: TSBaseCollectionCell {
             }
             titleLab.text = itemModel.leftTitle
             infoLab.text = itemModel.leftSubTitle
+            
+            if let leftImagePath = itemModel.leftImagePath{
+                if let gifURL = Bundle.main.url(forResource: leftImagePath, withExtension: nil) {
+                    animatedImageView.kf.setImage(with: gifURL, options: [.cacheOriginalImage])
+                    kMainShort {
+                        self.animatedImageView.isHidden = false
+                        self.animatedImageView.startAnimating()
+                    }
+                }
+            }else{
+                animatedImageView.stopAnimating()
+                animatedImageView.isHidden = true
+            }
+         
         }
     }
     
@@ -48,6 +62,12 @@ class TSAILIstCell: TSBaseCollectionCell {
         return tryBtn
     }()
 
+    lazy var animatedImageView: AnimatedImageView = {
+        let animatedImageView = AnimatedImageView()
+        animatedImageView.autoPlayAnimatedImage = false
+        return animatedImageView
+    }()
+    
     
     override func creatUI() {
         bgContentView.clipsToBounds = true
@@ -79,6 +99,15 @@ class TSAILIstCell: TSBaseCollectionCell {
             make.leading.equalTo(leading)
             make.height.equalTo(26)
         }
+        
+        bgContentView.addSubview(animatedImageView)
+        animatedImageView.snp.makeConstraints { make in
+            make.trailing.equalTo(-24*kDesignScale)
+            make.centerY.equalToSuperview().offset(-5*kDesignScale)
+            make.width.equalTo(152*kDesignScale)
+            make.height.equalTo(205*kDesignScale)
+        }
+        animatedImageView.setRotation(angle: kIsRTL ? 5 : -5)
     }
     
 }

+ 1 - 1
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserCell.swift

@@ -81,5 +81,5 @@ extension TSAIPhotoDetailsBrowserCell {
     func removeVideoView(){
         videoPlayerVC?.view.removeFromSuperview()
     }
-
+    
 }

+ 2 - 2
TSLiveWallpaper/Business/TSAIListVC/TSAIUploadPhotoVC/View/TSAIUploadPhotoTextView.swift

@@ -13,13 +13,13 @@ class TSAIUploadPhotoTextView: TSBaseView {
     }()
     
     lazy var infoLabel: UILabel = {
-        let infoLabel = UILabel.createLabel(text: "(Optional)".localized,font: .font(size: 16.0),textColor: .white.withAlphaComponent(0.6))
+        let infoLabel = UILabel.createLabel(text: "\("Optional".localized)",font: .font(size: 16.0),textColor: .white.withAlphaComponent(0.6))
         return infoLabel
     }()
     
     lazy var placeholderTextView: TSPlaceholderTextView = {
         let placeholderTextView = TSPlaceholderTextView(
-            placeholder: "Describe your animation orleave it blank for Al to create the best motion foryour image.".localized,
+            placeholder: "Describe the animation effect you want".localized,
             font: .font(size: 14.0),
             textColor: .white,
             backgroundColor: "#333333".uiColor,

+ 6 - 1
TSLiveWallpaper/Business/TSTabBarController/TSTabBarController.swift

@@ -113,7 +113,12 @@ class TSTabBarController: UITabBarController {
     }
     
     @objc func refreshView() {
-        showRedDotOnLastItem(show: TSAppUpdateManager.tabbarDotShow == 1)
+        if TSAppUpdateManager.isNeedUpdate,TSAppUpdateManager.isDisplayedUpdateAlert == false{
+            kPresentModalVC(target: self, modelVC: TSAppUpdateAlertVC(),transitionStyle: .crossDissolve){
+                TSAppUpdateManager.isDisplayedUpdateAlert = true
+            }
+        }
+//        showRedDotOnLastItem(show: TSAppUpdateManager.tabbarDotShow == 1)
     }
     deinit {
         debugPrint("TSTabBarController deinit")

+ 0 - 5
TSLiveWallpaper/Common/Tool/TSCommonTool/TSCommonTool.swift

@@ -220,11 +220,6 @@ func kPercentlocalized(_ num:Int)-> String{
     return String(format: "%d%".localized, num)
 }
 
-func kPresentModalVC(target:UIViewController,modelVC:UIViewController,style:UIModalPresentationStyle = .overFullScreen){
-    let navi = TSBaseNavigationC(rootViewController: modelVC)
-    navi.modalPresentationStyle = style
-    target.present(navi, animated: true)
-}
 
 let kAppName:String = "Old Photo"
 let kUploadImageMaxBit10Size:Int = 10 * 1024 * 1024 //10M

+ 1 - 0
TSLiveWallpaper/Data/TSAppUpdateManager/TSAppUpdateManager.swift

@@ -17,6 +17,7 @@ class TSAppUpdateManager {
     
     static var tabbarDotShow:Int = 0 //0,无需显示,1 需要显示,2 显示后隐藏
     
+    static var isDisplayedUpdateAlert:Bool = false
     
     static func checkAppConfig() {
         _ = TSNetworkShared.get(urlType: .config) { data, _ in

BIN
TSLiveWallpaper/Resource/animated_photos.webp


+ 15 - 0
TSLiveWallpaper/ar.lproj/Localizable.strings

@@ -124,3 +124,18 @@
 "Your photo may contain copyright infringement, nudity, gore or violence that does not comply with the Health Policy, please replace the photo and try again." = "قد تحتوي صورتك على انتهاك لحقوق الطبع والنشر أو عُري أو دم أو عنف لا يتوافق مع سياسة الصحة، يرجى استبدال الصورة والمحاولة مرة أخرى.";
 "There's nothing here yet" = "لا يوجد شيء هنا حتى الآن";
 "Try Again" = "حاول ثانية";
+
+"Animated Photos" = "الصور المتحركة";
+"Turn photos into live moments" = "حوّل الصور إلى لحظات حية";
+"Animate Tips" = "نصائح حول الرسوم المتحركة";
+"Good quality portrair color photos" = "صور ملونة عالية الجودة";
+"B&W or Severely damaged photos" = "صور بالأبيض والأسود أو صور تالفة بشدة";
+"Description" = "الوصف";
+"Optional" = "اختياري";
+"Describe the animation effect you want" = "صف تأثير الرسوم المتحركة الذي تريده";
+"New Update Available!" = "تحديث جديد متاح!";
+"🎨 Fresh styles, more vibrant than ever" = "🎨 أنماط جديدة، أكثر حيوية من أي وقت مضى";
+"✨ Trendy effects for more magic" = "✨ تأثيرات عصرية لمزيد من السحر";
+"⚡ Even faster speed" = "⚡ سرعة أكبر";
+"Update now to unlock the best experience" = "قم بالتحديث الآن لتستمتع بأفضل تجربة";
+"Update" = "تحديث";

+ 15 - 0
TSLiveWallpaper/en.lproj/Localizable.strings

@@ -122,3 +122,18 @@
 "Your photo may contain copyright infringement, nudity, gore or violence that does not comply with the Health Policy, please replace the photo and try again." = "Your photo may contain copyright infringement, nudity, gore or violence that does not comply with the Health Policy, please replace the photo and try again.";
 "There's nothing here yet" = "There's nothing here yet";
 "Try Again" = "Try Again";
+
+"Animated Photos" = "Animated Photos";
+"Turn photos into live moments" = "Turn photos into live moments";
+"Animate Tips" = "Animate Tips";
+"Good quality portrair color photos" = "Good quality portrair color photos";
+"B&W or Severely damaged photos" = "B&W or Severely damaged photos";
+"Description" = "Description";
+"Optional" = "Optional";
+"Describe the animation effect you want" = "Describe the animation effect you want";
+"New Update Available!" = "New Update Available!";
+"🎨 Fresh styles, more vibrant than ever" = "🎨 Fresh styles, more vibrant than ever";
+"✨ Trendy effects for more magic" = "✨ Trendy effects for more magic";
+"⚡ Even faster speed" = "⚡ Even faster speed";
+"Update now to unlock the best experience" = "Update now to unlock the best experience";
+"Update" = "Update";

+ 15 - 0
TSLiveWallpaper/es.lproj/Localizable.strings

@@ -123,3 +123,18 @@
 "Your photo may contain copyright infringement, nudity, gore or violence that does not comply with the Health Policy, please replace the photo and try again." = "Su foto puede contener violaciones de derechos de autor, desnudez, sangre o violencia que no cumple con la Política de salud; reemplace la foto y vuelva a intentarlo.";
 "There's nothing here yet" = "No hay nada aquí todavía";
 "Try Again" = "Intentar otra vez";
+
+"Animated Photos" = "Fotos animadas";
+"Turn photos into live moments" = "Convierte tus fotos en momentos vivos";
+"Animate Tips" = "Consejos para animar";
+"Good quality portrair color photos" = "Fotos en color de buena calidad";
+"B&W or Severely damaged photos" = "Fotos en blanco y negro o muy dañadas";
+"Description" = "Descripción";
+"Optional" = "Opcional";
+"Describe the animation effect you want" = "Describe el efecto de animación que deseas";
+"New Update Available!" = "¡Nueva actualización disponible!";
+"🎨 Fresh styles, more vibrant than ever" = "🎨 Estilos nuevos, más vibrantes que nunca";
+"✨ Trendy effects for more magic" = "✨ Efectos modernos para más magia";
+"⚡ Even faster speed" = "⚡ Velocidad aún más rápida";
+"Update now to unlock the best experience" = "Actualiza ahora para disfrutar de la mejor experiencia";
+"Update" = "Actualizar";