INIntroduceController.swift 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. //
  2. // INIntrocudeController.swift
  3. // Introduce
  4. //
  5. // Created by 胡志强 on 2021/11/29.
  6. // 制作录音,预览页面
  7. import BFCommonKit
  8. import BFRecordScreenKit
  9. import BFUIKit
  10. import Foundation
  11. import Photos
  12. import UIKit
  13. import BFAnalyzeKit
  14. class INIntroduceController: BFBaseViewController {
  15. var stripSwithView: BFStripSwithView?
  16. let exportBtn = UIButton()
  17. var assets: [PHAsset]? {
  18. didSet {
  19. if let ass = assets {
  20. recordScreenVC.assets = ass
  21. }
  22. }
  23. }
  24. let recordScreenVC = BFRecordScreenController()
  25. override func viewWillAppear(_ animated: Bool) {
  26. super.viewWillAppear(animated)
  27. showNavigation()
  28. PQNotification.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
  29. PQNotification.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
  30. }
  31. override func viewWillDisappear(_ animated: Bool) {
  32. super.viewWillDisappear(animated)
  33. PQNotification.removeObserver(self)
  34. cHiddenHUB(superView: nil)
  35. }
  36. @objc internal func keyboardWillHide(_: Notification?) {
  37. navHeadImageView?.isHidden = false
  38. }
  39. @objc internal func keyboardWillShow(_: Notification?) {
  40. navHeadImageView?.isHidden = true
  41. }
  42. override func viewDidLoad() {
  43. super.viewDidLoad()
  44. navHeadImageView?.backgroundColor = .clear
  45. navHeadImageView?.image = UIImage(named: "top_shadow")
  46. navHeadImageView?.contentMode = .scaleToFill
  47. leftButton(image: nil, imageName: nil, tintColor: .white)
  48. exportBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#389AFF")
  49. exportBtn.setTitle("导出", for: .normal)
  50. exportBtn.addCorner(corner: 4)
  51. exportBtn.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16)
  52. exportBtn.addTarget(self, action: #selector(exportAction), for: .touchUpInside)
  53. navHeadImageView?.addSubview(exportBtn)
  54. exportBtn.frame = CGRect(x: (navHeadImageView?.frame.width ?? 0) - 12 - 60, y: 0, width: 60, height: 36)
  55. exportBtn.center.y = backButton?.center.y ?? 0
  56. addChild(recordScreenVC)
  57. recordScreenVC.view.frame = view.frame
  58. view.addSubview(recordScreenVC.view)
  59. recordScreenVC.changeItemHandle = { [weak self] index in
  60. self?.stripSwithView?.changeSwitchStatus(index: index)
  61. }
  62. recordScreenVC.recordRndHandle = {model in
  63. // 录音完成时上报
  64. let assert = AVURLAsset(url: URL(fileURLWithPath:model?.wavFilePath ?? ""))
  65. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_speekButton, pageSource: .sp_speekPage,extParams: ["duration":Int((assert.duration.seconds) * 1000)],commonParams: commonParams())
  66. }
  67. recordScreenVC.subTitleBtnClickHandle = { isOn in
  68. // 点击字幕按钮上报
  69. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_captionsButton, pageSource: .sp_speekPage,extParams: isOn ? ["on":true] : ["off" : true],commonParams: commonParams())
  70. }
  71. if assets != nil, (assets?.count ?? 0) > 1 {
  72. stripSwithView = BFStripSwithView(frame: CGRect(x: (backButton?.frame.maxX ?? 0), y: 0, width: exportBtn.frame.minX - (backButton?.frame.maxX ?? 0) - 10, height: cDevice_iPhoneNavBarHei), items: assets?.count ?? 1,space: 4)
  73. stripSwithView?.center.y = backButton?.center.y ?? 0
  74. stripSwithView?.itemClickHandle = { [weak self] _, index in
  75. self?.recordScreenVC.updateContentOffset(index: index)
  76. // if (self?.assets?.count ?? 0) > index {
  77. // // 曝光上报
  78. // BFEventTrackAdaptor.baseReportUpload(businessType: .bt_pageView, objectType: self?.assets?[index].mediaType == .video ? .ot_video: .ot_image, pageSource: .sp_speekPage, commonParams: commonParams())
  79. // }
  80. }
  81. navHeadImageView?.addSubview(stripSwithView!)
  82. } else if assets != nil,(assets?.count ?? 0) > 0 {
  83. // 曝光上报
  84. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_pageView, objectType: assets?.first?.mediaType == .video ? .ot_video: .ot_image, pageSource: .sp_speekPage, commonParams: commonParams())
  85. }
  86. // 已选素材上报
  87. if assets != nil ,(assets?.count ?? 0) > 0 {
  88. var materialTypeList:[String] = []
  89. assets?.forEach({ item in
  90. materialTypeList.append(item.mediaType == .video ? "video": "image")
  91. })
  92. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_pageView, objectType: .ot_addMaterialSuccess, pageSource: .sp_speekPage,extParams: ["materialTypeList":materialTypeList],commonParams: commonParams())
  93. }
  94. }
  95. override func backBtnClick() {
  96. let alertController = UIAlertController(title: "退出将不会保存当前操作",
  97. message: "", preferredStyle: .alert)
  98. let cancelAction = UIAlertAction(title: "不退出", style: .default, handler: nil)
  99. let okAction = UIAlertAction(title: "确认退出", style: .cancel, handler: {[weak self]
  100. action in
  101. print("点击了确定")
  102. self?.recordScreenVC.backBtnClick()
  103. self?.super_back()
  104. })
  105. okAction.setValue(UIColor.red, forKey:"titleTextColor")
  106. alertController.addAction(okAction)
  107. alertController.addAction(cancelAction)
  108. self.present(alertController, animated: true, completion: nil)
  109. }
  110. private func super_back() {
  111. super.backBtnClick()
  112. }
  113. @objc func exportAction() {
  114. let count = recordScreenVC.itemModels.reduce(0, { partialResult, model in
  115. model.voiceStickers.count + partialResult
  116. })
  117. if count == 0 {
  118. cShowHUB(superView: nil, msg: "需要录制才可以导出")
  119. return
  120. }
  121. recordScreenVC.backBtnClick()
  122. let controller = INVideoExportController()
  123. controller.export.data = recordScreenVC.itemModels
  124. controller.export.originSoundVolumn = recordScreenVC.noSpeakVolume
  125. controller.export.originSoundInRecordVolumn = recordScreenVC.haveSpeakVolume
  126. controller.coverIV.image = recordScreenVC.itemModels.first?.coverImg
  127. navigationController?.pushViewController(controller, animated: true)
  128. // 点击导出按钮上报
  129. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_exportButton, pageSource: .sp_speekPage,commonParams: commonParams())
  130. }
  131. }