This commit is contained in:
2025-11-10 15:38:30 +08:00
parent 97316c7989
commit 1cdc17b710
18 changed files with 337 additions and 20 deletions

View File

@@ -0,0 +1,72 @@
//
// KBHUD.h
// keyBoard
//
// 基于 MBProgressHUD 的轻量封装,提供类似 SVProgressHUD 的类方法调用方式。
// 特性:
// - 默认加到 KeyWindow 上
// - 支持遮罩模式(不拦截/透明拦截/半透明黑遮罩)
// - 默认不支持点击背景关闭;可为“本次显示/当前 HUD”开启点击关闭
// - 文案/加载/进度/自动消失
//
#import <Foundation/Foundation.h>
@class UIView; // forward declare to avoid importing UIKit in header
typedef NS_ENUM(NSUInteger, KBHUDMaskType) {
/// 不加遮罩,事件可透传到后面的视图(与 SVProgressHUDMaskTypeNone 类似)
KBHUDMaskTypeNone = 0,
/// 透明遮罩,拦截触摸但不变暗(与 SVProgressHUDMaskTypeClear 类似)
KBHUDMaskTypeClear,
/// 半透明黑色遮罩(与 SVProgressHUDMaskTypeBlack 类似)
KBHUDMaskTypeBlack,
};
NS_ASSUME_NONNULL_BEGIN
@interface KBHUD : NSObject
#pragma mark - 显示
/// 纯菊花
+ (void)show;
/// 菊花 + 文案
+ (void)showWithStatus:(nullable NSString *)status;
/// 菊花 + 文案(可配置:是否允许点击背景关闭)
+ (void)showWithStatus:(nullable NSString *)status allowTapToDismiss:(BOOL)allow;
/// 圆形进度 0~1 + 文案
+ (void)showProgress:(float)progress status:(nullable NSString *)status;
/// 圆形进度 0~1 + 文案(可配置:是否允许点击背景关闭)
+ (void)showProgress:(float)progress status:(nullable NSString *)status allowTapToDismiss:(BOOL)allow;
/// 文案提示(自动隐藏)
+ (void)showInfo:(NSString *)status;
/// 成功提示(自动隐藏)
+ (void)showSuccess:(NSString *)status;
/// 失败提示(自动隐藏)
+ (void)showError:(NSString *)status;
#pragma mark - 隐藏
/// 立即隐藏
+ (void)dismiss;
/// 延时隐藏
+ (void)dismissWithDelay:(NSTimeInterval)delay;
#pragma mark - 配置(全局)
/// 设置默认遮罩类型,默认 KBHUDMaskTypeClear
+ (void)setDefaultMaskType:(KBHUDMaskType)maskType;
/// 为“当前正在展示的 HUD”设置点击背景是否关闭若当前没有 HUD 则忽略
+ (void)setTapToDismissEnabled:(BOOL)enabled;
/// 仅本次显示:菊花(无文案)可配置是否允许点击背景关闭
+ (void)showAllowTapToDismiss:(BOOL)allow;
/// 设置自动隐藏的时长success/error/info默认 1.2s
+ (void)setAutoDismissInterval:(NSTimeInterval)interval;
/// 设置缺省承载视图App Extension 环境下必须设置,例如在键盘扩展里传入 self.view
/// 注意:内部弱引用,不会形成循环引用。
/// 若不设置,在非 Extension 的 App 内默认加到 KeyWindow在 Extension 内将不会显示。
/// 可在 viewDidLoad 或 viewDidAppear 调用一次即可。
/// @param view 作为 HUD 的承载父视图
+ (void)setContainerView:(nullable UIView *)view;
@end
NS_ASSUME_NONNULL_END