// // YMHUDTool.m // TTPlay // // Created by YM on 2022/5/15. // Copyright © 2023 YUMI. All rights reserved. // #import "XNDJTDDLoadingTool.h" #import "GCDHelper.h" #import #import "MvpViewController.h" #import #define kDelayTime 2.5 @interface XNDJTDDLoadingTool () /// @property (class,nonatomic,copy) NSArray *animationImages; @end @implementation XNDJTDDLoadingTool static NSArray * _animationImages = nil; /** 隐藏HUD, 如果view为nil, 则默认隐藏主窗口的HUD @param view view */ + (void)hideHUDInView:(nullable UIView *)view { dispatch_main_sync_safe(^{ if (view) { MBProgressHUD *hud = [XNDJTDDLoadingTool HUDForView:view]; if (hud != nil && hud.mode != MBProgressHUDModeText) { hud.removeFromSuperViewOnHide = YES; [hud hideAnimated:NO]; } MBProgressHUD *windowHud = [XNDJTDDLoadingTool HUDForView:kWindow]; if (windowHud != nil && windowHud.mode != MBProgressHUDModeText) { windowHud.removeFromSuperViewOnHide = YES; [windowHud hideAnimated:NO]; } } else { MBProgressHUD *windowHud = [XNDJTDDLoadingTool HUDForView:kWindow]; if (windowHud != nil && windowHud.mode != MBProgressHUDModeText) { windowHud.removeFromSuperViewOnHide = YES; [windowHud hideAnimated:NO]; } } }); } + (MBProgressHUD *)HUDForView:(UIView *)view { NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; for (UIView *subview in subviewsEnum) { if ([subview isKindOfClass:[MBProgressHUD class]]) { MBProgressHUD *hud = (MBProgressHUD *)subview; id hasFinished = [hud valueForKey:@"hasFinished"]; if (hasFinished != nil) { if([hasFinished boolValue] == NO){ return hud; } } } } return nil; } /** 隐藏HUD */ + (void)hideHUD { [self hideHUDInView:nil]; } /** 显示成功message, 默认显示在窗口上, 2.5s后消失, 默认不拦截点击事件 @param message 文字 */ + (void)showSuccessWithMessage:(NSString *)message { [self showSuccessWithMessage:message inView:[UIApplication sharedApplication].keyWindow]; } /** 显示成功message, 2.5s后消失, 默认不拦截点击事件 @param message 文字 @param view 显示在哪个view上 */ + (void)showSuccessWithMessage:(NSString *)message inView:(nullable UIView *)view { [self showSuccessWithMessage:message inView:view delay:kDelayTime enabled:NO]; } /** 显示成功message @param message 文字 @param view 显示在哪个view上 @param afterDelay 延迟消失时间 @param enabled 是否可以拦截事件 no:不拦截 yes:拦截 */ + (void)showSuccessWithMessage:(NSString *)message inView:(nullable UIView *)view delay:(NSTimeInterval)afterDelay enabled:(BOOL)enabled { if (message.length == 0) { return; } __block UIView *inView = view; dispatch_main_sync_safe(^{ if (!inView) { inView = [UIApplication sharedApplication].keyWindow; } [self hideHUDInView:view]; // 先隐藏 MBProgressHUD *hud = [self normalProgressHUD:view]; hud.userInteractionEnabled = enabled; hud.mode = MBProgressHUDModeText; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.margin = 8; // 方框背景颜色 hud.bezelView.color = [[UIColor blackColor] colorWithAlphaComponent:0.8]; hud.label.text = message; hud.label.numberOfLines = 0; hud.label.textColor = [UIColor whiteColor]; hud.label.font = [UIFont systemFontOfSize:14]; [hud hideAnimated:YES afterDelay:afterDelay]; }); } /** 显示错误message, 默认显示在窗口上, 2.5s后消失, 默认不拦截点击事件 @param message 文字 */ + (void)showErrorWithMessage:(NSString *)message { [self showErrorWithMessage:message inView:[UIApplication sharedApplication].keyWindow]; } /** 显示错误message, 2.5s后消失, 默认不拦截点击事件 @param message 文字 @param view 显示在哪个view上 */ + (void)showErrorWithMessage:(NSString *)message inView:(nullable UIView *)view { [self showErrorWithMessage:message inView:view delay:kDelayTime enabled:NO]; } /** 显示错误message @param message 文字 @param view 显示在哪个view上 @param afterDelay 延迟消失时间 @param enabled 是否可以拦截事件 no:不拦截 yes:拦截 */ + (void)showErrorWithMessage:(NSString *)message inView:(nullable UIView *)view delay:(NSTimeInterval)afterDelay enabled:(BOOL)enabled { if (message.length == 0) { return; } if (!view) { view = [UIApplication sharedApplication].keyWindow; } [self hideHUDInView:view]; // 先隐藏 dispatch_main_sync_safe(^{ MBProgressHUD *hud = [self normalProgressHUD:view]; hud.userInteractionEnabled = enabled; hud.mode = MBProgressHUDModeText; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.margin = 8; // 方框背景颜色 hud.bezelView.color = [[UIColor blackColor] colorWithAlphaComponent:0.8]; hud.label.text = message; hud.label.numberOfLines = 0; hud.label.textColor = [UIColor whiteColor]; hud.label.font = [UIFont systemFontOfSize:14]; [hud hideAnimated:YES afterDelay:afterDelay]; }); } /** * 在窗口上显示菊花 */ + (void)showLoading { [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; return; [self showLoadingInView:[UIApplication sharedApplication].keyWindow]; } /** * 在view上显示菊花 */ + (void)showLoadingInView:(nullable UIView *)view { [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; return; [self showLoadingInView:view enabled:YES]; } /** * 在view上显示菊花 */ + (void)showLoadingInView:(nullable UIView *)view enabled:(BOOL)enabled { [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; return; [self showLoadingWithMessage:@"" inView:view enabled:enabled]; } /** * 在窗口上显示菊花+文字 */ + (void)showLoadingWithMessage:(NSString *)message { [self showLoadingWithMessage:message inView:[UIApplication sharedApplication].keyWindow]; } /** * 在view上显示菊花+文字 */ + (void)showLoadingWithMessage:(NSString *)message inView:(nullable UIView *)view { [self showLoadingWithMessage:message inView:view enabled:YES]; } /** * 在view上显示菊花+文字 */ + (void)showLoadingWithMessage:(NSString *)message inView:(nullable UIView *)view enabled:(BOOL)enabled { if (!view) { view = [UIApplication sharedApplication].keyWindow; } [self hideHUDInView:view]; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.userInteractionEnabled = enabled; hud.bezelView.color = [[UIColor whiteColor] colorWithAlphaComponent:0.8]; hud.removeFromSuperViewOnHide = YES; if (message.length) { hud.label.text = message; hud.label.numberOfLines = 0; hud.label.textColor = [UIColor blackColor]; hud.label.font = [UIFont systemFontOfSize:14]; } }); } /** 在窗口上显示自定义GIFLoading, 背景默认黑色0.35透明度, 默认拦截点击事件 */ + (void)showGIFLoading { [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; } /** 在指定的view上显示自定义GIFLoading, 背景默认黑色0.35透明度, 默认拦截点击事件 @param view 显示在哪个view上 */ + (void)showGIFLoadingInView:(nullable UIView *)view { [self showGIFLoadingInView:view bgColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.35] enabled:YES]; } /** 在指定的view上显示自定义GIFLoading @param view 显示在哪个view上 @param bgColor 背景颜色, 遮盖 @param enabled 是否可以拦截事件 no:不拦截 yes:拦截 */ + (void)showGIFLoadingInView:(nullable UIView *)view bgColor:(nullable UIColor *)bgColor enabled:(BOOL)enabled { if (!view) { view = [UIApplication sharedApplication].keyWindow; } [self hideHUDInView:view]; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.minSize = CGSizeMake(100, 150); hud.userInteractionEnabled = NO; hud.mode = MBProgressHUDModeCustomView; [hud.bezelView addSubview:[self loadingView]]; hud.backgroundColor = bgColor; hud.bezelView.color = [UIColor clearColor]; hud.removeFromSuperViewOnHide = YES; }); } + (void)showAnchorLoading { UIView *view = [UIApplication sharedApplication].delegate.window; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.userInteractionEnabled = NO; hud.mode = MBProgressHUDModeCustomView; hud.minSize = CGSizeMake(100, 150); [hud.bezelView addSubview:[self loadingView ]]; hud.bezelView.color = [UIColor clearColor]; hud.removeFromSuperViewOnHide = YES; }); } + (void)showAnchorLoading:(UIView *)view { dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.userInteractionEnabled = NO; hud.mode = MBProgressHUDModeCustomView; hud.minSize = CGSizeMake(100, 150); [hud.bezelView addSubview:[self loadingView ]]; hud.bezelView.color = [UIColor clearColor]; hud.removeFromSuperViewOnHide = YES; }); } #pragma mark - private + (MBProgressHUD *)normalProgressHUD:(UIView *)view { MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.removeFromSuperViewOnHide = YES; return hud; } + (UIView *)loadingView { UIView *bgView = [UIView new]; bgView.backgroundColor = [UIColor clearColor]; bgView.frame = CGRectMake(0, 0, 100, 150); SVGAParser *parser = [[SVGAParser alloc]init]; SVGAImageView* playView = [[SVGAImageView alloc]init]; playView.contentMode = UIViewContentModeScaleAspectFit; playView.frame = CGRectMake(0, 0, 100,150); playView.backgroundColor = [UIColor clearColor]; playView.userInteractionEnabled = NO; [parser parseWithNamed:@"pi_new_loading" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { playView.layer.masksToBounds = YES; playView.contentMode = UIViewContentModeScaleAspectFill; playView.videoItem = videoItem; [playView startAnimation]; } failureBlock:^(NSError * _Nonnull error) { }]; [bgView addSubview:playView]; return bgView; } +(void)hideOnlyView:(UIView *)view{ dispatch_main_sync_safe(^{ if (view) { UIView *getView; if([view isKindOfClass:[MvpViewController class]]){ getView = ((MvpViewController *)view).view; }else{ getView = view; } MBProgressHUD *hud = [XNDJTDDLoadingTool HUDForView:getView]; if (hud != nil && hud.mode != MBProgressHUDModeText) { hud.removeFromSuperViewOnHide = YES; [hud hideAnimated:NO]; } } }); } +(void)showOnlyView:(UIView *)view{ if (!view) { view = [UIApplication sharedApplication].keyWindow; } [self hideOnlyView:view]; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.minSize = CGSizeMake(100, 150); hud.userInteractionEnabled = NO; hud.mode = MBProgressHUDModeCustomView; [hud.bezelView addSubview:[self loadingView]]; hud.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.35]; hud.bezelView.color = [UIColor clearColor]; hud.removeFromSuperViewOnHide = YES; }); } +(void)showOnlyView:(UIView *)view enabled:(BOOL)enabled{ if (!view) { view = [UIApplication sharedApplication].keyWindow; } [self hideOnlyView:view]; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.minSize = CGSizeMake(100, 150); hud.userInteractionEnabled = enabled; hud.mode = MBProgressHUDModeCustomView; [hud.bezelView addSubview:[self loadingView]]; hud.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.35]; hud.bezelView.color = [UIColor clearColor]; hud.removeFromSuperViewOnHide = YES; }); } @end