Visual_Novel_iOS/crush/Crush/Src/Components/UI/NaviBar/NavigationView.swift

193 lines
5.5 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// NavigationView.swift
// Crush
//
// Created by Leon on 2025/7/12.
//
import Foundation
import UIKit
//import R
@objcMembers class NavigationView: UIView {
var alpha0Title:String?{
didSet{
titleLabel.alpha = 0
titleLabel.text = alpha0Title
}
}
var title:String?{
didSet{
titleLabel.text = title
}
}
/// \> 0
var paddingRightForRightStack:CGFloat = 2{
didSet{
rightStackH.snp.updateConstraints { make in
make.trailing.equalToSuperview().offset(-paddingRightForRightStack)
}
}
}
var tapBackButtonAction : (() -> Void)?
var bgView:UIView!
@objc lazy var leftStackH : UIStackView = {
let v = UIStackView()
v.spacing = 0
v.alignment = .center
addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(8) // 8+insets.left(16) = 24
make.bottom.equalToSuperview()
make.height.equalTo(44)
}
return v
}()
@objc lazy var backButton: UIButton = {
let backButton = UIButton(type: .custom)
leftStackH.addArrangedSubview(backButton)
backButton.setImage(R.image.nav_back_white()!, for: .normal)
backButton.contentHorizontalAlignment = .left
backButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: -16)
backButton.addTarget(self, action: #selector(popAction), for: .touchUpInside)
backButton.snp.makeConstraints { make in
make.width.equalTo(44)
make.height.equalTo(44)
}
return backButton
}()
@objc lazy var titleLabel: UILabel = {
let titleLabel = UILabel()
titleLabel.textColor = .c.ctpn
titleLabel.preferredMaxLayoutWidth = 120
titleLabel.textAlignment = .center
titleLabel.font = .t.ttm//.fredokaOne(size: 18)
addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.centerY.equalTo(backButton)
make.centerX.equalToSuperview()
make.leading.greaterThanOrEqualTo(leftStackH.snp.trailing)
make.trailing.lessThanOrEqualTo(rightStackH.snp.leading)
}
return titleLabel
}()
/// btn 44x44 is ok
@objc lazy var rightStackH: UIStackView = {
let rightStackH = UIStackView()
rightStackH.axis = .horizontal
rightStackH.spacing = 0
rightStackH.alignment = .center
addSubview(rightStackH)
rightStackH.snp.makeConstraints { make in
make.trailing.equalToSuperview().offset(-paddingRightForRightStack)
make.centerY.equalTo(backButton)
}
return rightStackH
}()
@objc lazy var rightButton: UIButton = {
let rightButton = UIButton(type: .custom)
rightButton.isHidden = true
rightButton.setTitleColor(.black, for: .normal)
rightButton.titleLabel?.font = .t.tbm//.popSemiBold(size: 16)
rightButton.contentHorizontalAlignment = .right
rightStackH.addArrangedSubview(rightButton)
rightButton.snp.makeConstraints { make in
make.height.equalTo(44)
make.width.equalTo(44)
}
return rightButton
}()
@objc lazy var styleMainButton: StyleButton = {
let styleMainButton = StyleButton()
styleMainButton.primary(size: .small)
rightStackH.addArrangedSubview(styleMainButton)
paddingRightForRightStack = 24
return styleMainButton
}()
override init(frame: CGRect) {
super.init(frame: frame)
bgView = {
let v = UIView()
addSubview(v)
v.backgroundColor = .c.cbd
v.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
return v
}()
//backgroundColor = .c.cbd
backgroundColor = .clear
}
@available(*, unavailable)
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func popAction() {
if let block = tapBackButtonAction{
block()
}else{
if let vc = viewController() as? CLBaseViewController {
vc.close()
}else{
viewController()?.navigationController?.popViewController(animated: true)
}
}
}
@objc open func setupBackButtonCloseIcon(black: Bool = false) {
if black {
backButton.setImage(R.image.icon_close_20_black(), for: .normal)
} else {
backButton.setImage(R.image.icon_close_20(), for: .normal)
}
backButton.isHidden = false
}
}
// MARK: - Public
// NavigationView
extension NavigationView {
// Please use NaviAlphaHandle to adjust alpha
func changeAlpha(alpha: CGFloat) {
titleLabel.isHidden = false
if titleLabel.alpha == alpha {
return
}
backgroundColor = UIColor.white.withAlphaComponent(alpha)
titleLabel.alpha = alpha
backButton.alpha = alpha
}
func setupNaviRightStyleButton(){
styleMainButton.isHidden = false
paddingRightForRightStack = 24
}
func setupBgViewToStatusBarHeight(){
self.bgView.snp.remakeConstraints { make in
make.top.leading.trailing.equalToSuperview()
make.height.equalTo(UIWindow.statusBarHeight)
}
}
}