LNJoinUsPhotoExamplePanel.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //
  2. // LNJoinUsPhotoExamplePanel.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/1/22.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNJoinUsPhotoExamplePanel: LNPopupView {
  11. private let titleLabel = UILabel()
  12. private let descLabel = UILabel()
  13. private let imageView = UIImageView()
  14. private var curItem: LNSkillFieldExample?
  15. override init(frame: CGRect) {
  16. super.init(frame: frame)
  17. setupViews()
  18. }
  19. func update(_ example: LNSkillFieldExample) {
  20. titleLabel.text = example.title
  21. descLabel.text = example.desc
  22. imageView.sd_setImage(with: URL(string: example.value))
  23. { [weak self] image, _, _, _ in
  24. guard let self else { return }
  25. guard let image else { return }
  26. imageView.snp.makeConstraints { make in
  27. make.height.equalTo(self.imageView.snp.width)
  28. .multipliedBy(image.size.height / image.size.width).priority(.high)
  29. }
  30. }
  31. curItem = example
  32. }
  33. required init?(coder: NSCoder) {
  34. fatalError("init(coder:) has not been implemented")
  35. }
  36. }
  37. extension LNJoinUsPhotoExamplePanel {
  38. private func setupViews() {
  39. let headerView = buildHeader()
  40. container.addSubview(headerView)
  41. headerView.snp.makeConstraints { make in
  42. make.horizontalEdges.equalToSuperview()
  43. make.top.equalToSuperview()
  44. }
  45. imageView.layer.cornerRadius = 12
  46. imageView.clipsToBounds = true
  47. imageView.contentMode = .scaleAspectFit
  48. imageView.onTap { [weak self] in
  49. guard let self else { return }
  50. guard let curItem else { return }
  51. presentImagePreview([curItem.value], 0)
  52. }
  53. container.addSubview(imageView)
  54. imageView.snp.makeConstraints { make in
  55. make.horizontalEdges.equalToSuperview().inset(32)
  56. make.top.equalTo(headerView.snp.bottom)
  57. make.bottom.equalToSuperview().offset(commonBottomInset)
  58. make.height.equalTo(imageView.snp.width).multipliedBy(159.0 / 311.0).priority(.low)
  59. make.height.lessThanOrEqualTo(UIScreen.main.bounds.height * 0.5 - 70)
  60. }
  61. }
  62. private func buildHeader() -> UIView {
  63. let container = UIView()
  64. titleLabel.font = .heading_h3
  65. titleLabel.textColor = .text_5
  66. titleLabel.numberOfLines = 0
  67. titleLabel.textAlignment = .center
  68. container.addSubview(titleLabel)
  69. titleLabel.snp.makeConstraints { make in
  70. make.horizontalEdges.equalToSuperview().inset(32)
  71. make.top.equalToSuperview().offset(13)
  72. }
  73. descLabel.font = .body_xs
  74. descLabel.textColor = .text_3
  75. descLabel.numberOfLines = 0
  76. descLabel.textAlignment = .center
  77. container.addSubview(descLabel)
  78. descLabel.snp.makeConstraints { make in
  79. make.horizontalEdges.equalToSuperview().inset(32)
  80. make.bottom.equalToSuperview().offset(-13)
  81. make.top.equalTo(titleLabel.snp.bottom).offset(2)
  82. }
  83. return container
  84. }
  85. }