Files
featherVoice/TUIKit/TUICallKit/TUICallKit-Swift/View/Component/FloatView/FloatingWindowGroupStatusView.swift
2025-08-08 10:49:36 +08:00

97 lines
3.3 KiB
Swift

//
// FloatingWindowStatusView.swift
// TUICallKit
//
// Created by noah on 2023/11/20.
//
import Foundation
class FloatingWindowGroupStatusView: UIView {
let isCameraOpenObserver = Observer()
let isMicMuteObserver = Observer()
let videoImageView: UIImageView = {
let imageView = UIImageView()
let imageName = TUICallState.instance.isCameraOpen.value ? "icon_float_group_video_on" : "icon_float_group_video_off"
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
imageView.image = image
}
return imageView
}()
let audioImageView: UIImageView = {
let imageView = UIImageView()
let imageName = TUICallState.instance.isMicMute.value ? "icon_float_group_audio_off" : "icon_float_group_audio_on"
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
imageView.image = image
}
return imageView
}()
override init(frame: CGRect) {
super.init(frame: frame)
registerObserveState()
constructViewHierarchy()
activateConstraints()
backgroundColor = TUICoreDefineConvert.getTUICallKitDynamicColor(colorKey: "callkit_float_window_group_status_view_bg_color",
defaultHex: "#F9F6F4")
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
TUICallState.instance.isCameraOpen.removeObserver(isCameraOpenObserver)
TUICallState.instance.isMicMute.removeObserver(isMicMuteObserver)
}
func constructViewHierarchy() {
addSubview(videoImageView)
addSubview(audioImageView)
}
func activateConstraints() {
videoImageView.snp.makeConstraints { make in
make.centerY.equalTo(self)
make.leading.equalTo(self).offset(14.scaleWidth())
make.width.height.equalTo(16.scaleWidth())
}
audioImageView.snp.makeConstraints { make in
make.centerY.equalTo(self)
make.trailing.equalTo(self).offset(-14.scaleWidth())
make.width.height.equalTo(16.scaleWidth())
}
}
// MARK: Register TUICallState Observer && Update UI
func registerObserveState() {
isCameraOpenChange()
isMicMuteChange()
}
func isCameraOpenChange() {
TUICallState.instance.isCameraOpen.addObserver(isCameraOpenObserver, closure: { [weak self] newValue, _ in
guard let self = self else { return }
let imageName = newValue ? "icon_float_group_video_on" : "icon_float_group_video_off"
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
self.videoImageView.image = image
}
})
}
func isMicMuteChange() {
TUICallState.instance.isMicMute.addObserver(isMicMuteObserver, closure: { [weak self] newValue, _ in
guard let self = self else { return }
let imageName = newValue ? "icon_float_group_audio_off" : "icon_float_group_audio_on"
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
self.audioImageView.image = image
}
})
}
}