328 lines
10 KiB
Objective-C
328 lines
10 KiB
Objective-C
|
|
|
|
// Created by YM on 2022/5/15.
|
|
// Copyright © 2023 YUMI. All rights reserved.
|
|
|
|
|
|
#import "XNDJTDDLoadingTool.h"
|
|
#import "GCDHelper.h"
|
|
#import <MBProgressHUD/MBProgressHUD.h>
|
|
#import "MvpViewController.h"
|
|
|
|
#define kDelayTime 2.5
|
|
@interface XNDJTDDLoadingTool ()
|
|
|
|
@property (class,nonatomic,copy) NSArray *animationImages;
|
|
@end
|
|
|
|
@implementation XNDJTDDLoadingTool
|
|
|
|
static NSArray * _animationImages = nil;
|
|
|
|
|
|
+ (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;
|
|
}
|
|
|
|
|
|
+ (void)hideHUD {
|
|
[self hideHUDInView:nil];
|
|
}
|
|
|
|
|
|
+ (void)showSuccessWithMessage:(NSString *)message {
|
|
[self showSuccessWithMessage:message inView:[UIApplication sharedApplication].keyWindow];
|
|
}
|
|
|
|
|
|
+ (void)showSuccessWithMessage:(NSString *)message inView:(nullable UIView *)view {
|
|
[self showSuccessWithMessage:message inView:view delay:kDelayTime enabled:NO];
|
|
}
|
|
|
|
|
|
+ (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];
|
|
});
|
|
}
|
|
|
|
|
|
+ (void)showErrorWithMessage:(NSString *)message {
|
|
[self showErrorWithMessage:message inView:[UIApplication sharedApplication].keyWindow];
|
|
}
|
|
|
|
|
|
+ (void)showErrorWithMessage:(NSString *)message inView:(nullable UIView *)view {
|
|
[self showErrorWithMessage:message inView:view delay:kDelayTime enabled:NO];
|
|
}
|
|
|
|
|
|
+ (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];
|
|
}
|
|
|
|
|
|
+ (void)showLoadingInView:(nullable UIView *)view {
|
|
[self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow];
|
|
return;
|
|
[self showLoadingInView:view enabled:YES];
|
|
}
|
|
|
|
|
|
+ (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];
|
|
}
|
|
|
|
|
|
+ (void)showLoadingWithMessage:(NSString *)message inView:(nullable UIView *)view {
|
|
|
|
[self showLoadingWithMessage:message inView:view enabled:YES];
|
|
}
|
|
|
|
|
|
+ (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];
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
|
|
+ (void)showGIFLoading {
|
|
[self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow];
|
|
}
|
|
|
|
|
|
+ (void)showGIFLoadingInView:(nullable UIView *)view {
|
|
[self showGIFLoadingInView:view bgColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.35] enabled: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);
|
|
|
|
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
|