PlayDetailListViewCell.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // PlayDetaiListViewCell.swift
  3. // ColorfulWallpaper
  4. //
  5. // Created by ni on 2024/9/19.
  6. //
  7. import Foundation
  8. import TSVideoKit
  9. import UIKit
  10. class PlayDetailListViewCell: UITableViewCell {
  11. var deleteButtonClickEvent: (String) -> Void = { _ in }
  12. lazy var bgView: UIView = .simpleView(color: .clear)
  13. lazy var iconView: UIImageView = {
  14. let img: UIImageView = .init(image: UIImage(named: ""))
  15. img.cornerRadius = 12
  16. img.contentMode = .scaleAspectFill
  17. return img
  18. }()
  19. lazy var titleLabel: UILabel = .simpleLabel(text: "", font: .systemFont14, color: .white)
  20. lazy var detailLabel: UILabel = .simpleLabel(text: "", font: .systemFont14, color: .white.withAlphaComponent(0.4))
  21. lazy var stackView: UIStackView = {
  22. let stack: UIStackView = .vStack
  23. stack.spacing = 8
  24. return stack
  25. }()
  26. lazy var hStackView: UIStackView = {
  27. let stack: UIStackView = .hStack
  28. stack.spacing = 8
  29. stack.alignment = .center
  30. return stack
  31. }()
  32. lazy var playingTag: UIImageView = .simpleImage(imageName: "ic_playing_tag")
  33. lazy var deleteButton: UIButton = {
  34. let btn = UIButton()
  35. btn.setImage(.init(named: "ic-close"), for: .normal)
  36. btn.addTarget(self, action: #selector(deleteButtonAction), for: .touchUpInside)
  37. return btn
  38. }()
  39. private var videoId: String = ""
  40. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  41. super.init(style: style, reuseIdentifier: reuseIdentifier)
  42. backgroundColor = .clear
  43. selectionStyle = .none
  44. addChildren()
  45. makeConstraints()
  46. }
  47. func bindData(video: TSVideo) {
  48. videoId = video.videoId ?? ""
  49. titleLabel.text = video.title
  50. detailLabel.text = video.artist
  51. let isPlaying = video.videoId == PlayerManager.shared.currentVideo?.videoId
  52. titleLabel.textColor = isPlaying ? .hexColor("#60FFD2") : .white
  53. detailLabel.textColor = isPlaying ? .hexColor("#60FFD2").withAlphaComponent(0.4) : .white.withAlphaComponent(0.4)
  54. if video.isOnline {
  55. iconView.kf.setImage(with: video.iconUrl)
  56. } else {
  57. if let imgData = video.artwork {
  58. iconView.image = UIImage(data: imgData)
  59. } else {
  60. iconView.image = UIImage(named: "ic_default")
  61. }
  62. }
  63. }
  64. func bindData(data: VideoOnlineModel) {
  65. videoId = data.videoId
  66. titleLabel.text = data.title
  67. detailLabel.text = data.channelName
  68. let isPlaying = data.videoId == PlayerManager.shared.currentVideo?.videoId
  69. playingTag.isHidden = !isPlaying
  70. iconView.kf.setImage(with: data.iconUrl)
  71. }
  72. @objc func deleteButtonAction() {
  73. deleteButtonClickEvent(videoId)
  74. }
  75. required init?(coder: NSCoder) {
  76. fatalError("init(coder:) has not been implemented")
  77. }
  78. func addChildren() {
  79. contentView.addSubview(bgView)
  80. bgView.addSubview(hStackView)
  81. hStackView.addArrangedSubview(iconView)
  82. hStackView.addArrangedSubview(stackView)
  83. hStackView.addArrangedSubview(playingTag)
  84. stackView.addArrangedSubview(titleLabel)
  85. stackView.addArrangedSubview(detailLabel)
  86. bgView.addSubview(deleteButton)
  87. }
  88. func makeConstraints() {
  89. bgView.snp.makeConstraints { make in
  90. make.horizontalEdges.equalToSuperview()
  91. make.verticalEdges.equalToSuperview().inset(8)
  92. }
  93. hStackView.snp.makeConstraints { make in
  94. make.leading.equalToSuperview().inset(16)
  95. make.trailing.equalTo(deleteButton.snp.leading).offset(-8)
  96. make.verticalEdges.equalToSuperview()
  97. }
  98. iconView.snp.makeConstraints { make in
  99. make.width.height.equalTo(60)
  100. }
  101. playingTag.snp.makeConstraints { make in
  102. make.width.height.equalTo(24)
  103. }
  104. deleteButton.snp.makeConstraints { make in
  105. make.trailing.equalToSuperview().offset(-16)
  106. make.centerY.equalToSuperview()
  107. make.width.height.equalTo(18)
  108. }
  109. }
  110. }