// // SPExplorePlayerControlView.swift // Thimra // // Created by 曾觉新 on 2025/4/17. // import UIKit class SPExplorePlayerControlView: SPPlayerControlView { override var shortModel: SPShortModel? { didSet { // desLabel.text = shortModel?.sp_description videoInfoView.shortModel = shortModel // shortModel?.episode_total updateEpisodeLabel() } } override var videoInfo: SPVideoInfoModel? { didSet { updateEpisodeLabel() } } // private lazy var desLabel: UILabel = { // let label = UILabel() // label.font = .fontRegular(ofSize: 12) // label.textColor = .colorD2D2D2() // label.numberOfLines = 2 // return label // }() private lazy var videoInfoView: SPVideoPlayerInfoView = { let view = SPVideoPlayerInfoView() return view }() private lazy var episodeIconImageView: UIImageView = { let imageView = UIImageView(image: UIImage(named: "episode_icon_01")) return imageView }() private lazy var episodeLabel: UILabel = { let label = UILabel() label.font = .fontRegular(ofSize: 12) return label }() private lazy var allEpisodeButton: UIButton = { let button = JXButton(type: .custom) button.setTitle("Full Episodes".localized, for: .normal) button.setTitleColor(.colorEC3324(), for: .normal) button.setImage(UIImage(named: "arrow_right_icon_01"), for: .normal) button.jx_font = .fontMedium(ofSize: 12) button.titleDirection = .left button.space = 4 button.addTarget(self, action: #selector(handleAllEpisodeButton), for: .touchUpInside) return button }() override init(frame: CGRect) { super.init(frame: frame) // self.progressView.isHidden = true _setupUI() } @MainActor required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func updateEpisodeLabel() { let totalEpisode = String(format: "EP%@".localized, "\(self.shortModel?.episode_total ?? 0)") let currentEpisode = String(format: "EP%@".localized, self.videoInfo?.episode ?? "0") let episodeStr = "\(currentEpisode)/\(totalEpisode)" let range = NSRange(location: episodeStr.length() - totalEpisode.length(), length: totalEpisode.length()) let string = NSMutableAttributedString(string: episodeStr) string.color = .colorEC3324() string.setColor(.colorFFFFFF(), range: range) episodeLabel.attributedText = string } } extension SPExplorePlayerControlView { @objc private func handleAllEpisodeButton() { let vc = SPPlayerDetailViewController() vc.shortPlayId = self.shortModel?.short_play_id self.viewController?.navigationController?.pushViewController(vc, animated: true) } } extension SPExplorePlayerControlView { private func _setupUI() { // addSubview(desLabel) addSubview(videoInfoView) toolView.addSubview(episodeIconImageView) toolView.addSubview(episodeLabel) toolView.addSubview(allEpisodeButton) // desLabel.snp.makeConstraints { make in // make.left.equalToSuperview().offset(15) // make.right.lessThanOrEqualToSuperview().offset(-30) // make.bottom.equalToSuperview().offset(-15) // } videoInfoView.snp.makeConstraints { make in make.left.equalToSuperview().offset(15) // make.bottom.equalTo(desLabel.snp.top).offset(-10) make.bottom.equalToSuperview().offset(-54) } episodeIconImageView.snp.makeConstraints { make in make.centerY.equalToSuperview() make.left.equalToSuperview().offset(14) } episodeLabel.snp.makeConstraints { make in make.centerY.equalToSuperview() make.left.equalTo(episodeIconImageView.snp.right).offset(4) } allEpisodeButton.snp.makeConstraints { make in make.top.bottom.equalToSuperview() make.right.equalToSuperview().offset(-14) } } }