|
@@ -36,10 +36,59 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
public var subTitleBtnClickHandle: ((_ isOn: Bool) -> Void)?
|
|
public var subTitleBtnClickHandle: ((_ isOn: Bool) -> Void)?
|
|
// public var currentRecordId: String? // 当前录制Id
|
|
// public var currentRecordId: String? // 当前录制Id
|
|
|
|
|
|
|
|
+ // MARK: - 素材参数
|
|
|
|
+ var rsvmanager = BFRecordScreenVideoManager()
|
|
|
|
+ var rsimanager = BFRecordScreenImageManager()
|
|
|
|
+ var rscmanager = BFRecordScreenCameraManager()
|
|
|
|
+ var rscurrentManager = BFRecordScreenBaseManager()
|
|
|
|
+
|
|
// MARK: - 录制参数
|
|
// MARK: - 录制参数
|
|
-
|
|
|
|
public var assets = [PHAsset]()
|
|
public var assets = [PHAsset]()
|
|
- var currItemModelIndex = 0
|
|
|
|
|
|
+ var currItemModelIndex = -1 {
|
|
|
|
+ didSet{
|
|
|
|
+ if currItemModelIndex < 0 {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ let itemModel = itemModels[currItemModelIndex]
|
|
|
|
+ rscurrentManager.recordItem = itemModel
|
|
|
|
+
|
|
|
|
+ switch itemModel.mediaType {
|
|
|
|
+ case .Image:
|
|
|
|
+ rscurrentManager = rsimanager
|
|
|
|
+ recordBtn.setTitle("按住 录制", for: .normal)
|
|
|
|
+ progressThumV.isHidden = true
|
|
|
|
+
|
|
|
|
+ case .Video:
|
|
|
|
+ rscurrentManager = rsvmanager
|
|
|
|
+ recordBtn.setTitle("按住 录音", for: .normal)
|
|
|
|
+ progressThumV.isHidden = false
|
|
|
|
+
|
|
|
|
+ case .Camera:
|
|
|
|
+ rscurrentManager = rscmanager
|
|
|
|
+ recordBtn.setTitle("按住 录音", for: .normal)
|
|
|
|
+ progressThumV.isHidden = false
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if let cell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFCameraCoverViewCell {
|
|
|
|
+ cell.playView.setInputRotation(GPUImageRotationMode(rawValue: 2), at: 0)
|
|
|
|
+ rscurrentManager.playView = cell.playView
|
|
|
|
+ rscurrentManager.resetEnv()
|
|
|
|
+ }else if let cell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFVideoCoverViewCell {
|
|
|
|
+ cell.playView.setInputRotation(GPUImageRotationMode(rawValue: 2), at: 0)
|
|
|
|
+ rscurrentManager.playView = cell.playView
|
|
|
|
+ progressThumV.isHidden = false
|
|
|
|
+ rscurrentManager.resetEnv()
|
|
|
|
+ }else if let cell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
|
|
|
|
+ cell.playView.setInputRotation(GPUImageRotationMode(rawValue: 2), at: 0)
|
|
|
|
+ rscurrentManager.playView = cell.playView
|
|
|
|
+ progressThumV.isHidden = false
|
|
|
|
+ rscurrentManager.resetEnv()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
public var itemModels = [BFRecordItemModel]()
|
|
public var itemModels = [BFRecordItemModel]()
|
|
// add by ak 当前的显示的字幕位置
|
|
// add by ak 当前的显示的字幕位置
|
|
var showSubtitleIndex = -1
|
|
var showSubtitleIndex = -1
|
|
@@ -53,7 +102,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
subtitleBtn.isHidden = isRecording
|
|
subtitleBtn.isHidden = isRecording
|
|
soundSettingBtn.isHidden = isRecording
|
|
soundSettingBtn.isHidden = isRecording
|
|
|
|
|
|
- recordBtn.setTitle(isRecording ? "松手 暂停" : "按住 录音", for: .normal)
|
|
|
|
|
|
+ recordBtn.setTitle(isRecording ? "松手 暂停" : (rscurrentManager.recordItem?.mediaType == .Camera ? "按住 录制" : "按住 录音"), for: .normal)
|
|
recordBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#389AFF", alpha: isRecording ? 0.6 : 1)
|
|
recordBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#389AFF", alpha: isRecording ? 0.6 : 1)
|
|
// if !isRecording {
|
|
// if !isRecording {
|
|
// BFLog(1, message: "stop")
|
|
// BFLog(1, message: "stop")
|
|
@@ -159,15 +208,6 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
btn.center = view.center
|
|
btn.center = view.center
|
|
return btn
|
|
return btn
|
|
}()
|
|
}()
|
|
-
|
|
|
|
- @objc func playbtnDown(btn:UIButton){
|
|
|
|
- let vv = UIView(frame: CGRect(x: 0, y: 0, width: 0.5, height: 0.5))
|
|
|
|
- vv.backgroundColor = UIColor.init(white: 1, alpha: 0.3)
|
|
|
|
- btn.setImage(vv.graphicsGetImage(), for: .normal)
|
|
|
|
- }
|
|
|
|
- @objc func playbtnCancle(btn:UIButton){
|
|
|
|
- btn.setImage(imageInRecordScreenKit(by: "preview_play"), for: .normal)
|
|
|
|
- }
|
|
|
|
|
|
|
|
lazy var bottomeView: UIImageView = {
|
|
lazy var bottomeView: UIImageView = {
|
|
let iv = UIImageView(image: imageInRecordScreenKit(by: "bottom_shadow"))
|
|
let iv = UIImageView(image: imageInRecordScreenKit(by: "bottom_shadow"))
|
|
@@ -383,6 +423,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height), collectionViewLayout: flowLayout)
|
|
let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height), collectionViewLayout: flowLayout)
|
|
collectionView.register(BFImageCoverViewCell.self, forCellWithReuseIdentifier: String(describing: BFImageCoverViewCell.self))
|
|
collectionView.register(BFImageCoverViewCell.self, forCellWithReuseIdentifier: String(describing: BFImageCoverViewCell.self))
|
|
collectionView.register(BFVideoCoverViewCell.self, forCellWithReuseIdentifier: String(describing: BFVideoCoverViewCell.self))
|
|
collectionView.register(BFVideoCoverViewCell.self, forCellWithReuseIdentifier: String(describing: BFVideoCoverViewCell.self))
|
|
|
|
+ collectionView.register(BFCameraCoverViewCell.self, forCellWithReuseIdentifier: String(describing: BFCameraCoverViewCell.self))
|
|
collectionView.isPagingEnabled = true
|
|
collectionView.isPagingEnabled = true
|
|
collectionView.bounces = false
|
|
collectionView.bounces = false
|
|
collectionView.showsVerticalScrollIndicator = false
|
|
collectionView.showsVerticalScrollIndicator = false
|
|
@@ -458,6 +499,13 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
navigationController?.isNavigationBarHidden = true
|
|
navigationController?.isNavigationBarHidden = true
|
|
hiddenNavigation()
|
|
hiddenNavigation()
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public override func viewDidAppear(_ animated: Bool) {
|
|
|
|
+ super.viewDidAppear(animated)
|
|
|
|
+ endScrollItem(collectionView)
|
|
|
|
+ // 设置默认值
|
|
|
|
+ setSubtitleStyle(settingModel: subtitleSettingView.subtitle.setting)
|
|
|
|
+ }
|
|
|
|
|
|
override public func viewWillDisappear(_ animated: Bool) {
|
|
override public func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
super.viewWillDisappear(animated)
|
|
@@ -503,12 +551,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
DispatchQueue.global().async { [weak self] in
|
|
DispatchQueue.global().async { [weak self] in
|
|
let newSubtitle = PQEditSubTitleModel()
|
|
let newSubtitle = PQEditSubTitleModel()
|
|
newSubtitle.recordId = recordId
|
|
newSubtitle.recordId = recordId
|
|
-// if eventCode == 26 {
|
|
|
|
-// self?.currentRecordId = nil
|
|
|
|
-// }
|
|
|
|
-// if eventCode == 0 {
|
|
|
|
-// self?.currentRecordId = recordId
|
|
|
|
-// }
|
|
|
|
|
|
+
|
|
if asrResult == nil || (asrResult?.count ?? 0) <= 0 {
|
|
if asrResult == nil || (asrResult?.count ?? 0) <= 0 {
|
|
BFLog(1, message: "onNuiEventCallback 识别结果为空????不能生成字幕数据")
|
|
BFLog(1, message: "onNuiEventCallback 识别结果为空????不能生成字幕数据")
|
|
return
|
|
return
|
|
@@ -573,7 +616,6 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
}
|
|
}
|
|
|
|
|
|
// MARK: - 录音结束
|
|
// MARK: - 录音结束
|
|
-
|
|
|
|
recorderManager?.endRecordHandle = { [weak self, weak recorderManager] voideModel, _ in
|
|
recorderManager?.endRecordHandle = { [weak self, weak recorderManager] voideModel, _ in
|
|
if let sself = self, let model = voideModel, FileManager.default.fileExists(atPath: model.wavFilePath ?? "") {
|
|
if let sself = self, let model = voideModel, FileManager.default.fileExists(atPath: model.wavFilePath ?? "") {
|
|
// 加入到语音数组里
|
|
// 加入到语音数组里
|
|
@@ -615,7 +657,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
self?.recordEndHandle?(model)
|
|
self?.recordEndHandle?(model)
|
|
// 如果是图片素材同时有需要删除的录音时需要调整录音文件开始结束时间
|
|
// 如果是图片素材同时有需要删除的录音时需要调整录音文件开始结束时间
|
|
// warning: 图片录制的时候应该只能在结尾处录制
|
|
// warning: 图片录制的时候应该只能在结尾处录制
|
|
- if sself.itemModels[sself.currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if sself.itemModels[sself.currItemModelIndex].mediaType == .Image {
|
|
if deletedVoices.count > 0 {
|
|
if deletedVoices.count > 0 {
|
|
// 如果是图片先排序在计算区间
|
|
// 如果是图片先排序在计算区间
|
|
sself.itemModels[sself.currItemModelIndex].voiceStickers = sself.itemModels[sself.currItemModelIndex].voiceStickers.sorted { voice1, voice2 in
|
|
sself.itemModels[sself.currItemModelIndex].voiceStickers = sself.itemModels[sself.currItemModelIndex].voiceStickers.sorted { voice1, voice2 in
|
|
@@ -640,7 +682,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
event.deletedTittles = deletedTitlesTemp
|
|
event.deletedTittles = deletedTitlesTemp
|
|
sself.events.append(event)
|
|
sself.events.append(event)
|
|
|
|
|
|
- if sself.itemModels[sself.currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if sself.itemModels[sself.currItemModelIndex].mediaType == .Image {
|
|
var duration: CMTime = .zero
|
|
var duration: CMTime = .zero
|
|
sself.itemModels[sself.currItemModelIndex].voiceStickers.forEach { temp in
|
|
sself.itemModels[sself.currItemModelIndex].voiceStickers.forEach { temp in
|
|
BFLog(1, message: "录制结束-最终:\(temp.wavFilePath ?? "")-\(temp.startCMTime.seconds)-\(temp.endCMTime.seconds)-\(temp.endCMTime.seconds - temp.startCMTime.seconds)")
|
|
BFLog(1, message: "录制结束-最终:\(temp.wavFilePath ?? "")-\(temp.startCMTime.seconds)-\(temp.endCMTime.seconds)-\(temp.endCMTime.seconds - temp.startCMTime.seconds)")
|
|
@@ -665,7 +707,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
// 矫正进度
|
|
// 矫正进度
|
|
self?.resetCurrentProgress()
|
|
self?.resetCurrentProgress()
|
|
self?.deleteRecordBtn.isHidden = true
|
|
self?.deleteRecordBtn.isHidden = true
|
|
- self?.recordBtn.isHidden = (self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE && (self?.isEndPlay ?? false)) ? false : (self?.isEndPlay ?? false)
|
|
|
|
|
|
+ self?.recordBtn.isHidden = (self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .Image && (self?.isEndPlay ?? false)) ? false : (self?.isEndPlay ?? false)
|
|
}
|
|
}
|
|
sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
|
|
sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
|
|
BFLog(3, message: "重置播放index-\(#function) = \(sself.currentPlayRecordIndex)")
|
|
BFLog(3, message: "重置播放index-\(#function) = \(sself.currentPlayRecordIndex)")
|
|
@@ -696,15 +738,15 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
view.backgroundColor = .black
|
|
view.backgroundColor = .black
|
|
view.addSubview(collectionView)
|
|
view.addSubview(collectionView)
|
|
- // playView = GPUImageView(frame: view.bounds)
|
|
|
|
- // view.addSubview(playView!)
|
|
|
|
|
|
+
|
|
fetchVideo()
|
|
fetchVideo()
|
|
|
|
+
|
|
view.addSubview(bottomeView)
|
|
view.addSubview(bottomeView)
|
|
// view.addSubview(subtitleLabel)
|
|
// view.addSubview(subtitleLabel)
|
|
view.addSubview(playBtn)
|
|
view.addSubview(playBtn)
|
|
view.addSubview(avatarView)
|
|
view.addSubview(avatarView)
|
|
- // view.addSubview(openCameraBtn)
|
|
|
|
- // view.addSubview(drawPinBtn)
|
|
|
|
|
|
+// view.addSubview(openCameraBtn)
|
|
|
|
+// view.addSubview(drawPinBtn)
|
|
view.addSubview(subtitleBtn)
|
|
view.addSubview(subtitleBtn)
|
|
view.addSubview(soundSettingBtn)
|
|
view.addSubview(soundSettingBtn)
|
|
view.addSubview(subtitleSettingView)
|
|
view.addSubview(subtitleSettingView)
|
|
@@ -723,8 +765,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
BFLog(message: "新录制完成::::\(materialsModel?.locationPath ?? "")")
|
|
BFLog(message: "新录制完成::::\(materialsModel?.locationPath ?? "")")
|
|
}
|
|
}
|
|
|
|
|
|
- // 设置默认值
|
|
|
|
- setSubtitleStyle(settingModel: subtitleSettingView.subtitle.setting)
|
|
|
|
|
|
+
|
|
// 字幕设置回调
|
|
// 字幕设置回调
|
|
subtitleSettingView.subtitleSettingCallBack = { [weak self] subtitileModel in
|
|
subtitleSettingView.subtitleSettingCallBack = { [weak self] subtitileModel in
|
|
|
|
|
|
@@ -1035,7 +1076,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
events.append(event)
|
|
events.append(event)
|
|
|
|
|
|
// 注:删除录音后图片素材需要回撤指针进度,同时后面录音往前挪
|
|
// 注:删除录音后图片素材需要回撤指针进度,同时后面录音往前挪
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
let currDuration = model.endCMTime - model.startCMTime
|
|
let currDuration = model.endCMTime - model.startCMTime
|
|
itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].materialDuraion - currDuration
|
|
itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].materialDuraion - currDuration
|
|
currentAssetProgress = model.startCMTime
|
|
currentAssetProgress = model.startCMTime
|
|
@@ -1116,7 +1157,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
if !avatarView.isHidden {
|
|
if !avatarView.isHidden {
|
|
avatarView.beginRecord()
|
|
avatarView.beginRecord()
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
if !movieIsProcessing {
|
|
if !movieIsProcessing {
|
|
movie?.startProcessing()
|
|
movie?.startProcessing()
|
|
movieIsProcessing = true
|
|
movieIsProcessing = true
|
|
@@ -1209,7 +1250,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
BFLog(2, message: "删除\(voiceModel?.wavFilePath ?? "")对应的字幕 后 count\(subtitleCount)")
|
|
BFLog(2, message: "删除\(voiceModel?.wavFilePath ?? "")对应的字幕 后 count\(subtitleCount)")
|
|
/// 重置进度
|
|
/// 重置进度
|
|
if voiceModel?.currIndex == currItemModelIndex {
|
|
if voiceModel?.currIndex == currItemModelIndex {
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
currentAssetProgress = CMTime(seconds: recorderManager?.voiceModel?.startCMTime.seconds ?? 0, preferredTimescale: 1000)
|
|
currentAssetProgress = CMTime(seconds: recorderManager?.voiceModel?.startCMTime.seconds ?? 0, preferredTimescale: 1000)
|
|
if currentAssetProgress.seconds >= itemModels[currItemModelIndex].materialDuraion.seconds {
|
|
if currentAssetProgress.seconds >= itemModels[currItemModelIndex].materialDuraion.seconds {
|
|
currentAssetProgress = CMTime(seconds: itemModels[currItemModelIndex].materialDuraion.seconds, preferredTimescale: 1000)
|
|
currentAssetProgress = CMTime(seconds: itemModels[currItemModelIndex].materialDuraion.seconds, preferredTimescale: 1000)
|
|
@@ -1261,7 +1302,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
}
|
|
}
|
|
// jumpTime = model.startCMTime.seconds
|
|
// jumpTime = model.startCMTime.seconds
|
|
|
|
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
itemModels[currItemModelIndex].materialDuraion = model.startCMTime
|
|
itemModels[currItemModelIndex].materialDuraion = model.startCMTime
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1271,7 +1312,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
tuples?.sort { tuple1, tuple2 in
|
|
tuples?.sort { tuple1, tuple2 in
|
|
tuple1.1 < tuple2.1
|
|
tuple1.1 < tuple2.1
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
tuples?.forEach { tuple in
|
|
tuples?.forEach { tuple in
|
|
itemModels[currItemModelIndex].voiceStickers.insert(tuple.0, at: tuple.1)
|
|
itemModels[currItemModelIndex].voiceStickers.insert(tuple.0, at: tuple.1)
|
|
}
|
|
}
|
|
@@ -1305,7 +1346,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
itemModels[currItemModelIndex].titleStickers.append(titleTuple)
|
|
itemModels[currItemModelIndex].titleStickers.append(titleTuple)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].voiceStickers.last?.endCMTime ?? .zero
|
|
itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].voiceStickers.last?.endCMTime ?? .zero
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1314,7 +1355,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
let dur = itemModels[currItemModelIndex].materialDuraion.seconds
|
|
let dur = itemModels[currItemModelIndex].materialDuraion.seconds
|
|
if dur > 0 {
|
|
if dur > 0 {
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
changeProgress(isBack: true, progress: Float(jumpTime.seconds))
|
|
changeProgress(isBack: true, progress: Float(jumpTime.seconds))
|
|
} else {
|
|
} else {
|
|
changeProgress(changCMTime: jumpTime)
|
|
changeProgress(changCMTime: jumpTime)
|
|
@@ -1339,7 +1380,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
/// 重绘录音进度视图
|
|
/// 重绘录音进度视图
|
|
resetAllIndirectionView()
|
|
resetAllIndirectionView()
|
|
// 如果是图片需重置播放按钮
|
|
// 如果是图片需重置播放按钮
|
|
- if itemModel.mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModel.mediaType == .Image {
|
|
playBtn.isSelected = itemModels[currItemModelIndex].voiceStickers.count <= 0
|
|
playBtn.isSelected = itemModels[currItemModelIndex].voiceStickers.count <= 0
|
|
playBtn.isHidden = playBtn.isSelected
|
|
playBtn.isHidden = playBtn.isSelected
|
|
}
|
|
}
|
|
@@ -1350,11 +1391,20 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
// nextActionHandle?()
|
|
// nextActionHandle?()
|
|
pause()
|
|
pause()
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @objc func playbtnDown(btn:UIButton){
|
|
|
|
+ let vv = UIView(frame: CGRect(x: 0, y: 0, width: 0.5, height: 0.5))
|
|
|
|
+ vv.backgroundColor = UIColor.init(white: 1, alpha: 0.3)
|
|
|
|
+ btn.setImage(vv.graphicsGetImage(), for: .normal)
|
|
|
|
+ }
|
|
|
|
+ @objc func playbtnCancle(btn:UIButton){
|
|
|
|
+ btn.setImage(imageInRecordScreenKit(by: "preview_play"), for: .normal)
|
|
|
|
+ }
|
|
|
|
|
|
@objc func playVideo(btn: UIButton) {
|
|
@objc func playVideo(btn: UIButton) {
|
|
btn.setImage(imageInRecordScreenKit(by: "preview_play"), for: .normal)
|
|
btn.setImage(imageInRecordScreenKit(by: "preview_play"), for: .normal)
|
|
|
|
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE && itemModels[currItemModelIndex].voiceStickers.count <= 0 {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image && itemModels[currItemModelIndex].voiceStickers.count <= 0 {
|
|
BFLog(message: "图片没有录音无法播放")
|
|
BFLog(message: "图片没有录音无法播放")
|
|
btn.isSelected = true
|
|
btn.isSelected = true
|
|
return
|
|
return
|
|
@@ -1401,7 +1451,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
if CMTimeCompare(currentAssetProgress, itemModels[currItemModelIndex].materialDuraion) >= 0 {
|
|
if CMTimeCompare(currentAssetProgress, itemModels[currItemModelIndex].materialDuraion) >= 0 {
|
|
// 视频拖动到最后隐藏录制按钮
|
|
// 视频拖动到最后隐藏录制按钮
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
recordBtn.isHidden = true
|
|
recordBtn.isHidden = true
|
|
} else {
|
|
} else {
|
|
recordBtn.isHidden = false
|
|
recordBtn.isHidden = false
|
|
@@ -1614,7 +1664,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
// }
|
|
// }
|
|
} as? NSKeyValueObservation
|
|
} as? NSKeyValueObservation
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
videoMaterialRecordPlay(at: currentT, shouldPlayRecordIndex: shouldPlayRecordIndex, recordedAudio: recordedAudio)
|
|
videoMaterialRecordPlay(at: currentT, shouldPlayRecordIndex: shouldPlayRecordIndex, recordedAudio: recordedAudio)
|
|
} else {
|
|
} else {
|
|
imageMaterialRecordPlay(at: currentT, shouldPlayRecordIndex: shouldPlayRecordIndex, recordedAudio: recordedAudio)
|
|
imageMaterialRecordPlay(at: currentT, shouldPlayRecordIndex: shouldPlayRecordIndex, recordedAudio: recordedAudio)
|
|
@@ -1643,7 +1693,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
CMTimeGetSeconds(currentT) >= (recordedAudio.startCMTime.seconds - 0.1),
|
|
CMTimeGetSeconds(currentT) >= (recordedAudio.startCMTime.seconds - 0.1),
|
|
CMTimeGetSeconds(currentT) <= recordedAudio.endCMTime.seconds - 0.2 // 这个条件是避免录音结束后有小幅度回退导致播放最新录音
|
|
CMTimeGetSeconds(currentT) <= recordedAudio.endCMTime.seconds - 0.2 // 这个条件是避免录音结束后有小幅度回退导致播放最新录音
|
|
{
|
|
{
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO, recordPlayer?.currentItem?.duration.timescale == 0 {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video, recordPlayer?.currentItem?.duration.timescale == 0 {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
// 应当开始播放了
|
|
// 应当开始播放了
|
|
@@ -1706,18 +1756,18 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
}
|
|
}
|
|
|
|
|
|
isNormalPlaying = true
|
|
isNormalPlaying = true
|
|
- if isEndPlay || (itemModels[currItemModelIndex].mediaType == .IMAGE && CMTimeCompare(currentAssetProgress, itemModels[currItemModelIndex].materialDuraion) >= 0) {
|
|
|
|
|
|
+ if isEndPlay || (itemModels[currItemModelIndex].mediaType == .Image && CMTimeCompare(currentAssetProgress, itemModels[currItemModelIndex].materialDuraion) >= 0) {
|
|
isEndPlay = false
|
|
isEndPlay = false
|
|
assetPlayer?.seek(to: CMTime.zero)
|
|
assetPlayer?.seek(to: CMTime.zero)
|
|
progressThumV.progress = 0
|
|
progressThumV.progress = 0
|
|
currentPlayRecordIndex = -1
|
|
currentPlayRecordIndex = -1
|
|
BFLog(3, message: "重置播放index-\(#function) = \(currentPlayRecordIndex)")
|
|
BFLog(3, message: "重置播放index-\(#function) = \(currentPlayRecordIndex)")
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
recordBtn.isHidden = false
|
|
recordBtn.isHidden = false
|
|
}
|
|
}
|
|
currentAssetProgress = CMTime.zero
|
|
currentAssetProgress = CMTime.zero
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
if !movieIsProcessing {
|
|
if !movieIsProcessing {
|
|
movie?.startProcessing()
|
|
movie?.startProcessing()
|
|
movieIsProcessing = true
|
|
movieIsProcessing = true
|
|
@@ -1752,7 +1802,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
subtitleBtn.isHidden = false
|
|
subtitleBtn.isHidden = false
|
|
soundSettingBtn.isHidden = false
|
|
soundSettingBtn.isHidden = false
|
|
withDrawBtn.isHidden = false
|
|
withDrawBtn.isHidden = false
|
|
- recordBtn.isHidden = (itemModels[currItemModelIndex].mediaType == .IMAGE && isEndPlay) ? false : isEndPlay
|
|
|
|
|
|
+ recordBtn.isHidden = (itemModels[currItemModelIndex].mediaType == .Image && isEndPlay) ? false : isEndPlay
|
|
|
|
|
|
assetPlayer?.pause()
|
|
assetPlayer?.pause()
|
|
recordPlayer?.pause()
|
|
recordPlayer?.pause()
|
|
@@ -1762,13 +1812,12 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
hadPrepareToPlayRecord = false
|
|
hadPrepareToPlayRecord = false
|
|
|
|
|
|
// 暂停状态
|
|
// 暂停状态
|
|
- playBtn.isSelected = (itemModels[currItemModelIndex].mediaType == .IMAGE && itemModels[currItemModelIndex].voiceStickers.count <= 0)
|
|
|
|
|
|
+ playBtn.isSelected = (itemModels[currItemModelIndex].mediaType == .Image && itemModels[currItemModelIndex].voiceStickers.count <= 0)
|
|
playBtn.isHidden = playBtn.isSelected
|
|
playBtn.isHidden = playBtn.isSelected
|
|
}
|
|
}
|
|
|
|
|
|
func fetchVideo() {
|
|
func fetchVideo() {
|
|
if assets.count > 0 {
|
|
if assets.count > 0 {
|
|
- currItemModelIndex = 0
|
|
|
|
for (index, asset) in assets.enumerated() {
|
|
for (index, asset) in assets.enumerated() {
|
|
let itemModel = BFRecordItemModel()
|
|
let itemModel = BFRecordItemModel()
|
|
itemModel.index = index
|
|
itemModel.index = index
|
|
@@ -1784,7 +1833,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
self?.progressThumV.recordItem = itemModel
|
|
self?.progressThumV.recordItem = itemModel
|
|
self?.progressThumV.isHidden = false
|
|
self?.progressThumV.isHidden = false
|
|
self?.recordBtn.isEnabled = true
|
|
self?.recordBtn.isEnabled = true
|
|
- self?.reloadMaterial()
|
|
|
|
|
|
+// self?.reloadVideoMaterial()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
@@ -1792,10 +1841,18 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- collectionView.reloadData()
|
|
|
|
|
|
+ }else {
|
|
|
|
+ let itemModel = BFRecordItemModel()
|
|
|
|
+ itemModel.index = 0
|
|
|
|
+ itemModel.mediaType = .Camera
|
|
|
|
+ itemModels.append(itemModel)
|
|
|
|
+
|
|
|
|
+ recordBtn.isEnabled = true
|
|
}
|
|
}
|
|
|
|
+ collectionView.reloadData()
|
|
|
|
+
|
|
// 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
|
|
// 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
|
|
- playBtn.isSelected = (itemModels.first?.mediaType == .IMAGE && (itemModels.first?.voiceStickers.count ?? 0) <= 0)
|
|
|
|
|
|
+ playBtn.isSelected = (itemModels.first?.mediaType == .Image && (itemModels.first?.voiceStickers.count ?? 0) <= 0)
|
|
playBtn.isHidden = playBtn.isSelected
|
|
playBtn.isHidden = playBtn.isSelected
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1866,7 +1923,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
|
|
|
sself.isNormalPlaying = false
|
|
sself.isNormalPlaying = false
|
|
sself.isEndPlay = true
|
|
sself.isEndPlay = true
|
|
- sself.recordBtn.isHidden = (sself.itemModels[sself.currItemModelIndex].mediaType == .IMAGE) ? false : true
|
|
|
|
|
|
+ sself.recordBtn.isHidden = (sself.itemModels[sself.currItemModelIndex].mediaType == .Image) ? false : true
|
|
|
|
|
|
sself.subtitleBtn.isHidden = false
|
|
sself.subtitleBtn.isHidden = false
|
|
sself.soundSettingBtn.isHidden = false
|
|
sself.soundSettingBtn.isHidden = false
|
|
@@ -1887,7 +1944,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
// if time.seconds < pauseTime {
|
|
// if time.seconds < pauseTime {
|
|
// return
|
|
// return
|
|
// }
|
|
// }
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
if CMTimeGetSeconds(item?.duration ?? CMTime.zero) > 0 {
|
|
if CMTimeGetSeconds(item?.duration ?? CMTime.zero) > 0 {
|
|
currentAssetProgress = CMTime(seconds: time.seconds, preferredTimescale: 1000)
|
|
currentAssetProgress = CMTime(seconds: time.seconds, preferredTimescale: 1000)
|
|
// BFLog(1, message: "video curr:\(CMTimeGetSeconds(currentAssetProgress))")
|
|
// BFLog(1, message: "video curr:\(CMTimeGetSeconds(currentAssetProgress))")
|
|
@@ -1955,7 +2012,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
if progress.isNaN || progress.isInfinite {
|
|
if progress.isNaN || progress.isInfinite {
|
|
newProgress = 0
|
|
newProgress = 0
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .VIDEO {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Video {
|
|
let duration = itemModels[currItemModelIndex].materialDuraion
|
|
let duration = itemModels[currItemModelIndex].materialDuraion
|
|
if duration.seconds > 0 {
|
|
if duration.seconds > 0 {
|
|
if progress == -1 {
|
|
if progress == -1 {
|
|
@@ -1990,7 +2047,7 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
func drawProgressIndication(progress: Double) {
|
|
func drawProgressIndication(progress: Double) {
|
|
if indirectionView == nil {
|
|
if indirectionView == nil {
|
|
var percenWidth: CGFloat = 0
|
|
var percenWidth: CGFloat = 0
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
percenWidth = progressThumV.thumbImageWidth / 2.0
|
|
percenWidth = progressThumV.thumbImageWidth / 2.0
|
|
} else {
|
|
} else {
|
|
percenWidth = progressThumV.progessIndicateBackV.frame.width / CGFloat(itemModels[currItemModelIndex].materialDuraion.seconds)
|
|
percenWidth = progressThumV.progessIndicateBackV.frame.width / CGFloat(itemModels[currItemModelIndex].materialDuraion.seconds)
|
|
@@ -2001,24 +2058,24 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
// 更新录制进度
|
|
// 更新录制进度
|
|
// 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
|
|
// 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
|
|
// 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
|
|
// 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
|
|
- if isRecording, itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if isRecording, itemModels[currItemModelIndex].mediaType == .Image {
|
|
let startTime = recorderManager?.voiceModel?.startCMTime.seconds ?? 0
|
|
let startTime = recorderManager?.voiceModel?.startCMTime.seconds ?? 0
|
|
// 使用播放器的进度来画线,因为进度是跟着播放器来了
|
|
// 使用播放器的进度来画线,因为进度是跟着播放器来了
|
|
indirectionView?.setProgress(start: startTime, progress: progress)
|
|
indirectionView?.setProgress(start: startTime, progress: progress)
|
|
}
|
|
}
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
imageRecordProgress(isRecord: true, progress: progress)
|
|
imageRecordProgress(isRecord: true, progress: progress)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// 修正视频旋转方向,因为自己录制的竖屏视频会预览为横屏
|
|
// 修正视频旋转方向,因为自己录制的竖屏视频会预览为横屏
|
|
- func reloadMaterial() {
|
|
|
|
|
|
+ func reloadVideoMaterial() {
|
|
let recordItem = itemModels[currItemModelIndex]
|
|
let recordItem = itemModels[currItemModelIndex]
|
|
BFLog(message: "设置播放器reloadMaterial:\(recordItem)")
|
|
BFLog(message: "设置播放器reloadMaterial:\(recordItem)")
|
|
- if let vasset = recordItem.videoAsset, let cell: BFImageCoverViewCell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
|
|
|
|
|
|
+ if let vasset = recordItem.videoAsset, let playItem = recordItem.playItem, let cell: BFImageCoverViewCell = collectionView.cellForItem(at: IndexPath(item: currItemModelIndex, section: 0)) as? BFImageCoverViewCell {
|
|
BFLog(message: "设置播放器reloadMaterial-开始:\(recordItem)")
|
|
BFLog(message: "设置播放器reloadMaterial-开始:\(recordItem)")
|
|
- setVideoPlay(item: recordItem.playItem, imageView: cell.playView)
|
|
|
|
- setAudioPlay(item: recordItem.playItem)
|
|
|
|
|
|
+ setVideoPlay(item: playItem, imageView: cell.playView)
|
|
|
|
+ setAudioPlay(item: playItem)
|
|
let degress = degressFromVideoFile(asset: vasset)
|
|
let degress = degressFromVideoFile(asset: vasset)
|
|
switch degress {
|
|
switch degress {
|
|
case 90:
|
|
case 90:
|
|
@@ -2065,17 +2122,31 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
let recordItem = itemModels[indexPath.item]
|
|
let recordItem = itemModels[indexPath.item]
|
|
var cell: BFImageCoverViewCell!
|
|
var cell: BFImageCoverViewCell!
|
|
- if recordItem.mediaType == .VIDEO {
|
|
|
|
- cell = BFVideoCoverViewCell.gpuVideoViewCell(collectionView: collectionView, indexPath: indexPath)
|
|
|
|
- } else {
|
|
|
|
|
|
+
|
|
|
|
+ switch recordItem.mediaType {
|
|
|
|
+ case .Image:
|
|
cell = BFImageCoverViewCell.gpuImageViewCell(collectionView: collectionView, indexPath: indexPath)
|
|
cell = BFImageCoverViewCell.gpuImageViewCell(collectionView: collectionView, indexPath: indexPath)
|
|
|
|
+ case .Video:
|
|
|
|
+ cell = BFVideoCoverViewCell.gpuVideoViewCell(collectionView: collectionView, indexPath: indexPath)
|
|
|
|
+ case .Camera:
|
|
|
|
+ cell = BFCameraCoverViewCell.gpuCamraViewCell(collectionView: collectionView, indexPath: indexPath)
|
|
|
|
+ (cell as! BFCameraCoverViewCell).initCameraAfterData = {[weak self] in
|
|
|
|
+// if self?.currItemModelIndex == indexPath.row {
|
|
|
|
+// // 开启摄像头
|
|
|
|
+// self?.rscurrentManager.playView = cell.playView
|
|
|
|
+// self?.rscurrentManager.resetEnv()
|
|
|
|
+// }
|
|
|
|
+ }
|
|
|
|
+ default:
|
|
|
|
+ break
|
|
}
|
|
}
|
|
|
|
+
|
|
recordItem.fetchCoverImgCallBack = { [weak self, weak cell, weak recordItem] _ in
|
|
recordItem.fetchCoverImgCallBack = { [weak self, weak cell, weak recordItem] _ in
|
|
guard let sself = self, let item = recordItem else {
|
|
guard let sself = self, let item = recordItem else {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
cell?.addData()
|
|
cell?.addData()
|
|
- if item.mediaType == .IMAGE {
|
|
|
|
|
|
+ if item.mediaType == .Image {
|
|
sself.progressThumV.recordItem = item
|
|
sself.progressThumV.recordItem = item
|
|
sself.progressThumV.isHidden = false
|
|
sself.progressThumV.isHidden = false
|
|
}
|
|
}
|
|
@@ -2088,9 +2159,9 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
guard let sself = self else {
|
|
guard let sself = self else {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- if indexPath.item == sself.currItemModelIndex {
|
|
|
|
- sself.reloadMaterial()
|
|
|
|
- }
|
|
|
|
|
|
+// if indexPath.item == sself.currItemModelIndex {
|
|
|
|
+// sself.reloadVideoMaterial()
|
|
|
|
+// }
|
|
}
|
|
}
|
|
cell.btnClickHandle = { [weak self] _, _ in
|
|
cell.btnClickHandle = { [weak self] _, _ in
|
|
guard let sself = self else {
|
|
guard let sself = self else {
|
|
@@ -2126,7 +2197,7 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
let page = Int((scrollView.contentOffset.x + scrollView.frame.width / 2) / scrollView.frame.width)
|
|
let page = Int((scrollView.contentOffset.x + scrollView.frame.width / 2) / scrollView.frame.width)
|
|
if page != currItemModelIndex {
|
|
if page != currItemModelIndex {
|
|
// 切换素材时先把录制状态切为不可用,延迟可点,避免在缩略图未加载出来时即可录制
|
|
// 切换素材时先把录制状态切为不可用,延迟可点,避免在缩略图未加载出来时即可录制
|
|
- recordBtn.isEnabled = false
|
|
|
|
|
|
+ currItemModelIndex = page
|
|
// 暂停
|
|
// 暂停
|
|
pause()
|
|
pause()
|
|
// 如果在录制中,停止录制
|
|
// 如果在录制中,停止录制
|
|
@@ -2140,11 +2211,10 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
// events = itemModels[page].events
|
|
// events = itemModels[page].events
|
|
events = [WithDrawModel]()
|
|
events = [WithDrawModel]()
|
|
|
|
|
|
- currItemModelIndex = page
|
|
|
|
|
|
|
|
let recordItem = itemModels[currItemModelIndex]
|
|
let recordItem = itemModels[currItemModelIndex]
|
|
// 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
|
|
// 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
|
|
- playBtn.isSelected = (recordItem.mediaType == .IMAGE && recordItem.voiceStickers.count <= 0)
|
|
|
|
|
|
+ playBtn.isSelected = (recordItem.mediaType == .Image && recordItem.voiceStickers.count <= 0)
|
|
playBtn.isHidden = playBtn.isSelected
|
|
playBtn.isHidden = playBtn.isSelected
|
|
// 重绘录音区域
|
|
// 重绘录音区域
|
|
progressThumV.recordItem = recordItem
|
|
progressThumV.recordItem = recordItem
|
|
@@ -2176,8 +2246,8 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
searchStopAtRecordRange()
|
|
searchStopAtRecordRange()
|
|
changeWithDrawBtnLayout(0)
|
|
changeWithDrawBtnLayout(0)
|
|
pauseTime = 0
|
|
pauseTime = 0
|
|
- if recordItem.mediaType == .VIDEO {
|
|
|
|
- reloadMaterial()
|
|
|
|
|
|
+ if recordItem.mediaType == .Video {
|
|
|
|
+ reloadVideoMaterial()
|
|
assetPlayer?.seek(to: .zero, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000))
|
|
assetPlayer?.seek(to: .zero, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000))
|
|
}
|
|
}
|
|
if changeItemHandle != nil {
|
|
if changeItemHandle != nil {
|
|
@@ -2209,7 +2279,7 @@ public extension BFRecordScreenController {
|
|
/// - Parameter time: <#time description#>
|
|
/// - Parameter time: <#time description#>
|
|
func startPlayRecord(time: CMTime) {
|
|
func startPlayRecord(time: CMTime) {
|
|
// 播放对应的录音音频
|
|
// 播放对应的录音音频
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
if itemModels[currItemModelIndex].materialDuraion.seconds <= 0 {
|
|
if itemModels[currItemModelIndex].materialDuraion.seconds <= 0 {
|
|
playBtn.isSelected = true
|
|
playBtn.isSelected = true
|
|
playBtn.isHidden = playBtn.isSelected
|
|
playBtn.isHidden = playBtn.isSelected
|
|
@@ -2222,12 +2292,12 @@ public extension BFRecordScreenController {
|
|
}
|
|
}
|
|
playRecord(at: time, periodicTimeObserver: { [weak self] currentT, _ in
|
|
playRecord(at: time, periodicTimeObserver: { [weak self] currentT, _ in
|
|
// BFLog(1, message: "播放录音进度:\(currentT.seconds),\(currentItem)")
|
|
// BFLog(1, message: "播放录音进度:\(currentT.seconds),\(currentItem)")
|
|
- if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE, self?.isNormalPlaying ?? false {
|
|
|
|
|
|
+ if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .Image, self?.isNormalPlaying ?? false {
|
|
self?.imageRecordProgress(progress: CMTimeGetSeconds(currentT))
|
|
self?.imageRecordProgress(progress: CMTimeGetSeconds(currentT))
|
|
}
|
|
}
|
|
}, didPlayToEndTime: { [weak self] recordInfo, currentItem in
|
|
}, didPlayToEndTime: { [weak self] recordInfo, currentItem in
|
|
BFLog(message: "播放录音结束:\(String(describing: recordInfo?.1)),\(String(describing: currentItem))")
|
|
BFLog(message: "播放录音结束:\(String(describing: recordInfo?.1)),\(String(describing: currentItem))")
|
|
- if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE {
|
|
|
|
|
|
+ if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .Image {
|
|
if (self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers.count ?? 0) <= ((recordInfo?.0 ?? 0) + 1) || CMTimeCompare((recordInfo?.1.endCMTime ?? .zero), (self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers.last?.endCMTime ?? .zero)) >= 0 {
|
|
if (self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers.count ?? 0) <= ((recordInfo?.0 ?? 0) + 1) || CMTimeCompare((recordInfo?.1.endCMTime ?? .zero), (self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers.last?.endCMTime ?? .zero)) >= 0 {
|
|
|
|
|
|
self?.isEndPlay = true
|
|
self?.isEndPlay = true
|
|
@@ -2245,7 +2315,7 @@ public extension BFRecordScreenController {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}) { [weak self] _, _ in
|
|
}) { [weak self] _, _ in
|
|
- if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE {
|
|
|
|
|
|
+ if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .Image {
|
|
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
|
|
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
|
|
self?.startPlayRecord(time: self?.currentAssetProgress ?? CMTime.zero)
|
|
self?.startPlayRecord(time: self?.currentAssetProgress ?? CMTime.zero)
|
|
}
|
|
}
|
|
@@ -2261,7 +2331,7 @@ public extension BFRecordScreenController {
|
|
currentAssetProgress = recordStartPlayTime + CMTime(seconds: progress, preferredTimescale: 1000)
|
|
currentAssetProgress = recordStartPlayTime + CMTime(seconds: progress, preferredTimescale: 1000)
|
|
}
|
|
}
|
|
BFLog(1, message: "图片录音进度:\(progress),currentAssetProgress=\(currentAssetProgress.seconds),\(itemModels[currItemModelIndex].materialDuraion)")
|
|
BFLog(1, message: "图片录音进度:\(progress),currentAssetProgress=\(currentAssetProgress.seconds),\(itemModels[currItemModelIndex].materialDuraion)")
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
/// 重置进度
|
|
/// 重置进度
|
|
resetCurrentProgress()
|
|
resetCurrentProgress()
|
|
}
|
|
}
|
|
@@ -2284,7 +2354,7 @@ public extension BFRecordScreenController {
|
|
func resetAllIndirectionView() {
|
|
func resetAllIndirectionView() {
|
|
// 重绘录音进度视图
|
|
// 重绘录音进度视图
|
|
var percenWidth: CGFloat = 0
|
|
var percenWidth: CGFloat = 0
|
|
- if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .Image {
|
|
percenWidth = progressThumV.thumbImageWidth / 2.0
|
|
percenWidth = progressThumV.thumbImageWidth / 2.0
|
|
} else {
|
|
} else {
|
|
percenWidth = progressThumV.progessIndicateBackV.frame.width / CGFloat(itemModels[currItemModelIndex].materialDuraion.seconds)
|
|
percenWidth = progressThumV.progessIndicateBackV.frame.width / CGFloat(itemModels[currItemModelIndex].materialDuraion.seconds)
|