SongListCell.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. //
  2. // MusicEmptyView.swift
  3. // PhysicalWallPaper
  4. //
  5. // Created by nkl on 2024/11/13.
  6. //
  7. import Foundation
  8. import TSVideoKit
  9. import UIKit
  10. class SongListCell: UITableViewCell {
  11. var isMuti: Bool = false
  12. var needOperate: Bool = true
  13. lazy var hStack: UIStackView = {
  14. let stack: UIStackView = .hStack
  15. stack.spacing = 14
  16. return stack
  17. }()
  18. lazy var raduiButton: UIButton = {
  19. let btn = UIButton()
  20. btn.setImage(.icCheckN, for: .normal)
  21. btn.setImage(.icCheckS, for: .selected)
  22. btn.isHidden = true
  23. btn.isUserInteractionEnabled = false
  24. return btn
  25. }()
  26. lazy var bgView: UIView = .simpleView(color: .clear)
  27. lazy var lineView: UIView = .simpleView(color: .white.withAlphaComponent(0.1))
  28. lazy var iconView: UIImageView = {
  29. let img: UIImageView = .init(image: UIImage(named: ""))
  30. img.cornerRadius = 8
  31. img.contentMode = .scaleAspectFill
  32. return img
  33. }()
  34. lazy var titleLabel: UILabel = .simpleLabel(text: "", font: .boldSystemFont14, color: .white)
  35. lazy var timeLabel: UILabel = .simpleLabel(text: "UnKnown".localized(), color: .white.withAlphaComponent(0.4))
  36. lazy var stackView: UIStackView = {
  37. let stack: UIStackView = .vStack
  38. stack.spacing = 8
  39. return stack
  40. }()
  41. lazy var hContentStack: UIStackView = {
  42. let stack: UIStackView = .hStack
  43. stack.alignment = .center
  44. stack.spacing = 8
  45. return stack
  46. }()
  47. lazy var moreButton: UIButton = {
  48. let btn = UIButton()
  49. btn.setImage(UIImage(named: "icon_more"), for: .normal)
  50. btn.addTarget(self, action: #selector(showMoreViewController), for: .touchUpInside)
  51. return btn
  52. }()
  53. lazy var playingTag: UIImageView = .simpleImage(imageName: "ic_playing_tag")
  54. private var mVideo: TSVideo?
  55. var mPlaylist: TSPlayList?
  56. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  57. super.init(style: style, reuseIdentifier: reuseIdentifier)
  58. backgroundColor = .clear
  59. selectionStyle = .none
  60. addChildren()
  61. makeConstraints()
  62. }
  63. func bindData(video: TSVideo, isMutiSelected: Bool = false, isSelected: Bool = false, needOperate: Bool = false) {
  64. mVideo = video
  65. self.needOperate = needOperate
  66. let isPlaying = video.videoId == PlayerManager.shared.currentVideo?.videoId
  67. titleLabel.textColor = isPlaying ? .hexColor("#60FFD2") : .white
  68. timeLabel.textColor = isPlaying ? .hexColor("#60FFD2").withAlphaComponent(0.4) : .white.withAlphaComponent(0.4)
  69. isMuti = isMutiSelected
  70. titleLabel.text = video.title
  71. if let artist = video.artist {
  72. timeLabel.text = artist.isEmpty == true ? "UnKnown".localized() : video.artist
  73. } else {
  74. timeLabel.text = "UnKnown".localized()
  75. }
  76. if video.isOnline {
  77. iconView.kf.setImage(with: video.iconUrl, placeholder: UIImage(named: "ic_default"))
  78. } else {
  79. if let imgData = video.artwork {
  80. iconView.image = UIImage(data: imgData)
  81. } else {
  82. iconView.image = UIImage(named: "ic_default")
  83. }
  84. }
  85. raduiButton.isHidden = !isMutiSelected
  86. raduiButton.isSelected = isSelected
  87. moreButton.isHidden = isMutiSelected || !needOperate
  88. }
  89. @objc func showMoreViewController() {
  90. let vc = CWOperateViewController()
  91. if let playlist = mPlaylist {
  92. vc.playlist = playlist
  93. vc.types = [.like, .addPlaylist, .removeFromPlaylist, .share, .deleteVideo]
  94. } else {
  95. vc.types = [.like, .addPlaylist, .share, .deleteVideo]
  96. }
  97. vc.operteItem = mVideo
  98. vc.modalPresentationStyle = .overFullScreen
  99. PlayerManager.shared.rootVc?.present(vc, animated: true)
  100. // todo.kailen
  101. // if isMuti {
  102. // return
  103. // }
  104. // let operateTypes: [OperateType]
  105. // if isFromPlaylist {
  106. // operateTypes = [.edit, .addPlaylist, .like, .removeFromlist, .delete,.share, .ring]
  107. // } else {
  108. // operateTypes = [.edit, .addPlaylist, .like, .delete,.share, .ring]
  109. // }
  110. // let vc = RingOperateViewController(operateTypes: operateTypes)
  111. // vc.video = mVideo
  112. // vc.playlist = mPlaylist
  113. // vc.modalPresentationStyle = .overFullScreen
  114. // PlayRootController.shared.present(vc, animated: true)
  115. }
  116. func addChildren() {
  117. contentView.addSubview(hStack)
  118. hStack.addArrangedSubview(bgView)
  119. hStack.addArrangedSubview(raduiButton)
  120. bgView.addSubview(hContentStack)
  121. hContentStack.addArrangedSubview(iconView)
  122. hContentStack.addArrangedSubview(stackView)
  123. hContentStack.addArrangedSubview(playingTag)
  124. hContentStack.addArrangedSubview(moreButton)
  125. stackView.addArrangedSubview(titleLabel)
  126. stackView.addArrangedSubview(timeLabel)
  127. contentView.addSubview(lineView)
  128. }
  129. func makeConstraints() {
  130. hStack.snp.makeConstraints { make in
  131. make.horizontalEdges.equalToSuperview().inset(16)
  132. make.verticalEdges.equalToSuperview().inset(8)
  133. }
  134. raduiButton.snp.makeConstraints { make in
  135. make.width.equalTo(24)
  136. }
  137. hContentStack.snp.makeConstraints { make in
  138. make.edges.equalToSuperview()
  139. make.height.equalTo(56)
  140. }
  141. iconView.snp.makeConstraints { make in
  142. make.width.height.equalTo(56)
  143. }
  144. playingTag.snp.makeConstraints { make in
  145. make.width.equalTo(24)
  146. }
  147. moreButton.snp.makeConstraints { make in
  148. make.width.height.equalTo(44)
  149. }
  150. lineView.snp.makeConstraints { make in
  151. make.bottom.equalToSuperview()
  152. make.horizontalEdges.equalToSuperview().inset(16)
  153. make.height.equalTo(1)
  154. }
  155. }
  156. required init?(coder: NSCoder) {
  157. fatalError("init(coder:) has not been implemented")
  158. }
  159. }