소스 검색

add image thub

wenweiwei 3 년 전
부모
커밋
b56df1174e

+ 5 - 4
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -31,10 +31,11 @@ public class BFRecordItemModel: NSObject {
     public var coverImg: UIImage? // 封面图
     public var playItem: AVPlayerItem? // 视频playerItem
     public var videoAsset: AVURLAsset? // 视频Asset
-    public var mediaType: StickerType?
-    public var index = 0
-    public var width = 0
-    public var height = 0
+    public var mediaType: StickerType? // 素材类型
+    public var progress: Double = 0 // 更新进度
+    public var index = 0 // 素材index
+    public var width = 0 // 素材宽
+    public var height = 0 // 素材高
 
     func initOriginData(phasset: PHAsset) {
         width = phasset.pixelWidth

+ 12 - 6
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -1031,10 +1031,12 @@ public class BFRecordScreenController: BFBaseViewController {
                 itemModel.initOriginData(phasset: asset)
                 itemModels.append(itemModel)
                 if index == currItemModelIndex {
-                    itemModel.fetchAVUrlAsset = { [weak self] urlAsset in
-                        DispatchQueue.main.async { [weak self] in
-                            self?.progressThumV.videoAsset = urlAsset
-                            self?.progressThumV.isHidden = false
+                    if asset.mediaType == .video {
+                        itemModel.fetchAVUrlAsset = { [weak self, weak itemModel] _ in
+                            DispatchQueue.main.async { [weak self] in
+                                self?.progressThumV.recordItem = itemModel
+                                self?.progressThumV.isHidden = false
+                            }
                         }
                     }
                 }
@@ -1232,8 +1234,12 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
         } else {
             cell = BFImageCoverViewCell.gpuImageViewCell(collectionView: collectionView, indexPath: indexPath)
         }
-        recordItem.fetchCoverImg = { [weak cell] _ in
+        recordItem.fetchCoverImg = { [weak self,weak cell] _ in
             cell?.addData()
+            if recordItem.mediaType == .IMAGE {
+                self?.progressThumV.recordItem = recordItem
+                self?.progressThumV.isHidden = false
+            }
         }
         recordItem.fetchPlayItem = { [weak self, weak cell] _ in
             if indexPath.item == self?.currItemModelIndex {
@@ -1262,7 +1268,7 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             currItemModelIndex = page
             let recordItem = itemModels[currItemModelIndex]
             // 更新缩略图
-            progressThumV.videoAsset = recordItem.videoAsset
+            progressThumV.recordItem = recordItem
             progressThumV.isHidden = false
             if recordItem.mediaType == .VIDEO {
                 let currCell: BFVideoCoverViewCell? = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFVideoCoverViewCell

+ 67 - 44
BFRecordScreenKit/Classes/RecordScreen/View/BFVideoThumbProgressView.swift

@@ -13,48 +13,12 @@ import SnapKit
 import UIKit
 
 class BFVideoThumbProgressView: UIView {
-    var videoAsset: AVURLAsset? {
+    var recordItem: BFRecordItemModel? {
         didSet {
-            if let videoAsset = videoAsset {
-                let dur = videoAsset.duration.seconds
-                if dur > 0 {
-                    let fps = Double(fetchThumbStrategy.frameNumberOfVideo(assetDuration: dur)) / dur
-
-                    splitVideoFileUrlFps(urlAsset: videoAsset, fps: fps) { [weak self] images in
-                        if images.count > 0 {
-                            self?.thumbImgs = images
-                            DispatchQueue.main.async { [weak self] in
-                                if let sself = self {
-                                    var lastiv = UIImageView()
-                                    for (i, img) in images.enumerated() {
-                                        let iv = UIImageView(image: img)
-                                        iv.contentMode = .scaleAspectFill
-                                        iv.clipsToBounds = true
-                                        sself.progressView.contentView.addSubview(iv)
-                                        iv.snp.makeConstraints { make in
-                                            make.left.equalTo(CGFloat(i) * CGFloat(sself.thumbImageWidth) + sself.width * 0.5)
-                                            make.top.bottom.equalToSuperview()
-                                            make.height.equalTo(50)
-                                            make.width.equalTo(sself.thumbImageWidth)
-                                        }
-                                        lastiv = iv
-                                    }
-                                    lastiv.snp.makeConstraints { make in
-                                        make.right.equalTo(sself.width * -0.5)
-                                    }
-
-                                    sself.progressView.contentView.addSubview(sself.progessIndicateBackV)
-                                    sself.progessIndicateBackV.snp.makeConstraints { make in
-                                        make.left.equalTo(sself.width * 0.5)
-                                        make.right.equalTo(sself.width * -0.5)
-                                        make.bottom.equalToSuperview()
-                                        make.height.equalTo(6)
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
+            if recordItem?.mediaType == .VIDEO {
+                dealWithVideoThub()
+            } else if recordItem?.mediaType == .IMAGE {
+                dealWithImageThub()
             }
         }
     }
@@ -70,7 +34,7 @@ class BFVideoThumbProgressView: UIView {
 
     var progress: Double = 0 {
         didSet {
-            if let second = videoAsset?.duration.seconds, second > 0 {
+            if let second = recordItem?.videoAsset?.duration.seconds, second > 0 {
                 let w = progressView.contentSize.width - width
                 progressView.contentOffset = CGPoint(x: progress * Double(w) / second, y: 0)
             }
@@ -82,11 +46,12 @@ class BFVideoThumbProgressView: UIView {
     lazy var progressView: BFAutolayoutScrollView = {
         let sv = BFAutolayoutScrollView()
         sv.bounces = false
-        sv.backgroundColor = .clear
+//        sv.backgroundColor = .clear
+//        sv.backgroundColor = UIColor.hexColor(hexadecimal: "#888888",alpha:0.3)
+        sv.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
         sv.decelerationRate = .fast
         sv.showsHorizontalScrollIndicator = false
         sv.delegate = self
-
         return sv
     }()
 
@@ -124,6 +89,64 @@ class BFVideoThumbProgressView: UIView {
             make.edges.equalToSuperview()
         }
     }
+
+    func dealWithVideoThub() {
+        guard let videoAsset = recordItem?.videoAsset else {
+            return
+        }
+        let dur = videoAsset.duration.seconds
+        if dur > 0 {
+            let fps = Double(fetchThumbStrategy.frameNumberOfVideo(assetDuration: dur)) / dur
+            splitVideoFileUrlFps(urlAsset: videoAsset, fps: fps) { [weak self] images in
+                self?.addThubImages(images: images)
+            }
+        }
+    }
+
+    func dealWithImageThub() {
+        guard let image = recordItem?.coverImg else {
+            return
+        }
+        addThubImages(images: Array(repeating: image, count: 3))
+    }
+
+    func addThubImages(images: [UIImage]) {
+        if images.count > 0 {
+            thumbImgs = images
+            DispatchQueue.main.async { [weak self] in
+                self?.progressView.contentView.subviews.forEach { subview in
+                    subview.removeFromSuperview()
+                }
+                if let sself = self {
+                    var lastiv = UIImageView()
+                    for (i, img) in images.enumerated() {
+                        let iv = UIImageView(image: img)
+                        iv.contentMode = .scaleAspectFill
+                        iv.clipsToBounds = true
+                        sself.progressView.contentView.addSubview(iv)
+                        iv.snp.makeConstraints { make in
+                            make.left.equalTo(CGFloat(i) * CGFloat(sself.thumbImageWidth) + sself.width * 0.5)
+                            make.top.bottom.equalToSuperview()
+                            make.height.equalTo(50)
+                            make.width.equalTo(sself.thumbImageWidth)
+                        }
+                        lastiv = iv
+                    }
+                    lastiv.snp.makeConstraints { make in
+                        make.right.equalTo(sself.width * -0.5)
+                    }
+
+                    sself.progressView.contentView.addSubview(sself.progessIndicateBackV)
+                    sself.progessIndicateBackV.snp.makeConstraints { make in
+                        make.left.equalTo(sself.width * 0.5)
+                        make.right.equalTo(sself.width * -0.5)
+                        make.bottom.equalToSuperview()
+                        make.height.equalTo(6)
+                    }
+                }
+            }
+        }
+    }
 }
 
 extension BFVideoThumbProgressView: UIScrollViewDelegate {