PQEditPublicCoverImageView.swift 6.4 KB

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