INIntroduceController.swift 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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.recordEndHandle = {model in
  63. // 录音完成时上报
  64. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_speekButton, pageSource: .sp_speekPage,extParams: ["duration":Int(((model?.endCMTime.seconds ?? 0) - (model?.startCMTime.seconds ?? 0)) * 1000)],commonParams: commonParams())
  65. }
  66. recordScreenVC.subTitleBtnClickHandle = { isOn in
  67. // 点击字幕按钮上报
  68. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_captionsButton, pageSource: .sp_speekPage,extParams: ["isSubtitlesClose":isOn],commonParams: commonParams())
  69. }
  70. if assets != nil, (assets?.count ?? 0) > 1 {
  71. 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)
  72. stripSwithView?.center.y = backButton?.center.y ?? 0
  73. stripSwithView?.itemClickHandle = { [weak self] _, index in
  74. self?.recordScreenVC.updateContentOffset(index: index)
  75. // if (self?.assets?.count ?? 0) > index {
  76. // // 曝光上报
  77. // BFEventTrackAdaptor.baseReportUpload(businessType: .bt_pageView, objectType: self?.assets?[index].mediaType == .video ? .ot_video: .ot_image, pageSource: .sp_speekPage, commonParams: commonParams())
  78. // }
  79. }
  80. navHeadImageView?.addSubview(stripSwithView!)
  81. } else if assets != nil,(assets?.count ?? 0) > 0 {
  82. // 曝光上报
  83. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_pageView, objectType: assets?.first?.mediaType == .video ? .ot_video: .ot_image, pageSource: .sp_speekPage, commonParams: commonParams())
  84. }
  85. // 已选素材上报
  86. if assets != nil ,(assets?.count ?? 0) > 0 {
  87. var materialTypeList:[String] = []
  88. assets?.forEach({ item in
  89. materialTypeList.append(item.mediaType == .video ? "video": "image")
  90. })
  91. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_pageView, objectType: .ot_addMaterialSuccess, pageSource: .sp_speekPage,extParams: ["materialTypeList":materialTypeList],commonParams: commonParams())
  92. }
  93. }
  94. override func backBtnClick() {
  95. let alertController = UIAlertController(title: "退出将不会保存当前操作",
  96. message: "", preferredStyle: .alert)
  97. let cancelAction = UIAlertAction(title: "不退出", style: .default, handler: nil)
  98. let okAction = UIAlertAction(title: "确认退出", style: .cancel, handler: {[weak self]
  99. action in
  100. self?.recordScreenVC.backBtnClick()
  101. // self?.super_back()
  102. self?.navigationController?.popToRootViewController(animated: true)
  103. })
  104. okAction.setValue(UIColor.red, forKey:"titleTextColor")
  105. alertController.addAction(okAction)
  106. alertController.addAction(cancelAction)
  107. self.present(alertController, animated: true, completion: nil)
  108. }
  109. private func super_back() {
  110. super.backBtnClick()
  111. }
  112. @objc func exportAction() {
  113. let count = recordScreenVC.itemModels.reduce(0, { partialResult, model in
  114. model.voiceStickers.count + partialResult
  115. })
  116. if count == 0 {
  117. cShowHUB(superView: nil, msg: "需要录制才可以导出")
  118. return
  119. }
  120. recordScreenVC.backBtnClick()
  121. let controller = INVideoExportController()
  122. controller.export.data = recordScreenVC.itemModels
  123. controller.export.originSoundVolumn = recordScreenVC.noSpeakVolume
  124. controller.export.originSoundInRecordVolumn = recordScreenVC.haveSpeakVolume
  125. controller.coverIV.image = recordScreenVC.itemModels.first?.coverImg
  126. navigationController?.pushViewController(controller, animated: true)
  127. // 点击导出按钮上报
  128. BFEventTrackAdaptor.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_exportButton, pageSource: .sp_speekPage,commonParams: commonParams())
  129. }
  130. }