INPhotoVideosController.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. //
  2. // INPhotoVideosController.swift
  3. // Introduce
  4. //
  5. // Created by 胡志强 on 2021/11/29.
  6. //
  7. import BFCommonKit
  8. import BFMaterialKit
  9. import BFRecordScreenKit
  10. import BFUIKit
  11. import Foundation
  12. import Photos
  13. import UIKit
  14. class INPhotoVideosController: BFBaseViewController {
  15. var chosedAsset: [PHAsset]?
  16. // 按钮高
  17. let choseBtnH: CGFloat = cDefaultMargin * 3
  18. // 按钮宽
  19. let choseBtnW: CGFloat = cDefaultMargin * 5
  20. // 间隔
  21. let margin: CGFloat = 12
  22. lazy var albumController: BFPhotoAlbumController = {
  23. let albumController = BFPhotoAlbumController()
  24. albumController.mediaType = .video
  25. albumController.isTopShow = true
  26. albumController.categoryH = cDefaultMargin * 40
  27. addChild(albumController)
  28. view.insertSubview(albumController.view, belowSubview: navHeadImageView!)
  29. albumController.updateViewFrame(frame: CGRect(x: 0, y: navHeadImageView?.frame.maxY ?? cDevice_iPhoneNavBarAndStatusBarHei, width: view.frame.width, height: view.frame.height - (navHeadImageView?.frame.maxY ?? cDevice_iPhoneNavBarAndStatusBarHei)))
  30. albumController.selectedHandle = { [weak self] seletedData in
  31. if seletedData != nil {
  32. self?.albumSelectedHandle(seletedData: seletedData)
  33. } else {
  34. self?.changeCollecBtn.isSelected = false
  35. }
  36. }
  37. return albumController
  38. }()
  39. lazy var changeCollecBtn: UIButton = {
  40. let changeCollecBtn = UIButton(frame: CGRect(x: cDefaultMargin * 5, y: cDevice_iPhoneStatusBarHei, width: cScreenWidth - cDefaultMargin * 10, height: cDefaultMargin * 4))
  41. changeCollecBtn.titleLabel?.lineBreakMode = .byTruncatingTail
  42. changeCollecBtn.tintColor = BFConfig.shared.styleTitleColor
  43. changeCollecBtn.setTitle("我的相册", for: .normal)
  44. changeCollecBtn.setImage(UIImage.moduleImage(named: "icon_selected_down", moduleName: "BFMaterialKit", isAssets: false)?.withRenderingMode(.alwaysTemplate), for: .normal)
  45. changeCollecBtn.setImage(UIImage.moduleImage(named: "icon_selected_up", moduleName: "BFMaterialKit", isAssets: false)?.withRenderingMode(.alwaysTemplate), for: .selected)
  46. changeCollecBtn.setTitleColor(BFConfig.shared.styleTitleColor, for: .normal)
  47. changeCollecBtn.titleLabel?.font = UIFont.systemFont(ofSize: 18, weight: .medium)
  48. changeCollecBtn.tag = 1
  49. changeCollecBtn.imagePosition(at: PQButtonImageEdgeInsetsStyle.right, space: cDefaultMargin / 2)
  50. changeCollecBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  51. return changeCollecBtn
  52. }()
  53. lazy var choseLocalAllBtn: UIButton = {
  54. let choseLocalAllBtn = UIButton(frame: CGRect(x: (view.frame.width - choseBtnW * 3) / 4, y: cDevice_iPhoneNavBarAndStatusBarHei + margin, width: choseBtnW, height: choseBtnH))
  55. choseLocalAllBtn.setTitleColor(UIColor.hexColor(hexadecimal: "#999999"), for: .normal)
  56. choseLocalAllBtn.setTitleColor(BFConfig.shared.styleTitleColor, for: .selected)
  57. choseLocalAllBtn.setTitle("全部", for: .normal)
  58. choseLocalAllBtn.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium)
  59. choseLocalAllBtn.addCorner(corner: 6)
  60. choseLocalAllBtn.tag = 10
  61. choseLocalAllBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  62. return choseLocalAllBtn
  63. }()
  64. lazy var choseLocalVideoBtn: UIButton = {
  65. let choseLocalVideoBtn = UIButton(frame: CGRect(x: choseLocalAllBtn.frame.maxX + (view.frame.width - choseBtnW * 3) / 4, y: choseLocalAllBtn.frame.minY, width: choseBtnW, height: choseBtnH))
  66. choseLocalVideoBtn.setTitleColor(UIColor.hexColor(hexadecimal: "#999999"), for: .normal)
  67. choseLocalVideoBtn.setTitleColor(BFConfig.shared.styleTitleColor, for: .selected)
  68. choseLocalVideoBtn.setTitle("视频", for: .normal)
  69. choseLocalVideoBtn.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium)
  70. choseLocalVideoBtn.addCorner(corner: 6)
  71. choseLocalVideoBtn.tag = 11
  72. choseLocalVideoBtn.isSelected = true
  73. choseLocalVideoBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  74. return choseLocalVideoBtn
  75. }()
  76. lazy var choseLocalImageBtn: UIButton = {
  77. let choseLocalImageBtn = UIButton(frame: CGRect(x: choseLocalVideoBtn.frame.maxX + (view.frame.width - choseBtnW * 3) / 4, y: choseLocalAllBtn.frame.minY, width: choseBtnW, height: choseBtnH))
  78. choseLocalImageBtn.setTitleColor(UIColor.hexColor(hexadecimal: "#999999"), for: .normal)
  79. choseLocalImageBtn.setTitleColor(BFConfig.shared.styleTitleColor, for: .selected)
  80. choseLocalImageBtn.setTitle("照片", for: .normal)
  81. choseLocalImageBtn.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium)
  82. choseLocalImageBtn.addCorner(corner: 6)
  83. choseLocalImageBtn.tag = 12
  84. choseLocalImageBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  85. return choseLocalImageBtn
  86. }()
  87. lazy var choseLineView: UIView = {
  88. let choseLineView = UIView(frame: CGRect(x: 0, y: 0, width: 25, height: 3))
  89. choseLineView.frame.origin.y = (navHeadImageView?.frame.maxY ?? 0) - 6
  90. choseLineView.center.x = choseLocalVideoBtn.center.x
  91. choseLineView.backgroundColor = UIColor.hexColor(hexadecimal: BFConfig.shared.styleColor.rawValue)
  92. return choseLineView
  93. }()
  94. lazy var photoMaterialVc: BFPhotosMaterialController = {
  95. let vc = BFPhotosMaterialController()
  96. vc.maxChoseNum = 20
  97. vc.view.backgroundColor = .black
  98. vc.updateFrame(newFrame: CGRect(x: 0, y: navHeadImageView?.bottomY ?? 0, width: cScreenWidth, height: cScreenHeigth - cDevice_iPhoneTabBarHei - (navHeadImageView?.bottomY ?? 0)))
  99. vc.selectedMaterialHandle = { [weak self] _, selectedPhotoData, _, _ in
  100. self?.chosedAsset = selectedPhotoData
  101. }
  102. return vc
  103. }()
  104. // MARK: - 生命周期
  105. override func viewWillAppear(_ animated: Bool) {
  106. super.viewWillAppear(animated)
  107. showNavigation()
  108. photoMaterialVc.hiddenNavigation()
  109. // 清理cache文件
  110. clearCacheFile(at: exportVideosDirectory)
  111. clearCacheFile(at: exportAudiosDirectory)
  112. }
  113. override func viewDidLoad() {
  114. super.viewDidLoad()
  115. leftButton(image: nil, imageName: nil, tintColor: .white)
  116. navHeadImageView?.backgroundColor = .black
  117. navHeadImageView?.frame.size.height = cDevice_iPhoneNavBarAndStatusBarHei + margin * 2 + choseBtnH
  118. navHeadImageView?.addSubview(changeCollecBtn)
  119. navHeadImageView?.addSubview(choseLocalAllBtn)
  120. navHeadImageView?.addSubview(choseLocalVideoBtn)
  121. navHeadImageView?.addSubview(choseLocalImageBtn)
  122. addChild(photoMaterialVc)
  123. view.addSubview(photoMaterialVc.view)
  124. let bottomV = UIView(frame: CGRect(x: 0, y: cScreenHeigth - cDevice_iPhoneTabBarHei, width: cScreenWidth, height: cDevice_iPhoneTabBarHei))
  125. bottomV.backgroundColor = .black
  126. view.addSubview(bottomV)
  127. let nextBtn = UIButton(type: .custom)
  128. nextBtn.frame = CGRect(x: cScreenWidth - 80, y: 10, width: 70, height: 29)
  129. nextBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#28BE67")
  130. nextBtn.setTitle("下一步", for: .normal)
  131. nextBtn.titleLabel?.font = UIFont.systemFont(ofSize: 12)
  132. nextBtn.layer.cornerRadius = 4
  133. nextBtn.addTarget(self, action: #selector(rightBtnClick(sender:)), for: .touchUpInside)
  134. bottomV.addSubview(nextBtn)
  135. }
  136. // MARK: - 按钮点击事件
  137. /// - Parameter sender: <#sender description#>
  138. /// - Returns: <#description#>
  139. @objc func btnClick(sender: UIButton?) {
  140. switch sender?.tag {
  141. case 1: // 选择图库
  142. sender?.isSelected = !(sender?.isSelected ?? false)
  143. if sender?.isSelected ?? false {
  144. albumController.showCategoryView()
  145. } else {
  146. albumController.dismissCategoryView()
  147. }
  148. case 10, 11, 12: // 筛选全部图库
  149. choseLocalAllBtn.isSelected = sender?.tag == 10
  150. choseLocalVideoBtn.isSelected = sender?.tag == 11
  151. choseLocalImageBtn.isSelected = sender?.tag == 12
  152. if sender?.tag == 11 {
  153. photoMaterialVc.msgType = .video
  154. } else if sender?.tag == 12 {
  155. photoMaterialVc.msgType = .image
  156. } else {
  157. photoMaterialVc.msgType = .all
  158. }
  159. UIView.animate(withDuration: 0.3, delay: 0, options: .allowUserInteraction) { [weak self] in
  160. self?.choseLineView.center.x = sender?.center.x ?? 0
  161. } completion: { _ in
  162. }
  163. default:
  164. break
  165. }
  166. }
  167. /// 图库选择的回调
  168. /// - Parameter seletedData: <#seletedData description#>
  169. /// - Returns: <#description#>
  170. func albumSelectedHandle(seletedData: PHAsset?) {
  171. changeCollecBtn.isSelected = false
  172. if seletedData != nil {
  173. changeCollecBtn.setTitle(seletedData?.title ?? "全部", for: .normal)
  174. changeCollecBtn.imagePosition(at: PQButtonImageEdgeInsetsStyle.right, space: cDefaultMargin / 2)
  175. photoMaterialVc.assetCollection = seletedData?.assetCollection
  176. }
  177. }
  178. override func rightBtnClick(sender _: UIButton) {
  179. if let assets = chosedAsset {
  180. let vc = INIntroduceController()
  181. vc.assets = assets
  182. navigationController?.pushViewController(vc, animated: true)
  183. } else {
  184. cShowHUB(superView: nil, msg: "需要选择一个视频")
  185. }
  186. }
  187. func clearCacheFile(at folderPath: String) {
  188. if let files = try? FileManager.default.contentsOfDirectory(atPath: folderPath) {
  189. for file in files {
  190. do {
  191. try FileManager.default.removeItem(at: URL(fileURLWithPath: folderPath).appendingPathComponent(file))
  192. } catch {
  193. BFLog(1, message: "\(error), \(file)")
  194. }
  195. }
  196. }
  197. }
  198. // MARK: -
  199. override open var preferredStatusBarStyle: UIStatusBarStyle {
  200. return .lightContent
  201. }
  202. }