Files
featherVoice/TUIKit/TUIRoomKit/Source/View/Page/Widget/LocalAudioIndicator/LocalAudioView.swift
2025-08-08 10:49:36 +08:00

87 lines
2.4 KiB
Swift

//
// LocalAudioView.swift
// TUIRoomKit
//
// Created by janejntang on 2024/1/5.
//
import Foundation
class LocalAudioView: UIView {
let viewModel: LocalAudioViewModel
lazy var muteAudioButton : UIButton = {
let button = UIButton()
button.setImage(UIImage(named: "room_mic_on", in: tuiRoomKitBundle(), compatibleWith: nil), for: .normal)
button.setImage(UIImage(named: "room_mic_off", in: tuiRoomKitBundle(), compatibleWith: nil), for: .selected)
button.isSelected = viewModel.checkMuteAudioSelectedState()
button.backgroundColor = UIColor(0x2A2D38)
button.layer.cornerRadius = 12
return button
}()
init(viewModel: LocalAudioViewModel) {
self.viewModel = viewModel
super.init(frame: .zero)
self.transform = CGAffineTransform(translationX: 0, y: kScreenHeight)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
debugPrint("deinit:\(self)")
}
// MARK: - view layout
private var isViewReady: Bool = false
override func didMoveToWindow() {
super.didMoveToWindow()
guard !isViewReady else { return }
constructViewHierarchy()
activateConstraints()
bindInteraction()
isViewReady = true
}
private func constructViewHierarchy() {
addSubview(muteAudioButton)
}
private func activateConstraints() {
muteAudioButton.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
private func bindInteraction() {
viewModel.viewResponder = self
muteAudioButton.addTarget(self, action: #selector(muteAudioAction(sender:)), for: .touchUpInside)
}
@objc func muteAudioAction(sender: UIButton) {
viewModel.muteAudioAction()
}
func show() {
UIView.animate(withDuration: 0.3) { [weak self] () in
guard let self = self else { return }
self.transform = .identity
} completion: { _ in
}
}
func hide() {
self.transform = CGAffineTransform(translationX: 0, y: kScreenHeight)
}
}
extension LocalAudioView: LocalAudioViewModelResponder {
func updateMuteAudioButton(isSelected: Bool) {
muteAudioButton.isSelected = isSelected
}
func makeToast(text: String) {
RoomRouter.makeToastInCenter(toast: text, duration: 1)
}
}