فهرست منبع

左侧删除录制页面;
播放,录制按钮状态修改

harry 3 سال پیش
والد
کامیت
198ebb132b

+ 0 - 1
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenBaseManager.swift

@@ -40,7 +40,6 @@ class BFRecordScreenBaseManager : NSObject{
     var recording = false
     // MARK: -
     func resetEnv(){
-        dele?.currentAssetProgress = currentAssetProgress
         progreddL?.text = CMTimeGetSeconds(currentAssetProgress).formatDurationToHMS()
     }
     

+ 31 - 22
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -187,16 +187,8 @@ public class BFRecordScreenController: BFBaseViewController {
         didSet{
             if isEndPlay {
                 
-                switch currMediaType {
-                case .Image:
-                    recordBtn.isHidden = false
-                case .Video:
-                    recordBtn.isHidden = true
-                case .Camera:
-                    recordBtn.isHidden = false
-                }
+                updateRecordBtnStatus()
                 
-                deleteRecordBtn.isHidden = true
                 subtitleBtn.isHidden = false
                 soundSettingBtn.isHidden = false
             }else {
@@ -1226,7 +1218,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 // 判断是否无录音了
                 if itemModels[currItemModelIndex].materialDuraion == .zero {
                     playBtn.isSelected = true
-                    playBtn.isHidden = playBtn.isSelected
+                    playBtn.isHidden = true
                 }
             }
 
@@ -1296,7 +1288,7 @@ public class BFRecordScreenController: BFBaseViewController {
         rscurrentManager.startRecord()
         // 录制中不显示播放按钮
         playBtn.isSelected = true
-        playBtn.isHidden = playBtn.isSelected
+        playBtn.isHidden = true
         let cell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell
         if cell?.contentView.viewWithTag(100_100)?.superview == nil {
             cell?.contentView.addSubview(subtitleLabel)
@@ -1627,8 +1619,8 @@ public class BFRecordScreenController: BFBaseViewController {
         BFLog(1, message: "isDragingProgressSlder : \(isDragingProgressSlder)")
         BFLog(3, message: "重置播放index-\(#function) = \(currentPlayRecordIndex)")
         
+        isEndPlay = (progress == 1)
         searchStopAtRecordRange()
-        isEndPlay = (progress == 1) // 在searchStopAtRecordRange后边是保证拖动到结尾时,视频的按钮隐藏
         
         changeWithDrawBtnLayout(0)
         recorderManager?.voiceModel = nil
@@ -1725,15 +1717,14 @@ public class BFRecordScreenController: BFBaseViewController {
                     BFLog(1, message: "停在了录音区间里 \(isStopAtRecordRange), currTime:\(currentAssetProgress.seconds), 录音范围:\(startTime!.seconds) - \(endTime!.seconds)")
                 }
             } else {
-                deleteRecordBtn.isHidden = false
-                recordBtn.isHidden = true
+                updateRecordBtnStatus(true)
 
                 BFLog(1, message: "停在了录音区间里 \(isStopAtRecordRange), currTime:\(currentAssetProgress.seconds), 录音范围:\(startTime!.seconds) - \(endTime!.seconds)")
             }
 
         } else {
-            deleteRecordBtn.isHidden = true
-            recordBtn.isHidden = false
+            updateRecordBtnStatus(false)
+
             
             isStopAtRecordRange = -1
             BFLog(1, message: "停在了录音区间外 \(isStopAtRecordRange), currTime:\(currentAssetProgress.seconds)")
@@ -1756,6 +1747,20 @@ public class BFRecordScreenController: BFBaseViewController {
             playBtn.isHidden = playBtn.isSelected
         }
     }
+    
+    func updateRecordBtnStatus(_ show:Bool? = nil){
+        let su = show ?? false
+        switch currMediaType {
+        case .Image:
+            recordBtn.isHidden = isEndPlay ? false : su
+        case .Video:
+            recordBtn.isHidden = isEndPlay ? true : su
+        case .Camera:
+            recordBtn.isHidden = isEndPlay ? false : su
+        }
+        
+        deleteRecordBtn.isHidden = isEndPlay ? true : !su
+    }
 
     // MARK: - 权限申请
 
@@ -1885,7 +1890,7 @@ public class BFRecordScreenController: BFBaseViewController {
                     BFLog(3, message: "wself为空")
                     return
                 }
-                BFLog(1, message: "当前播放---\(time),\(time.seconds),\(rPlay.currentItem?.currentTime().seconds ?? 0),\(rPlay.currentItem?.duration.seconds ?? 0)")
+                BFLog(1, message: "当前播放--- \(time.seconds), \(rPlay.currentItem?.duration.seconds ?? 0)")
                 if CMTimeGetSeconds(wself.currenStartPlayTime) <= 0 {
                     BFLog(message: "重新更新开始播放进度\(#function)-\(wself.currenStartPlayTime.seconds)")
                     wself.currenStartPlayTime = time
@@ -2129,6 +2134,9 @@ public class BFRecordScreenController: BFBaseViewController {
         } else {
             assetPlayer.replaceCurrentItem(with: item)
             BFLog(message: "设置播放器item-替换:\(String(describing: item))")
+            if avplayerTimeObserver != nil{
+                avplayerTimeObserver?.invalidate()
+            }
             avplayerTimeObserver = assetPlayer.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { [weak self] time in
                 // 进度监控
                 guard let wself = self else { return }
@@ -2159,6 +2167,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 cShowHUB(superView: nil, msg: "tips_full".BFLocale)
             }
         }
+        
     }
 
     /// 音视频播放进度-视频跟图片单独处理
@@ -2283,11 +2292,11 @@ public class BFRecordScreenController: BFBaseViewController {
             if currMediaType == .Image {
                 percenWidth = progressThumV.thumbImageWidth / 2.0
             } else {
-                percenWidth = progressThumV.progessIndicateBackV.frame.width / CGFloat(itemModels[currItemModelIndex].materialDuraion.seconds)
+                percenWidth = progressThumV.progessIndicateBackV.frame.width / CGFloat(rscurrentManager.recordItem?.materialDuraion.seconds ?? 0)
             }
             // progressThumV.progressView.contentSize
             // progressThumV.progessIndicateBackV.origin
-            indirectionView = BFIndirectionProgressView(frame: CGRect(x: progressThumV.progessIndicateBackV.x, y: 44, width: progressThumV.progressView.contentSize.width, height: 6), percenWidth: percenWidth, totalDuration: itemModels[currItemModelIndex].materialDuraion.seconds)
+            indirectionView = BFIndirectionProgressView(frame: CGRect(x: progressThumV.progessIndicateBackV.x, y: 44, width: progressThumV.progressView.contentSize.width, height: 6), percenWidth: percenWidth, totalDuration: rscurrentManager.recordItem?.materialDuraion.seconds ?? 0)
             progressThumV.progressView.addSubview((indirectionView)!)
         }
         // 更新录制进度
@@ -2431,7 +2440,8 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             
             wself.collectionView.deleteItems(at: [IndexPath(row: wself.currItemModelIndex, section: 0)])
         }
-        currItemModelIndex -= 1
+        currItemModelIndex = max(0, currItemModelIndex - 1)
+        
     }
 
 
@@ -2467,7 +2477,6 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             // 更新缩略图
             // progressThumV.isHidden = false
             
-            searchStopAtRecordRange()
             // 切换要更新当前录制index,避免在录制完以后切换素材这种时候为-3会拦截
             currentPlayRecordIndex = -1
             showSubtitleIndex = -1
@@ -2517,7 +2526,7 @@ public extension BFRecordScreenController {
         if currMediaType == .Image {
             if itemModels[currItemModelIndex].materialDuraion.seconds <= 0 {
                 playBtn.isSelected = true
-                playBtn.isHidden = playBtn.isSelected
+                playBtn.isHidden = true
                 return
             }
             isNormalPlaying = true

+ 1 - 0
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenVideoManager.swift

@@ -24,6 +24,7 @@ class BFRecordScreenVideoManager : BFRecordScreenBaseManager{
         if movie != nil {
             cleanMovieTarget()
         }
+        playerItem.seek(to: .zero, toleranceBefore: CMTime(seconds: 1, preferredTimescale: 1000000), toleranceAfter: CMTime(seconds: 1, preferredTimescale: 1000000), completionHandler: nil)
         movie = GPUImageMovie(playerItem: playerItem)
         //        movie?.runBenchmark = true
         movie?.playAtActualSpeed = true

+ 3 - 0
BFRecordScreenKit/Classes/RecordScreen/View/BFStripSwithView.swift

@@ -62,6 +62,9 @@ open class BFStripSwithView: UIView {
         if count < strips{
             currentIndex -= (strips - count)
         }
+        if currentIndex < 0 {
+            currentIndex = 0
+        }
 
         strips = count