提交
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user