| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- //
- // MBProgressHUD+AppCategory.m
- // Talk
- //
- // Created by qitewei on 2025/4/18.
- //
- #import "MBProgressHUD+AppCategory.h"
- const NSInteger AppHUDAutomaticallyHideSeconds = -1;
- @implementation MBProgressHUD (AppCategory)
- #pragma mark - Loading
- + (MBProgressHUD *)showLoadingInView:(UIView *)view {
- return [self showLoadingWithText:nil detailText:nil inView:view hideAfterDelay:0];
- }
- + (MBProgressHUD *)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
- return [self showLoadingWithText:nil detailText:nil inView:view hideAfterDelay:delay];
- }
- + (MBProgressHUD *)showLoadingWithText:(NSString * _Nullable)text inView:(UIView *)view {
- return [self showLoadingWithText:text detailText:nil inView:view hideAfterDelay:0];
- }
- + (MBProgressHUD *)showLoadingWithText:(NSString * _Nullable)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
- return [self showLoadingWithText:text detailText:nil inView:view hideAfterDelay:delay];
- }
- + (MBProgressHUD *)showLoadingWithText:(NSString * _Nullable)text detailText:(NSString * _Nullable)detailText inView:(UIView *)view {
- return [self showLoadingWithText:text detailText:detailText inView:view hideAfterDelay:0];
- }
- + (MBProgressHUD *)showLoadingWithText:(NSString * _Nullable)text detailText:(NSString * _Nullable)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
- MBProgressHUD *hud = [self MBProgressHUDToView:view];
- hud.mode = MBProgressHUDModeIndeterminate;
- hud.label.text = text;
- hud.detailsLabel.text = detailText;
- [hud showAnimated:YES];
- if (delay == AppHUDAutomaticallyHideSeconds) {
- CGFloat delay = [self secondsToHideWithText:text];
- [hud hideAnimated:YES afterDelay:delay];
- } else if (delay > 0) {
- [hud hideAnimated:YES afterDelay:delay];
- }
- return hud;
- }
- #pragma mark - Text
- + (MBProgressHUD *)showWithText:(NSString *)text {
- return [self showWithText:text detailText:nil inView:WINDOW hideAfterDelay:AppHUDAutomaticallyHideSeconds];
- }
- + (MBProgressHUD *)showWithText:(NSString *)text inView:(UIView *)view {
- return [self showWithText:text detailText:nil inView:view hideAfterDelay:AppHUDAutomaticallyHideSeconds];
- }
- + (MBProgressHUD *)showWithText:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
- return [self showWithText:text detailText:nil inView:view hideAfterDelay:delay];
- }
- + (MBProgressHUD *)showWithText:(NSString *)text detailText:(NSString * _Nullable)detailText {
- return [self showWithText:text detailText:detailText inView:WINDOW hideAfterDelay:AppHUDAutomaticallyHideSeconds];
- }
- + (MBProgressHUD *)showWithText:(NSString *)text detailText:(NSString * _Nullable)detailText inView:(UIView *)view {
- return [self showWithText:text detailText:detailText inView:view hideAfterDelay:AppHUDAutomaticallyHideSeconds];
- }
- + (MBProgressHUD *)showWithText:(NSString *)text detailText:(NSString * _Nullable)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
- if (text.length == 0) {
- return nil;
- }
-
- MBProgressHUD *hud = [self MBProgressHUDToView:view];
- hud.mode = MBProgressHUDModeText;
- hud.label.text = text;
- hud.detailsLabel.text = detailText;
- hud.userInteractionEnabled = NO;
- [hud showAnimated:YES];
- if (delay == AppHUDAutomaticallyHideSeconds) {
- CGFloat delay = [self secondsToHideWithText:text];
- [hud hideAnimated:YES afterDelay:delay];
- } else if (delay > 0) {
- [hud hideAnimated:YES afterDelay:delay];
- }
- return hud;
-
- // return [self showInfo:text detailText:detailText inView:view hideAfterDelay:delay];
- }
- #pragma mark - 带图标的提示
- + (MBProgressHUD *)showWithText:(NSString * _Nullable)text icon:(NSString * _Nullable)icon {
- return [self showWithText:text icon:icon inView:WINDOW hideAfterDelay:AppHUDAutomaticallyHideSeconds];
- }
- + (MBProgressHUD *)showWithText:(NSString * _Nullable)text icon:(NSString * _Nullable)icon inView:(UIView *)view {
- return [self showWithText:text icon:icon inView:view hideAfterDelay:AppHUDAutomaticallyHideSeconds];
- }
- + (MBProgressHUD *)showWithText:(NSString * _Nullable)text icon:(NSString * _Nullable)icon inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
- MBProgressHUD *hud = [self MBProgressHUDToView:view];
- hud.mode = MBProgressHUDModeCustomView;
- hud.customView = [self createCustomViewWithImageName:icon
- labelText:text];
- [hud showAnimated:YES];
- if (delay == AppHUDAutomaticallyHideSeconds) {
- CGFloat delay = [self secondsToHideWithText:text];
- [hud hideAnimated:YES afterDelay:delay];
- } else if (delay > 0) {
- [hud hideAnimated:YES afterDelay:delay];
- }
- return hud;
- }
- + (void)hideAllTipsInView:(UIView *)view {
- [MBProgressHUD hideHUDForView:view animated:NO];
- }
- + (void)hideAllTips {
- [self hideAllTipsInView:WINDOW];
- }
- + (MBProgressHUD *)MBProgressHUDToView:(UIView *)view {
- MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:view ?: WINDOW];
- hud.removeFromSuperViewOnHide = YES;
- // hud.contentColor = UIColor.blackColor;
- hud.margin = 10;
- hud.bezelView.style = MBProgressHUDBackgroundStyleBlur;
- // hud.bezelView.color = [UIColor.blackColor colorWithAlphaComponent:0.2f];
-
- hud.bezelView.backgroundColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
- if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
- return [UIColor colorWithWhite:1.0 alpha:0.8];
- } else {
- return [UIColor colorWithWhite:0.0 alpha:0.8];
- }
- }];
-
- // 指示器和文字颜色:浅色模式下为白色,深色模式下为黑色
- hud.contentColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
- return traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ? [UIColor whiteColor] : [UIColor blackColor];
- }];
-
- hud.label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
- hud.label.numberOfLines = 0;
- hud.label.preferredMaxLayoutWidth = SCREEN_WIDTH - 140;
- hud.detailsLabel.preferredMaxLayoutWidth = SCREEN_WIDTH - 140;
- [view addSubview:hud];
- return hud;
- }
- + (NSTimeInterval)secondsToHideWithText:(NSString *)text {
- NSUInteger length = 0;
- for (NSUInteger i = 0, l = text.length; i < l; i++) {
- unichar character = [text characterAtIndex:i];
- if (isascii(character)) {
- length += 1;
- } else {
- length += 2;
- }
- }
-
- if (length < 20) {
- return 2.0;
- } else if (length < 40) {
- return 2.5;
- } else if (length < 50) {
- return 3.0;
- } else {
- return 3.5;
- }
- }
- #pragma mark - 自定义View
- + (UIView *)createCustomViewWithImageName:(NSString *)imageName
- labelText:(NSString *)labelText {
- UIView *view = [[UIView alloc] init];
-
- UIImageView *icon = [[UIImageView alloc] initWithImage:kImageMake(imageName)];
- UILabel *label = [[UILabel alloc] init];
- label.font = SYSFONT(13);
- label.text = labelText;
- label.textColor = UIColor.whiteColor;
- label.numberOfLines = 0;
-
- [view addSubview:icon];
- [view addSubview:label];
-
- [icon mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.mas_equalTo(10);
- make.centerY.mas_equalTo(0);
- make.size.mas_equalTo(CGSizeMake(24, 24));
- }];
- [label mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(icon.mas_right).offset(8);
- make.right.mas_equalTo(-10);
- make.top.bottom.inset(3);
- }];
- return view;
- }
- @end
|