INPhotoVideosController.swift 11 KB

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