LNRoomBottomMenuView.swift 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // LNRoomBottomMenuView.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/9.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNRoomBottomMenuView: UIView {
  11. private let messageInput = LNRoomMessageInputView()
  12. private let micButton = UIButton()
  13. private let giftButton = UIButton()
  14. private let menuButton = UIButton()
  15. private let joinButton = LNRoomJoinMenuView()
  16. private weak var roomSession: LNRoomViewModel?
  17. override init(frame: CGRect) {
  18. super.init(frame: frame)
  19. setupViews()
  20. }
  21. func update(_ room: LNRoomViewModel?) {
  22. roomSession = room
  23. joinButton.update(room)
  24. messageInput.update(room)
  25. }
  26. required init?(coder: NSCoder) {
  27. fatalError("init(coder:) has not been implemented")
  28. }
  29. }
  30. extension LNRoomBottomMenuView {
  31. private func setupViews() {
  32. snp.makeConstraints { make in
  33. make.height.equalTo(50)
  34. }
  35. let menuView = buildMenuView()
  36. addSubview(menuView)
  37. menuView.snp.makeConstraints { make in
  38. make.trailing.equalToSuperview().offset(-10)
  39. make.centerY.equalToSuperview()
  40. }
  41. let input = buildMessageInput()
  42. addSubview(input)
  43. input.snp.makeConstraints { make in
  44. make.centerY.equalToSuperview()
  45. make.leading.equalToSuperview().offset(10)
  46. }
  47. }
  48. private func buildMenuView() -> UIView {
  49. let stackView = UIStackView()
  50. stackView.axis = .horizontal
  51. stackView.spacing = 8
  52. micButton.setImage(.icMicOn, for: .normal)
  53. stackView.addArrangedSubview(micButton)
  54. giftButton.setImage(.icGift, for: .normal)
  55. stackView.addArrangedSubview(giftButton)
  56. menuButton.setImage(.icMoreWithBg, for: .normal)
  57. menuButton.addAction(UIAction(handler: { [weak self] _ in
  58. guard let self else { return }
  59. let panel = LNRoomSettingMenuPanel()
  60. panel.update(roomSession)
  61. panel.popup()
  62. }), for: .touchUpInside)
  63. stackView.addArrangedSubview(menuButton)
  64. stackView.addArrangedSubview(joinButton)
  65. return stackView
  66. }
  67. private func buildMessageInput() -> UIView {
  68. return messageInput
  69. }
  70. }