Files
yingmeng-ios-switf/yinmeng-ios/Base/Hud/HUDTool.swift
2024-03-05 14:04:09 +08:00

146 lines
3.7 KiB
Swift

//
// HUDTool.swift
// yinmeng-ios
//
// Created by yinmeng on 2024/2/23.
//
import Foundation
import MBProgressHUD
class HUDTool: NSObject {
static var currentHud : MBProgressHUD?
private static let kDelayTime: TimeInterval = 2
/** HUD*/
class func hidden(_ time:TimeInterval = 0){
guard let HUD = currentHud else {
return
}
HUD.hide(animated: false)
currentHud = nil
}
/**
message
- Parameter message:
- Parameter view: view
- Parameter afterDelay:
- Parameter enabled: no: yes:
*/
class func show(with message: String, in view: UIView? = YMRequestX.topViewController()?.view, delay afterDelay: TimeInterval = kDelayTime, enabled: Bool = true, icon:String = "") {
if message.isEmpty { return }
DispatchQueue.main.async {
hidden(0)
var view = view
if view == nil {
view = YMRequestX.topViewController()?.view ?? YMRequestX.keyWindow()
}
if let view = view {
let hud = normalProgressHUD(in: view)
currentHud = hud
hud.isUserInteractionEnabled = enabled
hud.mode = .customView
hud.bezelView.style = .solidColor
hud.margin = 8
hud.backgroundColor = .clear
hud.removeFromSuperViewOnHide = true
let messageView = HudMessageView()
messageView.titleLb.text = message
let maxWidth = 242.0
let size = message.boundingRect(with: CGSize(width: maxWidth, height: CGFLOAT_MAX), font: UIFont.systemFont(ofSize: 14, weight: .medium), lineSpacing: 6)
var width = size.width + 5
var height = size.height
if icon.count > 0 {
messageView.logoImgView.image = UIImage(named: icon)
messageView.logoImgView.isHidden = false
width += 22.0
} else {
messageView.logoImgView.isHidden = true
}
hud.bezelView.backgroundColor = ThemeColor(hexStr: "#000000", alpha: 0.7)
hud.bezelView.layer.cornerRadius = 8
hud.bezelView.layer.masksToBounds = true
hud.bezelView.addSubview(messageView)
messageView.snp.makeConstraints { make in
make.height.equalTo(height)
make.width.equalTo(width)
make.center.equalTo(hud.bezelView)
}
hud.minSize = CGSize(width: width + 40, height: height + 24)
hud.show(animated: true)
hud.hide(animated: false, afterDelay: kDelayTime)
}
}
}
private class func normalProgressHUD(in view: UIView) -> MBProgressHUD {
let hud = MBProgressHUD.showAdded(to: view, animated: true)
hud.mode = .indeterminate
hud.bezelView.style = .solidColor
hud.margin = 8
//
hud.bezelView.color = UIColor.black.withAlphaComponent(0.8)
return hud
}
}
class HudMessageView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(stackView)
stackView.addArrangedSubview(logoImgView)
stackView.addArrangedSubview(titleLb)
stackView.snp.makeConstraints { make in
make.edges.equalTo(self)
}
logoImgView.snp.makeConstraints { make in
make.size.equalTo(CGSize(width: 20, height: 20))
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.distribution = .fill
stackView.axis = .horizontal
stackView.alignment = .top
stackView.spacing = 2
return stackView
}()
lazy var logoImgView: UIImageView = {
let imageView = UIImageView()
imageView.isUserInteractionEnabled = true
imageView.layer.masksToBounds = true
imageView.contentMode = .scaleAspectFill
return imageView
}()
lazy var titleLb: UILabel = {
let label = UILabel()
label.textColor = UIColor.white
label.font = UIFont.systemFont(ofSize: 14, weight: .medium)
label.textAlignment = .center
label.numberOfLines = 0
return label
}()
}