PQEditPublicCoverImageView.swift 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. //
  2. // PQEditPublicCoverImageView.swift
  3. // BFFramework
  4. //
  5. // Created by ak on 2021/7/22.
  6. // 功能:选择封面
  7. import Foundation
  8. import BFCommonKit
  9. class PQEditPublicCoverImageView: UIView {
  10. //确认选择回调
  11. public var selectImageCallBack: ((_ image: UIImage?) -> Void)?
  12. //从相册选择 BTN 点击回调 用于弹出照片选择界面
  13. public var selectPhotoBtnCallBack:(() -> Void)?
  14. //选择的封面图片
  15. var selectImage:UIImage?
  16. //最后选择的封面 btn 用于还原角标
  17. var lastSelectcoverImageBtn:UIButton?
  18. lazy var backView: UIView = {
  19. let backView = UIView()
  20. backView.addCorner(corner: 1.5)
  21. backView.backgroundColor = PQBFConfig.shared.otherTintColor
  22. return backView
  23. }()
  24. lazy var closeView: UIView = {
  25. let closeView = UIView()
  26. closeView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)
  27. return closeView
  28. }()
  29. // 确定按钮
  30. lazy var compliteBtn: UIButton = {
  31. let compliteBtn = UIButton(type: .custom)
  32. compliteBtn.backgroundColor = UIColor.hexColor(hexadecimal: PQBFConfig.shared.styleColor.rawValue)
  33. compliteBtn.setTitle("确定", for: .normal)
  34. compliteBtn.titleLabel?.font = UIFont.systemFont(ofSize: 18, weight: .medium)
  35. compliteBtn.setTitleColor(UIColor.hexColor(hexadecimal: "#FFFFFF"), for: .normal)
  36. compliteBtn.adjustsImageWhenHighlighted = false
  37. compliteBtn.tag = 2
  38. compliteBtn.addCorner(corner: 11)
  39. compliteBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  40. return compliteBtn
  41. }()
  42. // 从相册选择
  43. lazy var selectPhotoBtn: UIButton = {
  44. let selectPhotoBtn = UIButton(type: .custom)
  45. selectPhotoBtn.setImage(UIImage.moduleImage(named: PQBFConfig.shared.editCoverimageSelectImage, moduleName: "BFFramework",isAssets: false), for: .normal)
  46. selectPhotoBtn.adjustsImageWhenHighlighted = false
  47. selectPhotoBtn.addCorner(corner: 11)
  48. selectPhotoBtn.tag = 1
  49. selectPhotoBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  50. return selectPhotoBtn
  51. }()
  52. override init(frame: CGRect) {
  53. super.init(frame: frame)
  54. closeView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(viewHidden)))
  55. backgroundColor = .clear
  56. addSubview(closeView)
  57. addSubview(backView)
  58. addSubview(compliteBtn)
  59. addSubview(selectPhotoBtn)
  60. // 9个封面
  61. for i in 0 ... 8 {
  62. let coverImageBtn = UIButton(type: .custom)
  63. var frame: CGRect = .zero
  64. frame.size.width = 108.0 * cAdaptatWidth
  65. frame.size.height = 108.0 * cAdaptatWidth
  66. // 按钮横向间隔10,左边距16
  67. let spedScorp = 10.0 * cAdaptatWidth
  68. let spedHeght = 16.0 * cAdaptatWidth
  69. frame.origin.x = CGFloat((i % 3) * (Int(frame.size.width) + Int(spedScorp)) + Int(spedHeght))
  70. // 按钮竖向间隔10,左边距16
  71. frame.origin.y = floor(CGFloat(i / 3)) * (frame.size.height + spedScorp) + spedHeght
  72. coverImageBtn.frame = frame
  73. coverImageBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#F6F6F6")
  74. coverImageBtn.tag = (i + 1) * 100
  75. coverImageBtn.adjustsImageWhenHighlighted = false
  76. coverImageBtn.imageView?.contentMode = .scaleAspectFit
  77. coverImageBtn.addTarget(self, action: #selector(coverImageBtnClick(sender:)), for: .touchUpInside)
  78. //选中后的角标
  79. let iconView = UIImageView.init(frame: CGRect(x: frame.size.width - 22.0 - 6, y: 6, width: 22, height: 22))
  80. iconView.image = UIImage.moduleImage(named: PQBFConfig.shared.editCoverimageSelectedImage, moduleName: "BFFramework",isAssets: false)
  81. iconView.tag = 1000
  82. if(i == 0){
  83. iconView.isHidden = false
  84. lastSelectcoverImageBtn = coverImageBtn
  85. }else{
  86. iconView.isHidden = true
  87. }
  88. coverImageBtn.addSubview(iconView)
  89. backView.addSubview(coverImageBtn)
  90. }
  91. backView.snp.makeConstraints { make in
  92. make.right.equalToSuperview()
  93. make.width.equalTo(cScreenWidth)
  94. make.height.equalTo(459 * cAdaptatWidth + cAKSafeAreaHeight)
  95. make.bottom.equalToSuperview()
  96. }
  97. closeView.snp.makeConstraints { make in
  98. make.right.equalToSuperview()
  99. make.width.equalTo(cScreenWidth)
  100. make.height.equalTo(cScreenHeigth - 459)
  101. make.top.equalToSuperview()
  102. }
  103. selectPhotoBtn.snp.makeConstraints { make in
  104. make.left.equalToSuperview().offset(16 * cAdaptatWidth)
  105. make.width.equalTo(164 * cAdaptatWidth )
  106. make.height.equalTo(54 * cAdaptatWidth)
  107. make.bottom.equalToSuperview().offset(-19 - cAKSafeAreaHeight)
  108. }
  109. compliteBtn.snp.makeConstraints { make in
  110. make.left.equalTo(selectPhotoBtn.snp.right).offset(14.0 * cAdaptatWidth)
  111. make.width.equalTo(164 * cAdaptatWidth)
  112. make.height.equalTo(54 * cAdaptatWidth)
  113. make.top.equalTo(selectPhotoBtn.snp.top)
  114. }
  115. }
  116. required init?(coder _: NSCoder) {
  117. fatalError("init(coder:) has not been implemented")
  118. }
  119. @objc func viewHidden() {
  120. isHidden = true
  121. if(selectImageCallBack != nil){
  122. selectImageCallBack!(nil)
  123. }
  124. }
  125. func show(videoURL: URL ,duration:Float64) {
  126. isHidden = false
  127. PQVideoSnapshotUtil.videoSnapshot(videoURL: videoURL, duration: TimeInterval(duration), count: 9) { [weak self] images in
  128. DispatchQueue.main.async {
  129. for i in 0...(images?.count ?? 0) - 1{
  130. let btn = self?.backView.viewWithTag((i + 1) * 100) as? UIButton
  131. btn?.setImage(images?[i], for: .normal)
  132. }
  133. }
  134. }
  135. }
  136. /// 按钮点击事件
  137. /// - Parameter sender: <#sender description#>
  138. /// - Returns: <#description#>
  139. @objc func btnClick(sender: UIButton?) {
  140. switch sender?.tag {
  141. case 1:
  142. BFLog(message: "选择图库")
  143. if(selectPhotoBtnCallBack != nil){
  144. selectPhotoBtnCallBack!()
  145. }
  146. break
  147. case 2:
  148. BFLog(message: "确认选择")
  149. if(selectImageCallBack != nil){
  150. selectImageCallBack!(selectImage)
  151. }
  152. isHidden = true
  153. break
  154. default:
  155. break
  156. }
  157. }
  158. // 封面选择
  159. @objc func coverImageBtnClick(sender: UIButton?) {
  160. //角标的显示
  161. lastSelectcoverImageBtn?.viewWithTag(1000)?.isHidden = true
  162. sender?.viewWithTag(1000)?.isHidden = false
  163. lastSelectcoverImageBtn = sender
  164. BFLog(message: "封面选择了\(String(describing: sender?.tag))")
  165. selectImage = sender?.currentImage
  166. }
  167. }