LNHomeGameTabItemView.swift 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //
  2. // LNHomeGameTabItemView.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/14.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNHomeGameTabItemView: UIView {
  11. private let cover = UIImageView()
  12. private let selectedBorder = UIImageView()
  13. private let nameLabel = UILabel()
  14. private(set) var item: LNGameCategoryItemVO?
  15. override init(frame: CGRect) {
  16. super.init(frame: frame)
  17. setupViews()
  18. }
  19. func update(_ item: LNGameCategoryItemVO) {
  20. cover.sd_setImage(with: URL(string: item.icon))
  21. nameLabel.text = item.name
  22. self.item = item
  23. }
  24. func setSelected(_ selected: Bool) {
  25. selectedBorder.image = selected ? .primary_7 : nil
  26. nameLabel.font = selected ? .heading_h5 : .body_s
  27. }
  28. func toBeMoreTab() {
  29. selectedBorder.isHidden = true
  30. cover.layer.borderColor = UIColor.clear.cgColor
  31. cover.image = .icHomeGameTabMore
  32. cover.clipsToBounds = false
  33. nameLabel.text = .init(key: "A00048")
  34. nameLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
  35. nameLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
  36. }
  37. required init?(coder: NSCoder) {
  38. fatalError("init(coder:) has not been implemented")
  39. }
  40. }
  41. extension LNHomeGameTabItemView {
  42. private func setupViews() {
  43. selectedBorder.backgroundColor = .fill
  44. selectedBorder.layer.cornerRadius = 26
  45. selectedBorder.clipsToBounds = true
  46. insertSubview(selectedBorder, belowSubview: cover)
  47. selectedBorder.snp.makeConstraints { make in
  48. make.top.equalToSuperview()
  49. make.centerX.equalToSuperview()
  50. make.width.height.equalTo(50)
  51. make.leading.greaterThanOrEqualToSuperview()
  52. }
  53. cover.backgroundColor = .fill
  54. cover.layer.cornerRadius = 24
  55. cover.clipsToBounds = true
  56. addSubview(cover)
  57. cover.snp.makeConstraints { make in
  58. make.edges.equalTo(selectedBorder).inset(1)
  59. }
  60. nameLabel.textAlignment = .center
  61. nameLabel.font = .body_s
  62. nameLabel.textColor = .text_5
  63. nameLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
  64. nameLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
  65. addSubview(nameLabel)
  66. nameLabel.snp.makeConstraints { make in
  67. make.centerX.equalToSuperview()
  68. make.top.equalTo(selectedBorder.snp.bottom).offset(3)
  69. make.bottom.equalToSuperview()
  70. make.leading.equalToSuperview().offset(6)
  71. }
  72. }
  73. }