BFImageCoverViewCell.swift 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //
  2. // BFImageCoverViewCell.swift
  3. // BFRecordScreenKit
  4. //
  5. // Created by SanW on 2021/12/15.
  6. // Copyright © 2021 BytesFlow. All rights reserved.
  7. //
  8. import BFUIKit
  9. import GPUImage
  10. import UIKit
  11. open class BFImageCoverViewCell: UICollectionViewCell {
  12. var btnClickHandle: ((_ sender: UIButton, _ recordItem: BFRecordItemModel?) -> Void)?
  13. public lazy var playBtn: UIButton = {
  14. let btn = UIButton(type: .custom)
  15. btn.setImage(imageInRecordScreenKit(by: "preview_play"), for: .normal)
  16. let vv = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
  17. btn.setImage(vv.graphicsGetImage(), for: .selected)
  18. btn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
  19. return btn
  20. }()
  21. lazy var playView: GPUImageView = {
  22. let playView = GPUImageView(frame: bounds)
  23. return playView
  24. }()
  25. lazy var filter: GPUImageFilter = {
  26. let filter = GPUImageFilter()
  27. return filter
  28. }()
  29. lazy var picture: GPUImagePicture = {
  30. let picture = GPUImagePicture()
  31. return picture
  32. }()
  33. @objc public class func gpuImageViewCell(collectionView: UICollectionView, indexPath: IndexPath) -> BFImageCoverViewCell {
  34. let cell: BFImageCoverViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: BFImageCoverViewCell.self), for: indexPath) as! BFImageCoverViewCell
  35. return cell
  36. }
  37. override public func prepareForReuse() {
  38. super.prepareForReuse()
  39. filter.removeTarget(playView)
  40. picture.removeTarget(filter)
  41. playBtn.isSelected = false
  42. }
  43. override public init(frame: CGRect) {
  44. super.init(frame: frame)
  45. contentView.addSubview(playView)
  46. contentView.addSubview(playBtn)
  47. }
  48. public required init?(coder _: NSCoder) {
  49. fatalError("init(coder:) has not been implemented")
  50. }
  51. public var recordItem: BFRecordItemModel? {
  52. didSet {
  53. addData()
  54. addLayout()
  55. }
  56. }
  57. public func addData() {
  58. guard let coverImg = recordItem?.coverImg else {
  59. filter.removeTarget(playView)
  60. picture.removeTarget(filter)
  61. return
  62. }
  63. picture = GPUImagePicture(image: coverImg)
  64. picture.addTarget(filter)
  65. filter.addTarget(playView)
  66. picture.processImage()
  67. // 暂停状态--如果是图片素材同时没有录音文件时不显示播放按钮
  68. playBtn.isSelected = (recordItem?.mediaType == .IMAGE && (recordItem?.voiceStickers.count ?? 0) <= 0)
  69. }
  70. public func addLayout() {
  71. playView.frame = contentView.bounds
  72. playBtn.frame = CGRect(x: 0, y: cDevice_iPhoneNavBarAndStatusBarHei, width: cScreenWidth, height: cScreenHeigth - cDevice_iPhoneNavBarAndStatusBarHei * 2)
  73. playBtn.center = contentView.center
  74. }
  75. @objc func btnClick(sender: UIButton) {
  76. sender.isSelected = !sender.isSelected
  77. if btnClickHandle != nil {
  78. btnClickHandle!(sender, recordItem)
  79. }
  80. }
  81. }