// // 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 }() }