|
@@ -18,10 +18,13 @@ class INVideoExportController: BFBaseViewController {
|
|
|
var videoAsset : AVURLAsset?
|
|
|
var avplayerTimeObserver: NSKeyValueObservation?
|
|
|
let backV = UIView()
|
|
|
+ var hasExportAll = false
|
|
|
+ var hasExportOnly = false
|
|
|
var hasSaveAll = false
|
|
|
var hasSaveOnly = false
|
|
|
var saveAllUlr = URL(fileURLWithPath: "aaa")
|
|
|
var saveOnlyUlr = URL(fileURLWithPath: "aaa")
|
|
|
+ var isExporting = false
|
|
|
|
|
|
// 播放进度
|
|
|
lazy var progreddL : UILabel = {
|
|
@@ -37,7 +40,7 @@ class INVideoExportController: BFBaseViewController {
|
|
|
// 合成进度指示条
|
|
|
lazy var progressView : UIView = {
|
|
|
let v = UIView()
|
|
|
- v.backgroundColor = .red
|
|
|
+ v.backgroundColor = ThemeStyleColor
|
|
|
return v
|
|
|
}()
|
|
|
|
|
@@ -47,36 +50,38 @@ class INVideoExportController: BFBaseViewController {
|
|
|
la.textColor = .white
|
|
|
la.textAlignment = .center
|
|
|
la.text = "0%"
|
|
|
- la.font = UIFont.systemFont(ofSize: 8)
|
|
|
+ la.font = UIFont.systemFont(ofSize: 28)
|
|
|
+ la.shadowColor = .black
|
|
|
+ la.shadowOffset = CGSize(width: 1, height: 1)
|
|
|
return la
|
|
|
}()
|
|
|
|
|
|
lazy var saveAllBtn:UIButton = {
|
|
|
- let saveAllBtn = UIButton()
|
|
|
- saveAllBtn.setImage(UIImage(named: "export_saveall_n"), for: .normal)
|
|
|
- saveAllBtn.setImage(UIImage(named: "export_saveall_h"), for: .selected)
|
|
|
- saveAllBtn.addTarget(self, action: #selector(saveAllAction(btn:)), for: .touchUpInside)
|
|
|
- saveAllBtn.isSelected = true
|
|
|
- return saveAllBtn
|
|
|
+ let btn = UIButton()
|
|
|
+ btn.setImage(UIImage(named: "export_saveall_n"), for: .normal)
|
|
|
+ btn.setImage(UIImage(named: "export_saveall_h"), for: .selected)
|
|
|
+ btn.addTarget(self, action: #selector(saveAllAction(btn:)), for: .touchUpInside)
|
|
|
+ return btn
|
|
|
}()
|
|
|
|
|
|
lazy var saveOnlyBtn:UIButton = {
|
|
|
- let saveOnlyBtn = UIButton()
|
|
|
- saveOnlyBtn.setImage(UIImage(named: "export_saveonly_n"), for: .normal)
|
|
|
- saveOnlyBtn.setImage(UIImage(named: "export_saveonly_h"), for: .selected)
|
|
|
- saveOnlyBtn.addTarget(self, action: #selector(saveOnlyAction(btn:)), for: .touchUpInside)
|
|
|
- return saveOnlyBtn
|
|
|
+ let btn = UIButton()
|
|
|
+ btn.setImage(UIImage(named: "export_saveonly_n"), for: .normal)
|
|
|
+ btn.setImage(UIImage(named: "export_saveonly_h"), for: .selected)
|
|
|
+ btn.addTarget(self, action: #selector(saveOnlyAction(btn:)), for: .touchUpInside)
|
|
|
+ btn.isSelected = true
|
|
|
+ return btn
|
|
|
}()
|
|
|
|
|
|
lazy var exportBtn : UIButton = {
|
|
|
- let exportBtn = UIButton()
|
|
|
- exportBtn.setTitle(" 保存到相册", for: .normal)
|
|
|
- exportBtn.setTitleColor(.white, for: .normal)
|
|
|
- exportBtn.setImage(UIImage(named: "export_btn"), for: .normal)
|
|
|
- exportBtn.backgroundColor = ThemeStyleColor
|
|
|
- exportBtn.addCorner(roundingCorners: .allCorners, corner: 8)
|
|
|
- exportBtn.addTarget(self, action: #selector(saveNow), for: .touchUpInside)
|
|
|
- return exportBtn
|
|
|
+ let btn = UIButton()
|
|
|
+ btn.setTitle(" 保存到相册", for: .normal)
|
|
|
+ btn.setTitleColor(.white, for: .normal)
|
|
|
+ btn.setImage(UIImage(named: "export_btn"), for: .normal)
|
|
|
+ btn.backgroundColor = ThemeStyleColor
|
|
|
+ btn.addCorner(roundingCorners: .allCorners, corner: 8)
|
|
|
+ btn.addTarget(self, action: #selector(saveToPhotoNow), for: .touchUpInside)
|
|
|
+ return btn
|
|
|
}()
|
|
|
|
|
|
lazy var bottomView:UIView = {
|
|
@@ -92,7 +97,7 @@ class INVideoExportController: BFBaseViewController {
|
|
|
// 进度监控
|
|
|
if let item = avplayer?.currentItem {
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
|
- self?.progreddL.text = String(format: "%.2f / %.2f", CMTimeGetSeconds(time), CMTimeGetSeconds(item.duration))
|
|
|
+ self?.progreddL.text = String(format: "%@ / %@", CMTimeGetSeconds(time).formatDurationToHMS(), CMTimeGetSeconds(item.duration).formatDurationToHMS())
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -125,6 +130,7 @@ class INVideoExportController: BFBaseViewController {
|
|
|
guard let sself = self else {
|
|
|
return
|
|
|
}
|
|
|
+ self?.isExporting = false
|
|
|
sself.bottomView.isHidden = false
|
|
|
sself.progreddL.isHidden = false
|
|
|
sself.progressView.isHidden = true
|
|
@@ -137,12 +143,12 @@ class INVideoExportController: BFBaseViewController {
|
|
|
|
|
|
if sself.saveAllBtn.isSelected {
|
|
|
sself.saveAllUlr = fileUrl
|
|
|
- sself.hasSaveAll = true
|
|
|
+ sself.hasExportAll = true
|
|
|
}
|
|
|
|
|
|
if sself.saveOnlyBtn.isSelected {
|
|
|
sself.saveOnlyUlr = fileUrl
|
|
|
- sself.hasSaveOnly = true
|
|
|
+ sself.hasExportOnly = true
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -161,6 +167,9 @@ class INVideoExportController: BFBaseViewController {
|
|
|
}
|
|
|
|
|
|
override func backBtnClick() {
|
|
|
+ if !(hasExportAll || hasExportOnly) {
|
|
|
+
|
|
|
+ }
|
|
|
export.cancelExport()
|
|
|
super.backBtnClick()
|
|
|
}
|
|
@@ -172,7 +181,7 @@ class INVideoExportController: BFBaseViewController {
|
|
|
leftButton(image: nil, imageName: nil, tintColor: UIColor.white)
|
|
|
|
|
|
// backV.frame = CGRect(x: 0, y: navHeadImageView?.bottomY ?? 0, width: cScreenWidth, height: cScreenWidth)
|
|
|
- backV.backgroundColor = .gray
|
|
|
+ backV.backgroundColor = .clear
|
|
|
backV.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(play)))
|
|
|
|
|
|
|
|
@@ -275,7 +284,11 @@ class INVideoExportController: BFBaseViewController {
|
|
|
|
|
|
}
|
|
|
|
|
|
- @objc func saveNow(){
|
|
|
+ @objc func saveToPhotoNow(){
|
|
|
+ if (self.saveAllBtn.isSelected && self.hasSaveAll) || self.saveOnlyBtn.isSelected && self.hasSaveOnly {
|
|
|
+ cShowHUB(superView: nil, msg: "已保存过了")
|
|
|
+ return
|
|
|
+ }
|
|
|
if let url = (avplayer.currentItem?.asset as? AVURLAsset)?.url{
|
|
|
PHPhotoLibrary.shared().performChanges {
|
|
|
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
|
|
@@ -284,6 +297,11 @@ class INVideoExportController: BFBaseViewController {
|
|
|
DispatchQueue.main.async {
|
|
|
cShowHUB(superView: nil, msg: "保存成功")
|
|
|
}
|
|
|
+ if self.saveAllBtn.isSelected {
|
|
|
+ self.hasSaveAll = true
|
|
|
+ }else if self.saveOnlyBtn.isSelected {
|
|
|
+ self.hasSaveOnly = true
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -296,7 +314,7 @@ class INVideoExportController: BFBaseViewController {
|
|
|
btn.isSelected = true
|
|
|
saveOnlyBtn.isSelected = false
|
|
|
avplayer.pause()
|
|
|
- if !hasSaveAll{
|
|
|
+ if !hasExportAll{
|
|
|
exportNow()
|
|
|
}else{
|
|
|
let item = AVPlayerItem(url: saveAllUlr)
|
|
@@ -312,7 +330,7 @@ class INVideoExportController: BFBaseViewController {
|
|
|
btn.isSelected = true
|
|
|
saveAllBtn.isSelected = false
|
|
|
avplayer.pause()
|
|
|
- if !hasSaveOnly {
|
|
|
+ if !hasExportOnly {
|
|
|
exportNow()
|
|
|
}else{
|
|
|
let item = AVPlayerItem(url: saveOnlyUlr)
|
|
@@ -322,6 +340,10 @@ class INVideoExportController: BFBaseViewController {
|
|
|
}
|
|
|
|
|
|
@objc func play(){
|
|
|
+ if isExporting {
|
|
|
+ self.avplayer.pause()
|
|
|
+ return
|
|
|
+ }
|
|
|
if self.avplayer.currentItem != nil {
|
|
|
if self.avplayer.timeControlStatus == .playing {
|
|
|
self.avplayer.pause()
|