Procházet zdrojové kódy

ai 联系人图片,开发更换最新预览方式

100Years před 1 měsícem
rodič
revize
3700381bc5

+ 8 - 0
AIRingtone.xcodeproj/project.pbxproj

@@ -54,6 +54,8 @@
 		A840A7ED2D8D81DB0044B8B9 /* TSGenerateRintoneOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A840A7EC2D8D81DA0044B8B9 /* TSGenerateRintoneOperation.swift */; };
 		A840A7ED2D8D81DB0044B8B9 /* TSGenerateRintoneOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A840A7EC2D8D81DA0044B8B9 /* TSGenerateRintoneOperation.swift */; };
 		A840A7F02D8E5BA00044B8B9 /* TSRingLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A840A7EF2D8E5B8F0044B8B9 /* TSRingLoadingView.swift */; };
 		A840A7F02D8E5BA00044B8B9 /* TSRingLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A840A7EF2D8E5B8F0044B8B9 /* TSRingLoadingView.swift */; };
 		A840A7F22D8E60A40044B8B9 /* ringAnimation.gif in Resources */ = {isa = PBXBuildFile; fileRef = A840A7F12D8E60A40044B8B9 /* ringAnimation.gif */; };
 		A840A7F22D8E60A40044B8B9 /* ringAnimation.gif in Resources */ = {isa = PBXBuildFile; fileRef = A840A7F12D8E60A40044B8B9 /* ringAnimation.gif */; };
+		A840A7F42D8EA0340044B8B9 /* TSGeneralPhotoBrowseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A840A7F32D8EA02E0044B8B9 /* TSGeneralPhotoBrowseVC.swift */; };
+		A840A7F62D8EA0470044B8B9 /* TSGeneralPosterBrowseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A840A7F52D8EA0380044B8B9 /* TSGeneralPosterBrowseVC.swift */; };
 		A868A89A2D75505E00F6D884 /* TSThemeBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A868A8992D75505800F6D884 /* TSThemeBannerCell.swift */; };
 		A868A89A2D75505E00F6D884 /* TSThemeBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A868A8992D75505800F6D884 /* TSThemeBannerCell.swift */; };
 		A868A89C2D75506C00F6D884 /* TSThemeContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A868A89B2D75506500F6D884 /* TSThemeContentCell.swift */; };
 		A868A89C2D75506C00F6D884 /* TSThemeContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A868A89B2D75506500F6D884 /* TSThemeContentCell.swift */; };
 		A868A8A22D7560B900F6D884 /* TSPageNullView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A868A89D2D7560B900F6D884 /* TSPageNullView.swift */; };
 		A868A8A22D7560B900F6D884 /* TSPageNullView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A868A89D2D7560B900F6D884 /* TSPageNullView.swift */; };
@@ -189,6 +191,8 @@
 		A840A7EC2D8D81DA0044B8B9 /* TSGenerateRintoneOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSGenerateRintoneOperation.swift; sourceTree = "<group>"; };
 		A840A7EC2D8D81DA0044B8B9 /* TSGenerateRintoneOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSGenerateRintoneOperation.swift; sourceTree = "<group>"; };
 		A840A7EF2D8E5B8F0044B8B9 /* TSRingLoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSRingLoadingView.swift; sourceTree = "<group>"; };
 		A840A7EF2D8E5B8F0044B8B9 /* TSRingLoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSRingLoadingView.swift; sourceTree = "<group>"; };
 		A840A7F12D8E60A40044B8B9 /* ringAnimation.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = ringAnimation.gif; sourceTree = "<group>"; };
 		A840A7F12D8E60A40044B8B9 /* ringAnimation.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = ringAnimation.gif; sourceTree = "<group>"; };
+		A840A7F32D8EA02E0044B8B9 /* TSGeneralPhotoBrowseVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSGeneralPhotoBrowseVC.swift; sourceTree = "<group>"; };
+		A840A7F52D8EA0380044B8B9 /* TSGeneralPosterBrowseVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSGeneralPosterBrowseVC.swift; sourceTree = "<group>"; };
 		A868A8992D75505800F6D884 /* TSThemeBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSThemeBannerCell.swift; sourceTree = "<group>"; };
 		A868A8992D75505800F6D884 /* TSThemeBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSThemeBannerCell.swift; sourceTree = "<group>"; };
 		A868A89B2D75506500F6D884 /* TSThemeContentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSThemeContentCell.swift; sourceTree = "<group>"; };
 		A868A89B2D75506500F6D884 /* TSThemeContentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSThemeContentCell.swift; sourceTree = "<group>"; };
 		A868A89D2D7560B900F6D884 /* TSPageNullView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPageNullView.swift; sourceTree = "<group>"; };
 		A868A89D2D7560B900F6D884 /* TSPageNullView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPageNullView.swift; sourceTree = "<group>"; };
@@ -984,6 +988,8 @@
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
 				A8CC55812D79771F002E0CAA /* TSGeneralPicBrowseVC.swift */,
 				A8CC55812D79771F002E0CAA /* TSGeneralPicBrowseVC.swift */,
+				A840A7F52D8EA0380044B8B9 /* TSGeneralPosterBrowseVC.swift */,
+				A840A7F32D8EA02E0044B8B9 /* TSGeneralPhotoBrowseVC.swift */,
 			);
 			);
 			path = TSGeneralPicBrowseVC;
 			path = TSGeneralPicBrowseVC;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -1180,6 +1186,7 @@
 				A83F87202D794FF000D29B1B /* TSAIPhotoImageCell.swift in Sources */,
 				A83F87202D794FF000D29B1B /* TSAIPhotoImageCell.swift in Sources */,
 				A899D3932D8924A300AB9C1C /* TSDiscoverListVC.swift in Sources */,
 				A899D3932D8924A300AB9C1C /* TSDiscoverListVC.swift in Sources */,
 				A868A8DB2D76F00C00F6D884 /* TSBandRingTool.swift in Sources */,
 				A868A8DB2D76F00C00F6D884 /* TSBandRingTool.swift in Sources */,
+				A840A7F42D8EA0340044B8B9 /* TSGeneralPhotoBrowseVC.swift in Sources */,
 				A8D776FA2D8D345C007EAB35 /* TSBaseOperation.swift in Sources */,
 				A8D776FA2D8D345C007EAB35 /* TSBaseOperation.swift in Sources */,
 				A899D3602D82C8D800AB9C1C /* TSPurchaseManager.swift in Sources */,
 				A899D3602D82C8D800AB9C1C /* TSPurchaseManager.swift in Sources */,
 				A868A8F12D77081C00F6D884 /* TSContactsTool.swift in Sources */,
 				A868A8F12D77081C00F6D884 /* TSContactsTool.swift in Sources */,
@@ -1217,6 +1224,7 @@
 				A899D3872D89024400AB9C1C /* TSRingModel.swift in Sources */,
 				A899D3872D89024400AB9C1C /* TSRingModel.swift in Sources */,
 				A899D3A32D896A7B00AB9C1C /* TSRingDownNullView.swift in Sources */,
 				A899D3A32D896A7B00AB9C1C /* TSRingDownNullView.swift in Sources */,
 				A868A8B52D7598C000F6D884 /* TSTSIslandView.swift in Sources */,
 				A868A8B52D7598C000F6D884 /* TSTSIslandView.swift in Sources */,
+				A840A7F62D8EA0470044B8B9 /* TSGeneralPosterBrowseVC.swift in Sources */,
 				A899D39C2D894F9800AB9C1C /* TSRingDownVC.swift in Sources */,
 				A899D39C2D894F9800AB9C1C /* TSRingDownVC.swift in Sources */,
 				A8272E9F2D7A8F6500F1C814 /* TSGeneralRintoneVM.swift in Sources */,
 				A8272E9F2D7A8F6500F1C814 /* TSGeneralRintoneVM.swift in Sources */,
 				A868A9142D784D4D00F6D884 /* TSGeneralPicModel.swift in Sources */,
 				A868A9142D784D4D00F6D884 /* TSGeneralPicModel.swift in Sources */,

+ 22 - 0
AIRingtone/Assets.xcassets/AIPhoto/poster_call_bg.imageset/Contents.json

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

binární
AIRingtone/Assets.xcassets/AIPhoto/poster_call_bg.imageset/poster_call_bg@2x.png


binární
AIRingtone/Assets.xcassets/AIPhoto/poster_call_bg.imageset/poster_call_bg@3x.png


+ 13 - 6
AIRingtone/Business/TSAIPhotoVC/TSAIPhotoChildVC/TSAIPhotoChildVC.swift

@@ -43,12 +43,19 @@ class TSAIPhotoChildVC: TSBaseVC {
                         dataModelArray.append(model)
                         dataModelArray.append(model)
                     }
                     }
                 }
                 }
-                
-                let browseVC = TSGeneralPicBrowseVC()
-                browseVC.dataModelArray = dataModelArray
-                browseVC.currentIndex = indexPath.item
-                browseVC.style = style
-                kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
+                switch style {
+                case .poster:
+                    let browseVC = TSGeneralPosterBrowseVC()
+                    browseVC.dataModelArray = dataModelArray
+                    browseVC.currentIndex = indexPath.item
+                    kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
+                case .photo:
+                    let browseVC = TSGeneralPhotoBrowseVC()
+                    browseVC.dataModelArray = dataModelArray
+                    browseVC.currentIndex = indexPath.item
+                    kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
+                }
+
             }
             }
         }
         }
 
 

+ 211 - 0
AIRingtone/Business/TSAIPhotoVC/TSGeneralPicBrowseVC/TSGeneralPhotoBrowseVC.swift

@@ -0,0 +1,211 @@
+//
+//  TSGeneralPhotoBrowseVC.swift
+//  AIRingtone
+//
+//  Created by 100Years on 2025/3/22.
+//
+
+private let cellId = "TSGeneralPhotoBrowseCell"
+class TSGeneralPhotoBrowseVC: TSBaseVC {
+    
+    var dataModelArray = [TSActionInfoModel]()
+    var currentImage:UIImage?{
+        let cell = collectionView.cellForItem(at: IndexPath(item: currentIndex, section: 0)) as? TSGeneralPhotoBrowseCell
+        var image = cell?.netWorkImageView.image
+        image = image?.pngImage
+        return image
+    }
+    
+    var currentModel:TSActionInfoModel?{
+        if let model = dataModelArray.safeObj(At: currentIndex){
+            return model
+        }
+        return nil
+    }
+    
+    lazy var contactsTool: TSContactsTool = {
+        let contactsTool = TSContactsTool(targetVC: self)
+        return contactsTool
+    }()
+    
+    var currentIndex:Int = 0
+    
+    lazy var collectionView: UICollectionView = {
+
+        let layout = UICollectionViewFlowLayout()
+        layout.scrollDirection = .vertical
+        layout.minimumInteritemSpacing = 0
+        layout.minimumLineSpacing = 0
+        layout.itemSize = CGSize(width: k_ScreenWidth, height: k_ScreenHeight)
+        
+        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
+        collectionView.delegate = self
+        collectionView.dataSource = self
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        collectionView.backgroundColor = .clear
+        collectionView.scrollsToTop = false
+        if #available(iOS 11.0, *) {
+            collectionView.contentInsetAdjustmentBehavior = .never
+        }
+        collectionView.register(TSGeneralPhotoBrowseCell.self, forCellWithReuseIdentifier: cellId)
+        collectionView.isPagingEnabled = true
+        return collectionView
+    }()
+    
+    
+    
+    override func createView() {
+
+        setNavBarViewHidden(true)
+        
+
+        contentView.addSubview(collectionView)
+        collectionView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+
+        let setButton = kCreateNormalSubmitBtn(title: "Set Now".localized, frame: CGRectMake(0, 0, 200, 48),action: { [weak self]  in
+            guard let self = self else { return }
+            clickDone()
+        })
+        contentView.addSubview(setButton)
+        setButton.snp.makeConstraints { make in
+            make.centerX.equalToSuperview()
+            make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 10)
+            make.width.equalTo(setButton.width)
+            make.height.equalTo(setButton.height)
+        }
+        
+        let closeBtn = UIButton.createButton(image: UIImage(named: "close_gray")){[weak self]  in
+            guard let self = self else { return }
+            clickClosePage()
+        }
+        contentView.addSubview(closeBtn)
+        closeBtn.snp.makeConstraints { make in
+            make.leading.equalTo(11)
+            make.top.equalTo(4+k_Height_StatusBar)
+            make.width.height.equalTo(36)
+        }
+    
+    }
+    
+    override func dealThings() {
+        DispatchQueue.main.async {//将滚动操作放到主队列的下一个 RunLoop 中执行,确保 UICollectionView 已经完成布局和数据加载。
+            self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex, section: 0), at: .bottom, animated: false)
+        }
+    }
+}
+
+
+extension TSGeneralPhotoBrowseVC {
+    @objc func clickClosePage(){
+        self.pop()
+    }
+        
+    @objc func clickDone(){
+        getCurrentImage { [weak self] image in
+            guard let self = self else { return }
+            contactsTool.setContactsAvatar(avatarImage: image) { data, error in
+                if error == nil {
+                    kSavePhotoSuccesswShared.show(atView: self.view,showViewBtn: false)
+                }
+            }
+        }
+    }
+
+    func getCurrentImage(imageBlock:@escaping (UIImage)->Void) {
+        if let currentModel = currentModel{
+            TSCommonTool.fetchImageWithCache(from: currentModel.response.resultUrl) { image, error in
+                if let image = image{
+                    imageBlock(image)
+                }else{
+                    kShowToastDataMissing()
+                }
+            }
+        }else{
+            kShowToastDataMissing()
+        }
+    }
+}
+
+//MARK: UICollectionViewDataSource
+extension TSGeneralPhotoBrowseVC:UICollectionViewDataSource,UICollectionViewDelegate {
+    
+    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
+        resetIndexWithOffset(scrollView)
+    }
+
+    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
+        resetIndexWithOffset(scrollView)
+    }
+
+    private func resetIndexWithOffset(_ scrollView: UIScrollView) {
+        let item = Int((scrollView.contentOffset.y / scrollView.bounds.height).rounded())
+        currentIndex = item
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return dataModelArray.count
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TSGeneralPhotoBrowseCell
+        if let model = dataModelArray.safeObj(At: indexPath.item){
+            cell.previewView.setAsyncImage(urlString: model.response.resultUrl,placeholder: kPlaceholderImage,contentMode: .scaleAspectFill)
+            cell.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder: kPlaceholderImage,contentMode: .scaleAspectFill)
+            cell.islandView.showImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder: kPlaceholderImage,contentMode: .scaleAspectFill)
+        }
+        return cell
+    }
+    
+}
+
+class TSGeneralPhotoBrowseCell : TSBaseCollectionCell{
+    
+    
+    lazy var previewView:UIImageView = {
+        let callPreview = UIImageView.createImageView(imageName: "",contentMode: .scaleAspectFill)
+        let blurEffect = createBlurEffectView(style: .dark)
+        callPreview.addSubview(blurEffect)
+        blurEffect.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+        return callPreview
+    }()
+
+    lazy var islandView : TSTSIslandView = {
+        let islandView = TSTSIslandView()
+        islandView.nameLab.text = "baby"
+        return islandView
+    }()
+    
+    lazy var netWorkImageView : UIImageView = {
+        let netWorkImageView = UIImageView()
+        netWorkImageView.cornerRadius = 155
+        return netWorkImageView
+    }()
+    
+    override func creatUI() {
+     
+        bgContentView.addSubview(previewView)
+        previewView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+        
+        bgContentView.addSubview(netWorkImageView)
+        netWorkImageView.snp.makeConstraints { make in
+            make.center.equalToSuperview()
+            make.width.equalTo(310)
+            make.height.equalTo(310)
+        }
+
+        bgContentView.addSubview(islandView)
+        islandView.snp.makeConstraints { make in
+            make.top.equalTo(k_Nav_Height+10)
+            make.centerX.equalToSuperview()
+            make.width.equalTo(islandView.width)
+            make.height.equalTo(islandView.height)
+        }
+    }
+}

+ 182 - 0
AIRingtone/Business/TSAIPhotoVC/TSGeneralPicBrowseVC/TSGeneralPosterBrowseVC.swift

@@ -0,0 +1,182 @@
+//
+//  TSGeneralPosterBrowseVC.swift
+//  AIRingtone
+//
+//  Created by 100Years on 2025/3/22.
+//
+
+private let cellId = "TSGeneralPosterBrowseCell"
+class TSGeneralPosterBrowseVC: TSBaseVC {
+    
+    var dataModelArray = [TSActionInfoModel]()
+    var currentImage:UIImage?{
+        let cell = collectionView.cellForItem(at: IndexPath(item: currentIndex, section: 0)) as? TSGeneralPhotoBrowseCell
+        var image = cell?.netWorkImageView.image
+        image = image?.pngImage
+        return image
+    }
+    
+    var currentModel:TSActionInfoModel?{
+        if let model = dataModelArray.safeObj(At: currentIndex){
+            return model
+        }
+        return nil
+    }
+    
+    lazy var contactsTool: TSContactsTool = {
+        let contactsTool = TSContactsTool(targetVC: self)
+        return contactsTool
+    }()
+    
+    var currentIndex:Int = 0
+    
+    lazy var previewView:UIImageView = {
+        let callPreview = UIImageView.createImageView(imageName: "poster_call_bg",contentMode: .scaleAspectFill)
+        return callPreview
+    }()
+
+
+    lazy var collectionView: UICollectionView = {
+
+        let layout = UICollectionViewFlowLayout()
+        layout.scrollDirection = .vertical
+        layout.minimumInteritemSpacing = 0
+        layout.minimumLineSpacing = 0
+        layout.itemSize = CGSize(width: k_ScreenWidth, height: k_ScreenHeight)
+        
+        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
+        collectionView.delegate = self
+        collectionView.dataSource = self
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        collectionView.backgroundColor = .clear
+        collectionView.scrollsToTop = false
+        if #available(iOS 11.0, *) {
+            collectionView.contentInsetAdjustmentBehavior = .never
+        }
+        collectionView.register(TSGeneralPosterBrowseCell.self, forCellWithReuseIdentifier: cellId)
+        collectionView.isPagingEnabled = true
+
+        return collectionView
+    }()
+    
+    
+    
+    override func createView() {
+
+        setNavBarViewHidden(true)
+        
+        contentView.addSubview(collectionView)
+        collectionView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+        contentView.addSubview(previewView)
+        previewView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+
+        let setButton = kCreateNormalSubmitBtn(title: "Set Now".localized, frame: CGRectMake(0, 0, 200, 48),action: { [weak self]  in
+            guard let self = self else { return }
+            clickDone()
+        })
+        contentView.addSubview(setButton)
+        setButton.snp.makeConstraints { make in
+            make.centerX.equalToSuperview()
+            make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 10)
+            make.width.equalTo(setButton.width)
+            make.height.equalTo(setButton.height)
+        }
+        
+        let closeBtn = UIButton.createButton(image: UIImage(named: "close_gray")){[weak self]  in
+            guard let self = self else { return }
+            clickClosePage()
+        }
+        contentView.addSubview(closeBtn)
+        closeBtn.snp.makeConstraints { make in
+            make.leading.equalTo(11)
+            make.top.equalTo(4+k_Height_StatusBar)
+            make.width.height.equalTo(36)
+        }
+
+    }
+    
+    override func dealThings() {
+        collectionView.reloadData()
+        DispatchQueue.main.async {//将滚动操作放到主队列的下一个 RunLoop 中执行,确保 UICollectionView 已经完成布局和数据加载。
+            self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex, section: 0), at: .bottom, animated: false)
+        }
+    }
+}
+
+
+extension TSGeneralPosterBrowseVC {
+    @objc func clickClosePage(){
+        self.pop()
+    }
+        
+    @objc func clickDone(){
+        if let currentModel = currentModel{
+            TSCommonTool.fetchImageWithCache(from: currentModel.response.resultUrl) {[weak self] image, error in
+                guard let self = self else { return }
+                if let image = image{
+                    PhotoManagerShared.saveImageToAlbum(image) { success, error in
+                        if success {
+                            kSavePhotoSuccesswShared.show(atView:self.view)
+                        }else{
+                            debugPrint(error)
+                        }
+                    }
+                }else{
+                    kShowToastDataMissing()
+                }
+            }
+        }else{
+            kShowToastDataMissing()
+        }
+    }
+}
+
+//MARK: UICollectionViewDataSource
+extension TSGeneralPosterBrowseVC:UICollectionViewDataSource,UICollectionViewDelegate {
+    
+    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
+        resetIndexWithOffset(scrollView)
+    }
+
+    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
+        resetIndexWithOffset(scrollView)
+    }
+
+    private func resetIndexWithOffset(_ scrollView: UIScrollView) {
+        let item = Int((scrollView.contentOffset.y / scrollView.bounds.height).rounded())
+        currentIndex = item
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return dataModelArray.count
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TSGeneralPosterBrowseCell
+        if let model = dataModelArray.safeObj(At: indexPath.item){
+            cell.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder: kPlaceholderImage,contentMode: .scaleAspectFill)
+        }
+        return cell
+    }
+    
+}
+
+class TSGeneralPosterBrowseCell : TSBaseCollectionCell{
+
+    lazy var netWorkImageView : UIImageView = {
+        let netWorkImageView = UIImageView()
+        return netWorkImageView
+    }()
+    
+    override func creatUI() {
+        bgContentView.addSubview(netWorkImageView)
+        netWorkImageView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+    }
+}

+ 4 - 2
AIRingtone/Common/Tool/TSAudioPlayer/TSBusinessAudioPlayer.swift

@@ -185,9 +185,11 @@ class TSBusinessAudioPlayer {
     }
     }
     
     
     func changePlayerState(_ state:PlayerState){
     func changePlayerState(_ state:PlayerState){
-        debugPrint("TSAudioPlayer changePlayerState=\(state)")
+
+        if case .currentTime(let time) = state {} else {
+            debugPrint("TSAudioPlayer changePlayerState=\(state)")
+        }
         currentPlayerState = state
         currentPlayerState = state
-        
         kExecuteOnMainThread{
         kExecuteOnMainThread{
             self.stateChangedHandle?(state)
             self.stateChangedHandle?(state)
             NotificationCenter.default.post(name: .kBusinessAudioStateChange, object: nil, userInfo: ["PlayerState": state])
             NotificationCenter.default.post(name: .kBusinessAudioStateChange, object: nil, userInfo: ["PlayerState": state])