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

146 lines
4.2 KiB
Swift

//
// BottomItemView.swift
// Alamofire
//
// Created by aby on 2022/12/23.
// Copyright © 2023 Tencent. All rights reserved.
//
import UIKit
class BottomItemView: UIView {
var itemData: ButtonItemData
var engineManager: EngineManager {
EngineManager.shared
}
let button: UIButton = {
let button = UIButton(type: .custom)
return button
}()
let label: UILabel = {
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 10.0)
label.textColor = UIColor(0xD1D9EC)
label.textAlignment = .center
label.adjustsFontSizeToFitWidth = true
return label
}()
let imageView: UIImageView = {
let view = UIImageView()
return view
}()
let noticeView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(0xED414D)
view.layer.borderWidth = 3
view.layer.borderColor = UIColor(0x2A2D38).cgColor
view.layer.cornerRadius = 12
view.clipsToBounds = true
return view
}()
let noticeLabel: UILabel = {
let label = UILabel()
label.textColor = UIColor(0xFFFFFF)
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
label.backgroundColor = .clear
return label
}()
// MARK: - initialized function
init(itemData: ButtonItemData) {
self.itemData = itemData
super.init(frame: .zero)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - view layout
private var isViewReady: Bool = false
override func didMoveToWindow() {
super.didMoveToWindow()
guard !isViewReady else { return }
self.layer.cornerRadius = 10
constructViewHierarchy()
activateConstraints()
bindInteraction()
isViewReady = true
}
func constructViewHierarchy() {
addSubview(button)
button.addSubview(imageView)
button.addSubview(label)
button.addSubview(noticeView)
noticeView.addSubview(noticeLabel)
}
func activateConstraints() {
button.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
imageView.snp.makeConstraints { make in
if itemData.normalTitle.isEmpty, itemData.selectedTitle.isEmpty {
make.centerY.equalToSuperview()
} else {
make.top.equalToSuperview().offset(7)
}
make.width.height.equalTo(24)
make.centerX.equalToSuperview()
}
label.snp.makeConstraints { make in
if itemData.normalIcon.isEmpty, itemData.selectedIcon.isEmpty {
make.centerY.equalToSuperview()
} else {
make.top.equalTo(imageView.snp.bottom).offset(2)
}
make.width.equalToSuperview()
make.height.equalTo(14)
}
noticeLabel.snp.makeConstraints { make in
make.trailing.equalTo(button).offset(-7)
make.top.equalToSuperview().offset(4)
make.width.height.greaterThanOrEqualTo(16)
}
noticeView.snp.makeConstraints { make in
make.leading.top.equalTo(noticeLabel).offset(-4)
make.trailing.bottom.equalTo(noticeLabel).offset(4)
make.width.lessThanOrEqualTo(button)
}
}
func bindInteraction() {
setupViewState(item: itemData)
button.addTarget(self, action: #selector(clickMenuButton(sender:)), for: .touchUpInside)
}
func setupViewState(item: ButtonItemData) {
itemData = item
button.isSelected = item.isSelect
button.isEnabled = item.isEnabled
imageView.image = item.isSelect ? itemData.selectedImage : itemData.normalImage
label.text = item.isSelect ? itemData.selectedTitle : itemData.normalTitle
button.alpha = item.alpha
noticeView.isHidden = !item.hasNotice
noticeLabel.text = item.noticeText
}
@objc
func clickMenuButton(sender: UIView) {
itemData.action?(sender)
}
deinit {
debugPrint("deinit \(self)")
}
}